2016-12-25 3 views
2

После развертывания проекта на машине клиента файл журнала sql db вырос до 450 ГБ, хотя размер db меньше 100 МБ. Режим ведения журнала установлен в простой режим, а транзакции - отправьте с помощью службы Windows, которая отправляет транзакции вставки и обновления каждые 30 секунд. мой вопрос в том, как узнать причину роста файла журнала db? Я хотел бы знать, как контролировать файл журнала, чтобы узнать, какая именно транзакция вызывает эту проблему. Должен ли я отлаживать передний конец? или нет, которые выставляют транзакции, которые вызывают рост файла журнала db. Спасибо.Мониторинг файла журнала SQL

+0

Altered мой ответ, чтобы отразить мою поправку о том, как SIMPLE ВОССТАНОВЛЕНИЕ обрезает LOG FILE. По сути, он полагается на CHECKPOINTS, прежде чем он усечет неактивные транзакции ... в результате он вырос до этого чудовищного размера. –

ответ

2

Обратите внимание, что простая модель восстановления не позволяет создавать резервные копии журналов, поскольку она хранит наименьший объем информации и полагается на CHECKPOINT, поэтому, если это критическая база данных, подумайте о защите клиента с помощью плана FULL RECOVERY. Да, вам нужно использовать больше места, но дисковое пространство дешево, и вы можете иметь больший контроль над временем восстановления времени и управлять файлами журнала. Стараясь быть кратким:

  • A) База данных в простом режиме только усечение транзакции в журнале транзакций, как когда CHECKPOINT создается.

  • B) К сожалению, большие/много uncommitted transactions, в том числе BACKUP, создание SNAPSHOT и LOG SCANs, среди прочего остановит вашу базу данных от создания этих контрольно-пропускных пунктов и ваша база данных будет оставить незащищенными, пока эти операции не будут завершены.

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

Другими словами, это то, что смешно, потому что размер вашей базы данных не может создать CHECKPOINT для усечение этих сделок достаточно часто ....

записочку на лог-файлы

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

Используйте DBCC SQLPERF(logspace), чтобы узнать, сколько у вас используется в лог-файле и насколько оно велико. После выполнения полной резервной копии файл журнала будет усечен до оставшихся незафиксированных/активных транзакций. (Не путать с сокращением размера)

Некоторые предложения по изучению ваших сделок:

  • Вы можете использовать системные таблицы, чтобы увидеть самый дорогой кэш, частые и активные планы.
  • Вы можете выполнить поиск в файле журнала с помощью недокументированной расширенной хранимой процедуры, fn_dblog.
  • Pinal имеет большую информацию по этой теме, которые вы можете прочитать на этой странице и ссылка: Beginning Reading Transaction Log
+0

изменил ответ, поскольку получается, что ПРОСТОТА ВОССТАНОВЛЕНИЯ урезает файл журнала .... но только после создания CHECKPOINT .... что в этом случае было невозможно из-за активности базы данных. –

1

Файл журнала - это текст, и в зависимости от уровней журнала и количества ошибок и сообщений, которые вы получаете, эти файлы могут расти очень быстро.

Вам нужно повернуть ваши журналы с чем-то вроде logrotate, хотя из вашего вопроса это звучит так, будто вы используете Windows, поэтому не знаете, какое решение для этого было бы.

Основы поворота журнала берут ежедневные/еженедельные версии журналов и сжимают их с помощью gzip или аналогичных и уничтожают несжатую версию.

Как и текст с большим количеством повторений, это сделает файлы очень маленькими в сравнении, и они должны решить ваши проблемы с хранением.

1

пространства для файлов журнала не будет использоваться повторно, если есть открытая transaction..You может проверить причину журнала пространства повторного использования, используя ниже DMV ..

select log_reuse_wait_desc,database_id from sys.databases 

В вашем случае, база данных устанавливается в простой и база данных составляет 100 МБ .. но журнал вырос до 450 ГБ .., который очень велик.

Моя теория заключается в том, что могут быть некоторые открытые транзакции, которые предотвратили повторное использование журнала. после того, как она выросла.

Как известно, вы можете работать над DMV и видеть , что мешает повторному использованию пространства журналов в данный момент, вы не можете вернуться вовремя, чтобы узнать, что предотвращает повторное использование пространства журналов

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