トランザクションログファイルVLFの再利用をブロックしているアクティブなトランザクションの一部であるT-SQLステートメントを見つける方法はありますか?
15分ごとにtlogバックアップを実行していますが、次のクエリがACTIVE_TRANSACTION
またはLOG_BACKUP
を返す場合があります(そのような場合でも)。
SELECT [name]
,[recovery_model_desc]
,[log_reuse_wait_desc]
FROM [sys].[databases]
DBCC Loginfo
を実行すると、最初と最後の行のステータスが0
であることがわかります。
LOG_REUSE_WAIT_DESC
は、バックアップされていないトランザクションが少なくとも1つある場合は常にLOG_BACKUP
を表示します(データベースが完全復旧モードの場合)。
このクエリの結果を見ると、アクティブなセッション、リクエスト、各セッションのトランザクション数を確認できます。
SELECT SessionID = s.session_id
, HostName = s.Host_name
, ProgramName = s.program_name
, SessionElapsedTime = s.total_elapsed_time
, RequestCommand = r.command
, DatabaseName = d.name
, StatementExecuting = case when r.statement_end_offset > 0 THEN
SUBSTRING(t.text, r.statement_start_offset, r.statement_end_offset -
r.statement_start_offset)
ELSE t.text END
, tst.open_transaction_count
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
LEFT JOIN sys.databases d ON r.database_id = d.database_id
LEFT JOIN sys.dm_tran_session_transactions tst ON s.session_id = tst.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t;
そのクエリをトランザクションでラップすると、open_transaction_count
フィールドに1
が表示されます。これは、タブレットで他のアクティビティが実行されていないためです。