2012-03-30 3 views
1

Я работаю над базой данных, которая составляет около 6 ГБ. Мне нужно преобразовать все столбцы non unicode в unicode, например. измените все varchar на nvarchar.Изменение таблицы для изменения типа данных, вызывающего очень большой файл базы данных

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

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

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

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

ответ

5

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

+0

Спасибо за ответ JotaBe, к сожалению нет, это файл .mdf, а не .ldf-файл, который растет. – Stefg

+0

Проверьте, имеют ли таблицы кластеризованные индексы с низким коэффициентом заполнения. Попробуйте сделать DBCC DBREINDEX в некоторых более крупных и увидеть результат. Если ваш nvarchar очень большой, и у вас низкий коэффициент заполнения, у вас может быть много свободного места для таблиц. Это относится только к индексам clusterd. – JotaBe

+0

Вы были правы JotaBe ... это был файл журнала! Я допустил ошибку при восстановлении базы данных и поместил файл журнала в каталог, где должен был быть файл данных, и файл данных в каталоге журналов. Так что это объясняет, я путаю 2 файла. Большое спасибо за вашу помощь. – Stefg

1

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

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

+0

Спасибо за то, что Диего. Я проверил это, но рост авто был 10 МБ, но я ошибся с файлами данных и журналов, и именно эта путаница заставила меня поверить, что это был файл данных, который рос, а не файл журнала. – Stefg

Смежные вопросы