Файл LDF продолжает очень сильно увеличиваться на этапе транзакции — SQL Server 2005

У нас есть шаг 6, на котором мы копируем таблицы из одной базы данных в другую. Каждый шаг выполняет хранимую процедуру.

  1. Удалить таблицы из целевой базы данных
  2. Создать таблицы в целевой базе данных
  3. Уменьшить журнал базы данных перед копированием
  4. Копировать таблицы из источника в место назначения
  5. Уменьшить журнал базы данных
  6. Резервное копирование базы данных назначения

на шаге 4 наш журнал транзакций (файл ldf) становится очень большим, и теперь нам приходится постоянно увеличивать максимальный размер на сервере sql, и достаточно скоро (в далеком будущем), мы полагаем, что он может поглотить все ресурсы на нашем сервере. сервер. Было предложено, чтобы в нашем скрипте мы совершали каждую транзакцию, а не ждали до конца, чтобы зафиксировать транзакции.

Какие-либо предложения?


person that_developer    schedule 12.07.2013    source источник
comment
Прочитайте эту статью и связанные с ней статьи. Уменьшение файла журнала транзакций — худшее, что вы можете сделать. brentozar.com/archive/2009 /08/   -  person Namphibian    schedule 15.08.2013


Ответы (2)


Я сделаю предположение, что вы перемещаете большие объемы данных. Типичное решение этой проблемы — разбить копию на меньшее количество строк. Это уменьшит попадание в журнал транзакций. Я думаю, что это будет предпочтительным ответом.

Другой ответ, который я видел, - это использование массового копирования, которое записывает данные в текстовый файл и импортирует их в вашу целевую базу данных с помощью массового копирования. Я видел много сообщений, которые рекомендуют это. Я не пробовал.

Если схема целевых таблиц не меняется, не могли бы вы просто урезать данные в целевых таблицах вместо того, чтобы удалять и создавать их заново?

person John Puttman    schedule 12.07.2013
comment
Спасибо за ответ. Мы еще не думали об этом, но если подумать, будет ли усечение данных вместо их удаления эффективным пространством? - person that_developer; 12.07.2013

Можете ли вы изменить модель восстановления базы данных на Bulk Logged для этого процесса?

Затем вместо создания пустых таблиц в месте назначения выполните SELECT INTO, чтобы создать их. После того, как они построены, измените таблицы, чтобы добавить индексы и ограничения. Подобные массовые копии значительно уменьшат ваши требования к ведению журналов.

person Anon    schedule 12.07.2013
comment
Спасибо за ответ. Массовое ведение журналов — это то, что мы упомянули в обсуждении, но не уверены, что это передовой опыт нашего отдела в области ведения журналов и какие данные действительно важны. - person that_developer; 12.07.2013
comment
На самом деле разница между режимом массового ведения журнала и полным ведением журнала очень мала. См. это обсуждение об этом модель массового восстановления" rel="nofollow noreferrer">social.msdn.microsoft.com/Forums/sqlserver/en-US/ - person Namphibian; 15.08.2013
comment
Вот почему я рекомендовал использовать SELECT INTO, так как это одна из немногих команд, где есть разница между режимами. Прочитайте весь ответ, прежде чем голосовать. - person Anon; 16.08.2013