web-dev-qa-db-ja.com

VLFでアクティブなトランザクションを見つける方法は?

トランザクションログファイルVLFの再利用をブロックしているアクティブなトランザクションの一部であるT-SQLステートメントを見つける方法はありますか?

15分ごとにtlogバックアップを実行していますが、次のクエリがACTIVE_TRANSACTIONまたはLOG_BACKUPを返す場合があります(そのような場合でも)。

SELECT [name]
      ,[recovery_model_desc] 
      ,[log_reuse_wait_desc]
FROM [sys].[databases]

DBCC Loginfoを実行すると、最初と最後の行のステータスが0であることがわかります。

4
gotqn

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;

enter image description here

そのクエリをトランザクションでラップすると、open_transaction_countフィールドに1が表示されます。これは、タブレットで他のアクティビティが実行されていないためです。

enter image description here

5
Max Vernon