2010-03-31 3 views
6

Я зашел и проверил журнал транзакций на днях, и это было что-то сумасшедшее, как 15 ГБ. Я побежал следующий код:SQL Server 2008 - Сокращение журнала транзакций - любой способ автоматизации?

USE mydb 
GO 
BACKUP LOG mydb WITH TRUNCATE_ONLY 
GO 
DBCC SHRINKFILE(mydb_log,8) 
GO 

который работал хорошо, сжался его до 8MB ... но DB в вопросе является доставка журналов издатель, и журнал уже обратно до некоторой 500MB и растет быстро.

Есть ли способ автоматизировать сокращение этого журнала за пределами создания пользовательской задачи «Выполнение задачи T-SQL Task» и ее привязки к моей задаче резервного копирования журнала? Если это лучший способ, то хорошо ... но я просто думал, что SQL Server будет иметь лучший способ справиться с этим. Я думал, что он должен автоматически сжиматься всякий раз, когда вы берете резервную копию журнала, но этого не происходит (возможно, из-за моей доставки журналов, я не знаю).

Вот мой текущий план резервного копирования:

  • Полное резервное копирование каждую ночь
  • резервных копий журнала транзакций один раз в день, поздно утром (возможно, сцепите Log сокращения на это ... не нужно быть сжался каждый день)

Возможно, я просто запускаю его один раз в неделю после выполнения полной задачи резервного копирования? Что вы все думаете?

+0

, если журнал заполняет право снова - в течение довольно короткого периода времени - что точка постоянно сокращается его? Просто потому, что файл не становится меньше, не означает, что он по-прежнему заполнен данными после резервного копирования журнала транзакций. – davek

+0

«Какой смысл постоянно его усаживать?» Пространство на жестком диске ... Я думаю, что это не самые большие проблемы, но нет необходимости, чтобы эта вещь занимала пространство ГБ. – Albert

+0

Похоже, вам просто нужны инкрементные полные резервные копии несколько раз в день, и вам не нужно сокращаться. – djangofan

ответ

18

Если файл длится каждую ночь при 500 МБ, то существует только одно правильное действие: предварительно разрасти файл до 500 МБ и оставить его там. Уменьшение файла журнала повреждает. Наличие автоматического роста файла журнала также повреждает.

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

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

Есть больше, я просто устал, связывая их.

Каждый раз, когда вы сжимаете файл журнала, фея теряет свои крылья.

+3

+10 здравомыслие. Сокращение журнала - это одно место, где я горячо отстаиваю использование вложенных 72-точечных мигающих предупреждающих диалогов с кнопками «ОК», которые вы должны преследовать по экрану с помощью указателя мыши. – Aaronaught

+0

Последние две ссылки в сообщении приводят к одному и тому же URL-адресу. Это намеренно? –

5
+0

Спасибо за ссылку. Я думаю, проблема заключается в следующем: «Пока создается резервная копия файлов журнала транзакций, SQL Server автоматически обрезает неактивную часть журнала транзакций». не происходит – Albert

+2

@Albert: усечение, скорее всего, происходит - файл просто не сокращается автоматически. См. Ответ Joe L. - фактическое сокращение файла журнала - это отдельный шаг –

+2

@Albert, если вы делаете более частые резервные копии журналов, неактивные транзакции будут усечены, освобождая место в журнале для новых транзакций, не требуя сжатия сам файл журнала. –

1

Я думаю, что вы предлагаете в своем вопросе правильный подход. То есть, «привяжите журнал, сокращаясь» на ваш ночной процесс резервного копирования/обслуживания. Главное, что вы регулярно делаете резервные копии журналов транзакций, что позволит сократить размер базы данных при выполнении задачи сжатия. Главное, что нужно иметь в виду, это двухэтапный процесс: 1) создать резервную копию журнала транзакций, который автоматически «обрезает» ваш файл журнала; 2) запустите сжатие файла журнала. «truncate» не обязательно (или никогда?) означает, что файл будет уменьшаться ... сжатие - это отдельный шаг, который вы должны сделать.

0

для SQL Server 2005

DBCC SHRINKFILE (Database_log_file_name, NOTRUNCATE)

Это утверждение не ломаются доставки журналов. Но вам может потребоваться запустить более одного. Для каждого запуска резервное копирование журналов, копирование и восстановление для запуска снова запускают этот оператор.

Термоусадочные и усеченные разные.

Мой опыт:

AA дБ, 6.8GB журнал транзакций
первый запуск: 6,8 Гб
журнала резервного копирования доставка, копирование, восстановление после второго запуска: 1.9 GB
журнала резервного копирования, доставки, восстановление после третий пробег: 1,7 GB
журнала резервного копирования доставки, копирование, восстановление после четвертого запуска: 1 Гб

BB дб, журнал транзакций 50GB
первого пробег: 39 GB
резервное копирование журналов, копирование, восстановление после второго запуска: 1 ГБ

0

Создание резервной копии журнала транзакций не означает, что размер файла онлайн-транзакции будет уменьшен. Размер файла остается прежним. Когда транзакция резервируется, в журнале транзакций он помечен для перезаписи. Он не удаляется автоматически и освобождается пространство, поэтому размер остается неизменным.

После того, как вы установили размер файла LDF, сохраните его размер, установив правильную частоту резервного журнала журнала транзакций.

Пол Рэндал предоставляет подробности здесь:

Understanding Logging and Recovery in SQL Server

Understanding SQL Server Backups

0

По рекомендации Microsoft Перед тем, как собираетесь термоусадочную файл журнала сначала следует попытаться выполнить следующие возможности:

  • Освобождение дискового пространства, чтобы журнал мог автоматически расти.
  • Перемещение файла журнала на дисковод с достаточным пространством.
  • Увеличение размера файла журнала.
  • Добавление файла журнала на другой диск.
  • Включите автоматический рост с помощью инструкции ALTER DATABASE, чтобы установить ненулевой приращение роста для параметра FILEGROWTH.

    ALTER DATABASE EmployeeDB ИЗМЕНИТЬ ФАЙЛ (NAME = SharePoint_Config_log, SIZE = 2MB, MAXSIZE = 200MB, FILEGROWTH = 10MB);

Кроме того, вы должны знать, что операция усадки через план обслуживания будет влиять на файл * .mdf и * .ldf-файл. поэтому вам нужно создать план обслуживания с заданием задания SQL и написать следующую команду, чтобы только уменьшить размер файла * .ldf до вашего целевого размера.

use sharepoint_config 
go 
alter database sharepoint_config set recovery simple 
go 
dbcc shrinkfile('SharePoint_Config_log',100) 
go 
alter database sharepoint_config set recovery FUll 
go 

Примечание: 100 называется target_size для файла в мегабайтах, выраженный в виде целого числа. Если не указано, DBCC SHRINKFILE уменьшает размер до размера файла по умолчанию. Размер по умолчанию - это размер, указанный при создании файла.

По моему скромному мнению, не рекомендуется периодически выполнять термоусадочную работу! Только в некоторых случаях вам необходимо уменьшить физический размер.

Вы также можете проверить это полезное руководство Shrink a transaction log file Maintenance Plan in SQL Server

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