読者です 読者をやめる 読者になる 読者になる

GOOGZONW

ふと思い立ったことをまとめたら記事にあげるブログ

MENU

トランザクションの所要時間をトランザクションログから見てみよう

f:id:katamichinijikan:20170303085249j:plain

環境はSQL Serverです。 

異常に長いトランザクションが稀に発生する原因究明のため、ログを調べました。

 

 

トランザクションログの中身を見るには

select * from sys.fn_dblog(null, null)

 

トランザクションログのバックアップの中身を見るには

SELECT *
FROM sys.fn_dump_dblog(NULL, NULL, NULL, 1 , N'バックアップファイルのパス' , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL) 

 

メモ

  • トランザクションログのバックアップは.bakか.trn形式
    SQL Server Management Studioからデータベースを右クリックし、タスク>バックアップ>バックアップの種類からトランザクションログを選択
  • Transaction IDが一つのトランザクションを意味する
  • 一つのトランザクションの中の処理はCurrent LSNで識別される(処理順序は末尾の番号順)
  • Operationに処理区分が記録される
  • 処理の始まり(Operation:LOP_BEGIN_XACT)のBegin Time列にトランザクションの開始時間
  • 処理の終わり(Operation:LOP_COMMIT_XACTなど)のEnd Time列にトランザクションの終了時間が記録される
  • Begin TimeとEnd Timeを比較するにはDateTimeなどに変換する
    CONVERT(DATETIME, [Begin Time])など
  • Transaction IDで集約し、End Time - Begin Timeでトランザクションの所要時間がわかる
  • システムとバックアップ頻度や初期サイズによるが、データが多くて超時間がかかる