Я работаю над базой данных, которая составляет около 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 ГБ, поэтому я хотел бы понять, почему изменение типы столбцов вызвали такой рост.
Спасибо за ответ JotaBe, к сожалению нет, это файл .mdf, а не .ldf-файл, который растет. – Stefg
Проверьте, имеют ли таблицы кластеризованные индексы с низким коэффициентом заполнения. Попробуйте сделать DBCC DBREINDEX в некоторых более крупных и увидеть результат. Если ваш nvarchar очень большой, и у вас низкий коэффициент заполнения, у вас может быть много свободного места для таблиц. Это относится только к индексам clusterd. – JotaBe
Вы были правы JotaBe ... это был файл журнала! Я допустил ошибку при восстановлении базы данных и поместил файл журнала в каталог, где должен был быть файл данных, и файл данных в каталоге журналов. Так что это объясняет, я путаю 2 файла. Большое спасибо за вашу помощь. – Stefg