LOCKトレース
LOCKコンポーネントを使用すると、アプリケーションのロック動作をトレースして、デッドロックまたはロックの待機による問題を検出できます。LOCKトレースは大量の情報を生成するので、適切なトレース・レベルを選択することが重要です。たとえば、レベル3では、ごく一般的なイベントについてもトレースが作成されるため、大量のトレースが発生します。また、トレース自体が読みにくくなることもあります。必要な情報が見つからない場合は、TimesTenカスタマ・サポートに連絡してください。
表2-4に、LOCKトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
表2-4 LOCKトレース・レベル
| レベル | 出力 |
|---|---|
|
1 |
検出されたデッドロック・サイクル |
|
2 |
+ なんらかの理由によるロック付与の失敗 |
|
3 |
+ ロックの待機(付与の有無に依存しない) |
|
4 |
+ すべてのロックの付与/解除、ルーチンのコール、デッドロック検出のメカニズム |
|
6 |
+ サイクルにおける各ステップ |
この例では、myDSNデータベースに対してLOCKトレースをレベル4で実行するためにttTraceMonを実行します。
myDSNへの2つの接続を作成します。最初の接続では、自動コミットを有効にします。表testを作成して3行挿入します。表testを使用してマテリアライズド・ビューを作成します。
レベル4でトレースを有効にし、flushコマンドを使用してバッファを空にします。
% ttTraceMon myDSN Trace monitor; empty line to exit Trace> level lock 4 Trace> flush
myDSNへの2つ目の接続では、自動コミットを無効にします。表testに1行挿入します。自動コミットが無効なため、コミットされるまで表に行は挿入されません。トランザクションがコミットされる、またはロールバックされるまで、ロックは保持されます。
dumpコマンドを使用してトレース・バッファの内容を表示すると、トレース・バッファにレコードがないことがわかります。
Trace> dump 0 records dumped
最初の接続からマテリアライズド・ビューを削除してみます。コミットまたはロールバックされていないトランザクションがあるため、ビューは削除されません。
Command> drop materialized view v; 6003: Lock request denied because of time-out Details: Tran 3.71 (pid 24524) wants Sn lock on table TTUSER.TEST. But tran 1.42 (pid 24263) has it in IXn (request was IXn). Holder SQL (insert into test values (100);) The command failed.
トレース・バッファには次の情報が含まれます。
Trace> dump 20:09:04.789 174759 LOCK 3L 3C 24524P ENQ: xcb:00003 <Tbl 0x9b894,0x0> 0+Sn=>SL activity 0 Sn cnt=0; Holder xcb:00001 IXn 20:09:04.789 174760 LOCK 3L 3C 24524P Connection 3 scheduled for sleep 20:09:04.789 174761 LOCK 3L 3C 24524P Connection 3 sleeping 20:09:14.871 174762 LOCK 3L 2047C 24237P Connection 3 timed out 20:09:14.871 174763 LOCK 3L 2047C 24237P Connection 3 woken up 20:09:14.871 174764 LOCK 3L 3C 24524P Connection 3 awake 20:09:14.871 174765 LOCK 2L 3C 24524P ENQ: xcb:00003 <Tbl 0x9b894,0x0> 0+Sn=>TM activity 0 Sn cnt=1; Holder xcb:00001 IXn 7 records dumped
トレースが終了したら、LOCKトレースをデフォルトの設定(0)に戻し、ttTraceMonを終了します。
Trace > level lock 0
Trace > {press ENTER – blank line}