После обновления с SQL2005 до 2008 SP1 мы неожиданно наблюдаем непропорциональное расширение файла журнала базы данных во время крупных транзакций.
Пример: вставка 75 миллионов строк в таблицу B, удаление тех же 75 миллионов строк из таблицы A, обе в одной транзакции. Общий объем данных примерно в 2 раза превышает 20 ГБ, но файл журнала базы данных увеличивается до 150 ГБ и более.
Никогда не видел этого в SQL2005 до обновления.
Я нигде не мог найти это задокументировано как известную регрессию в SQL2008 .. Кто-нибудь тоже это видел?
Спасибо
Максимум
Вы всегда можете использовать fn_dblog (), чтобы проанализировать содержимое журнала и понять, откуда взялось увеличение. При простом восстановлении журнал может перевернуться и его нельзя будет проанализировать, поэтому в целях анализа я бы рекомендовал изменить восстановление на полное, сделав фиктивную полную резервную копию на / dev / nul (backup database ... to disk='nul:'
) и перезапустите вашу транзакцию. Если возможно, отметьте идентификатор транзакции (см. sys.dm_tran_active_transactions
) затем загляните в select ... from fn_dblog(null, null) where [TransactionID] = 'xactid'
выведите и посмотрите, какие записи создаются, чтобы ваш журнал увеличился до 150 ГБ. Зарезервированное пространство - это соответствующий столбец для вас. В конце концов, если возможно, сравните с таким же на SQL 2005.
После этого вы можете вернуть модель восстановления к простой. Обратите внимание, что поведение резервирования журнала может отличаться от простого, чем при полном, но мы перейдем через этот мост, когда доберемся до него, если это произойдет.
Ваш журнал транзакций может быть настроен на автоматический рост. Отключите этот параметр и установите для файла журнала фиксированный размер.
Это для SQL 2005, но также может иметь отношение к 2008 году.
Это связано с тем, что ваш файл журнала регистрирует все, что я бы рекомендовал, так это обрезать файлы журнала базы данных с помощью Задача сжатия базы данных. Не забудьте сделать это после того, как вы сделали резервную копию.
Tsql для этого:
USE [N2CMS]
GO
DBCC SHRINKDATABASE(N'MyDataBase', 10, TRUNCATEONLY)
В зависимости от того, как вы делаете резервные копии, ваше программное обеспечение резервного копирования должно уметь это делать