Назад | Перейти на главную страницу

Как определить и устранить причину роста журнала транзакций в базах данных модели SIMPLE recovery?

Недавно я обновил наши установки SQL Server 2008 до пакета обновления 2. Одна из наших баз данных использует простую модель восстановления, но ее журнал транзакций постоянно растет. Кажется, что журнал не усекается, как это должно быть при простой модели восстановления.

Путь, который я сейчас исследую, заключается в том, что у нас где-то там транзакция застряла в активном состоянии. Вот почему:

select name, recovery_model_desc, log_reuse_wait_desc  from sys.databases where name in ('SimpleDB')
name     recovery_model_desc log_reuse_wait_desc
SimpleDB SIMPLE              ACTIVE_TRANSACTION

Когда я проверяю свои активные транзакции, я получаю следующее. Обратите внимание, что я установил SP2 и перезапустил наш сервер 25 декабря около полудня.

select transaction_id, name, transaction_begin_time, transaction_type from sys.dm_tran_active_transactions
transaction_id name                         transaction_begin_time   transaction_type
233            worktable                    2010-12-25 12:44:29.283  2
236            worktable                    2010-12-25 12:44:29.283  2
238            worktable                    2010-12-25 12:44:29.283  2
240            worktable                    2010-12-25 12:44:29.283  2
243            worktable                    2010-12-25 12:44:29.283  2
245            worktable                    2010-12-25 12:44:29.283  2
62210          tran_sp_MScreate_peer_tables 2010-12-25 12:45:00.880  1
55422856       user_transaction             2010-12-28 16:41:56.703  1
55422889       SELECT                       2010-12-28 16:41:57.303  2
470            LobStorageProviderSession    2010-12-25 12:44:30.510  2

Обратите внимание, что согласно документация значение transaction_type, равное 1, означает чтение / запись, а 2 - только чтение.

Итак, я полагаю, что транзакция trans_sp_MScreate_peer_tables по какой-то причине застряла и задерживает усечение журнала транзакций. Это правдоподобный сценарий? Поправьте меня, если я ошибаюсь, поскольку я не эксперт по SQL Server. Если это правильно, как мне стереть эту транзакцию, чтобы мой журнал транзакций был усечен как обычно?

Запустите «DBCC OPENTRAN», и он сообщит вам spid, у которого самая долгая транзакция в базе данных. Обязательно запускайте его в контексте рассматриваемой базы данных.