Недавно я обновил наши установки 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, у которого самая долгая транзакция в базе данных. Обязательно запускайте его в контексте рассматриваемой базы данных.