#sql #sql_server
Есть база данных myDataBase в ней есть таблица myTable в таблице около двух миллионов
записей. При попытке добавить столбец к этой таблице
ALTER TABLE dbo.myTable ADD myTable_id int identity(1,1) not null primary key
получаю ошибку:
Msg 9002 The transaction log for database 'myDataBase' is full due to 'ACTIVE_TRANSACTION'.**
Из сообщения понятно что переполнен журнал transaction log
После этого увеличил размер log файла:
ALTER DATABASE myDataBase
MODIFY FILE
(NAME = myDataBase_log ,
MAXSIZE = 170MB)
GO
и применил команду:
CHECKPOINT
DBCC SHRINKFILE ('myDataBase_log')
До выполнения команды:
ALTER TABLE dbo.myTable ADD myTable_id int identity(1,1) not null primary key
размер log файла 27MB после 150MB и всё равно ошибка Msg 9002. Подскажите как в данной
ситуации поступить:
Увеличивать размер log файла? если увеличивать то на сколько?
Нормальное ли это поведение log файла?
Ответы
Ответ 1
Да, это нормальное поведение. SQL Server немедленно пишет все вносимые вами изменения в transaction log. Ваш ALTER требует полного пересоздания таблицы - т.к. вы добавляете кластерный индекс. Соответственно, в лог будут записано удаление старых данных + вставка их заново, с попутным пересозданием всех индексов. Так что объем лог-файла стоит увеличить минимум до 2x размера таблицы (лучше 4x). Я бы на вашем месте выставил размер лога не исходя из размера базы, а исходя из доступного места на диске (т.е. все свободное место минус минимальный запас). или вообще снял ограничение. Размер таблицы + размер индексов можно посмотреть в View / Object Explorer Details в Management Studio.
Комментариев нет:
Отправить комментарий