Изменить таблицу, чтобы изменить тип данных, вызывая очень большой файл базы данных - PullRequest
1 голос
/ 30 марта 2012

Я работаю над базой данных размером около 6 Гб.Мне нужно преобразовать все столбцы, отличные от Юникода, в Юникод, например, изменить все varchar на nvarchar.

Я написал это с помощью операторов ALTER, таких как ALTER TABLE mytable ALTER COLUMN mycolumn nvarchar(...), но впоследствии обнаружил, что размер базы данных значительно увеличился.Файл .mdf вырос до более чем 70 Гб, что меня удивило.Я знаю, что Юникод занимает в 2 раза больше пространства varchar, но даже если бы база данных была вся varchar и была конвертирована, я бы ожидал, что ее максимальный размер будет 12 ГБ.

Я пытался сжать базу данных и файлы, чтобы посмотреть,это было нераспределенное пространство, но это имело небольшой эффект, и sp_spaceused указало, что не было чрезмерного количества нераспределенного пространства.

Кто-нибудь знает, почему база данных стала бы такой большой?Я очень хочу понять, что могло бы вызвать это.

Мне удалось изменить типы данных столбца на Unicode, создав новую базу данных со сценарием из старой базы данных и импортировав все данные, и результат увеличилсяразмером всего 1 ГБ, поэтому я хотел бы понять, почему изменение типов данных столбца вызвало такой рост.

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Вы проверили, есть ли увеличенный размер в лог-файле?Если это проблема, обрежьте ее, сделав резервные копии вашей базы данных.Это наиболее вероятная проблема.

1 голос
/ 30 марта 2012

Что ж, такое увеличение может создать большие накладные расходы. SQL может внутренне делать копию столбца, чтобы увеличить его. Но 70 ГБ действительно слишком большой

Кроме того, вы говорите о 70 ГБ выделенного или фактического размера данных? потому что есть разница. Проверьте свойство автоматического увеличения в файлах базы данных, если оно установлено в несколько ГБ или очень большой процент, это объясняет

...