ttTraceMonユーティリティを使用すると、多数のTimesTenコンポーネントについて様々なトレース情報を記録できます。各TimesTenコンポーネントは、様々な詳細レベルでトレースできます。ttTraceMonをshowサブコマンド付きで指定すると、トレース可能なすべてのTimesTenコンポーネントとそれらの現在のトレース・レベルを表示できます(レベル0はOFFを意味します)。ttTraceMonのオプションの完全なリストについては、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』を参照してください。
この例は、demoデータ・ストアに対するほぼすべてのトレース・コンポーネントがレベル0(OFF)に設定されていることを示しています。(ERRトレースのデフォルトはレベル1です。)
% ttTraceMon demo LATCH ... 0 LOCK ... 0 LOG ... 0 TRACE ... 0 API ... 0 HEAP ... 0 SM ... 0 OP ... 0 EE ... 0 CG ... 0 SQL ... 0 TEST ... 0 FLOW ... 0 PT ... 0 ERR ... 1 REPL ... 0 OPT ... 0 CKPT ... 0 XA ... 0 ORACON ... 0ほとんどのTimesTenコンポーネントの出力は、オラクル社カスタマ・サポート・センターでのみ使用されます。ただし、SQL、API、LOCKおよびERRコンポーネントの出力は、アプリケーションの問題のトラブルシューティングで役立つ場合があります。
新しいトレースは、ttTraceMon DSN=datastoreを指定して開始できます。たとえば、demoデータ・ストアに対してトレースを開始するには、次のように入力します。
% ttTraceMon demo Trace monitor; empty line to exit Trace >Traceプロンプトで、トレース・タイプとそのレベルを指定できます。たとえば、レベル3でSQLコンポーネントのトレースを開始するには、次のように入力します。
Trace > level sql 3この時点で、アプリケーションを実行でき、TimesTenのトレース情報がトレース・バッファに出力されます。トレース・バッファの内容を読み取るには、次の2つの方法があります。
トレース・バッファから出力される各行の書式は次のとおりです。
timestamp sequence component level connection operation
ここで、
たとえば、レベル3のSQLトレース後のトレース・バッファの行は、次のようになります。
この後の項では、次の各タイプのトレースの実行方法を説明します。
ttTraceMonをSQLコンポーネントで使用すると、TimesTenエンジンによって準備または実行されているSQLに関する情報が提供されます。次に、SQLトレースの出力レベルを、冗長度が最も低いレベルから順に示します。
この例では、demoデータ・ストアに対してSQLトレースをレベル4で実行するためにttTraceMonを実行します。SQLトレースの出力は、SQLtrace.txt ファイルに書き込みます。
% ttTraceMon demo Trace monitor; empty line to exit Trace > outfile SQLtrace.txt Trace > level sql 4ここでアプリケーションを実行します。トレース情報はSQLtrace.txtファイルに出力されます。アプリケーションが完了したら、SQLトレースを無効にし、ttTraceMonを終了します。
Trace > level sql 0 Trace > {press ENTER - blank line}SQLtrace.txtの内容は、次のとおりです。
16:32:06.317 5269 SQL 2L 3C Preparing: 16:32:06.317 5270 SQL 2L 3C insert into xyz.customer values (?,?,?,?) 16:32:06.317 5271 SQL 4L 3C sbSqlCmdCompile(E): cmdType:100, cmdNum:1001130. 16:32:06.328 5272 SQL 3L 3C Executing: insert into xyz.customer values (?,?,?,?); 16:32:06.328 5273 SQL 3L 3C Executing: insert into xyz.customer values (?,?,?,?); 16:32:06.328 5274 SQL 3L 3C Executing: insert into xyz.customer values (?,?,?,?); 16:32:06.328 5275 SQL 3L 3C Executing: insert into xyz.customer values (?,?,?,?); 16:32:06.328 5276 SQL 2L 3C Preparing: 16:32:06.328 5277 SQL 2L 3C {CALL ttOptUpdateStats('xyz.customer',1)} 16:32:06.328 5278 SQL 4L 3C sbSqlCmdCompile(E): (Found already compiled version: refCount:01, bucket:05) cmdType:100, cmdNum:1000932. 16:32:06.328 5279 SQL 3L 3C Executing: {CALL ttOptUpdateStats('xyz.customer',1)}; 16:32:06.328 5280 SQL 2L 3C Preparing: 16:32:06.328 5281 SQL 2L 3C select cust_num, region, name, address from xyz.customer 16:32:06.328 5282 SQL 4L 3C sbSqlCmdCompile(E): cmdType:100, cmdNum:1001131. 16:32:06.328 5283 SQL 4L 3C Opening: select cust_num, region, name, address from xyz.customer; 16:32:06.328 5284 SQL 4L 3C Fetching: select cust_num, region, name, address from xyz.customer; .... 16:32:06.328 5292 SQL 4L 3C Fetching: select cust_num, region, name, address from xyz.customer;
トランザクションのコミットなど、SQLを使用せずに実行するコマンドも多数あるため、APIトレースの生成が役立つ場合もあります。次に、APIトレースの出力レベルを、冗長度が最も低いものから順に示します。
この例では、demoデータ・ストアに対してAPIトレースをレベル3で実行するためにttTraceMonを実行します。APIトレースの出力は、APItrace.txtファイルに送信されます。
% ttTraceMon demo Trace monitor; empty line to exit Trace> outfile APItrace.txt Trace> level api 3ここでアプリケーションを実行します。トレース情報はAPItrace.txtファイルに出力されます。アプリケーションが完了したら、APIトレースを無効にし、ttTraceMonを終了します。
Trace > level api 0 Trace > {press ENTER - blank line}通常のアプリケーションの実行では、APItrace.txtの内容は次のようになります。APIトレースの各行の書式は、例1.11に示したSQLの書式に類似しています。
15:56:50.165 5031 API 3L 3C sb_dbConnect()(X) 15:56:50.165 5032 API 3L 3C sb_dbConnSetIsoLevel()(E) 15:56:50.175 5033 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5034 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5035 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5036 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5037 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5038 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5039 API 3L 3C sb_xactCommitQ()(E) 15:56:50.175 5040 API 3L 3C sb_dbDisconnect()(E)
LOCKコンポーネントを使用すると、アプリケーションのロック動作をトレースして、デッドロックまたはロックの待機による問題を検出できます。LOCKトレースは大量の情報を生成するので、適切なトレース・レベルを選択することが重要です。たとえば、レベル3では、ごく一般的なイベントについてもトレースが作成されるため、大量のトレースが発生します。さらに、トレース自体が読みにくくなることもあります。必要な情報が見つからない場合は、オラクル社カスタマ・サポート・センターに連絡してください。
LOCKトレース・レベル
|
出力
|
---|---|
1 | 検出されたデッドロック・サイクル。 |
2 | + なんらかの理由によるロック付与の失敗。 |
3 | + ロックの待機(付与の有無に依存しない)。 |
4 | + すべてのロックの付与/解除、ルーチンのコール、デッドロック検出のメカニズム。 |
6 |
+ サイクルにおける各ステップ。 |
この例では、demoデータ・ストアに対してLOCKトレースをレベル4で実行するためにttTraceMonを実行し、トレース・バッファから直接結果を参照します。LOCKトレースをバッファに保存する前に、flushコマンドを使用してバッファを空にします。
% ttTraceMon demo Trace monitor; empty line to exit Trace> level lock 4 Trace> flushここでアプリケーションを実行します。トレース情報はトレース・バッファに出力されます。トレース・バッファの内容は、dumpコマンドを使用すると画面に表示されます。
Trace> dump 16:16:42.336 13593 LOCK 4L 3C ENQ: xcb:00003 <DB 0x1312d00,0x0> 0+IX=> GR activity 0 IX cnt=1 16:16:42.336 13594 LOCK 4L 3C ENQ: xcb:00003 <Cmd 0x155a718,0x0> 0+S=>G R activity 0 S cnt=1 16:16:42.336 13595 LOCK 4L 3C ENQ: xcb:00003 <Tbl 0x5ff68,0x0> 0+IRC=>G R activity 0 IRC cnt=1 16:16:42.336 13596 LOCK 4L 3C DEQ: xcb:00003 <Tbl 0x5ff68,0x0> All:N, m ode=IRC, cnt=1 16:16:42.346 13597 LOCK 4L 3C DEQ: xcb:00003 <Cmd 0x155a718,0x0> All:N, mode=S, cnt=1 16:16:42.346 13598 LOCK 4L 3C ENQ: xcb:00003 <Cmd 0x1565964,0x0> 0+S=>G R activity 0 S cnt=1 16:16:42.346 13599 LOCK 4L 3C ENQ: xcb:00003 <Tbl 0x5ff68,0x0> 0+IRC=>G R activity 0 IRC cnt=1 16:16:42.346 13600 LOCK 4L 3C DEQ: xcb:00003 <Tbl 0x5ff68,0x0> All:N, m ode=IRC, cnt=1 16:16:42.346 13601 LOCK 4L 3C DEQ: xcb:00003 <Cmd 0x1565964,0x0> All:N, mode=S, cnt=1 16:16:42.346 13602 LOCK 4L 3C ENQ: xcb:00003 <Cmd 0x156a92c,0x0> 0+S=>G R activity 0 S cnt=1 16:16:42.346 13603 LOCK 4L 3C ENQ: xcb:00003 <Tbl 0x5ff68,0x0> 0+IRC=>G R activity 0 IRC cnt=1 16:16:42.346 13604 LOCK 4L 3C DEQ: xcb:00003 <Tbl 0x5ff68,0x0> All:N, m ode=IRC, cnt=1 16:16:42.346 13605 LOCK 4L 3C DEQ: xcb:00003 <Cmd 0x156a92c,0x0> All:N, mode=S, cnt=1 16:16:42.346 13606 LOCK 4L 3C DEQ: xcb:00003 <DB 0x1312d00,0x0> All:Y, mode=IX, cnt=1 16:16:42.346 13607 LOCK 4L 3C ENQ: xcb:00003 <DB 0x1312d00,0x0> 0+IX=> GR activity 0 IX cnt=1 16:16:42.346 13608 LOCK 4L 3C DEQ: xcb:00003 <DB 0x1312d00,0x0> All:Y, mode=IX, cnt=1 16 records dumpedトレースが終了したら、LOCKトレースをデフォルトの設定(0)に戻し、ttTraceMonを終了します。
Trace > level lock 1 Trace > {press ENTER - blank line}
ERRコンポーネントのトレースが役立つ場合もあります。たとえば、レベル4のERRトレースでは、TimesTenダイレクト・ドライバにプッシュされるすべてのエラー・メッセージが表示されます(内部的に処理されるため、すべてのエラーがユーザーに出力されるわけではありません)。デフォルトは、レベル1のERRトレースです。レベル2および3のERRトレースでは、出力は作成されません。
この例では、demoデータ・ストアに対してERRトレースをレベル4で実行するためにttTraceMonを実行します。前述の例とは異なり、この例ではトレースをファイルに出力するのではなく、トレース・バッファからその内容を直接参照します。ERRトレースをバッファに保存する前に、flushコマンドを使用してバッファを空にします。
% ttTraceMon demo Trace monitor; empty line to exit Trace> level err 4 Trace> flushここでアプリケーションを実行します。トレース情報はトレース・バッファに出力されます。トレース・バッファの内容は、dumpコマンドを使用すると画面に表示されます。
Trace> dump 10:02:30.146 5553 ERR 4L 3C TT3204: Sequence PRODUCTID is not found - - file "saCanon.c", lineno 4373, procedure "ppDrSequence" 10:02:30.146 5554 ERR 4L 3C TT3204: Sequence ORDERID is not found -- file "saCanon.c", lineno 4373, procedure "ppDrSequence" 10:02:30.146 5555 ERR 4L 3C TT3204: Sequence CUSTID is not found -- f ile "saCanon.c", lineno 4373, procedure "ppDrSequence" 10:02:30.146 5556 ERR 4L 3C TT3120: View ORDER_SUMMARY does not exist -- file "eeDDL.c", lineno 3150, procedure "sbEeDrViewEval" 10:02:30.146 5557 ERR 4L 3C TT3204: Sequence ORDERID is not found -- file "saCanon.c", lineno 4373, procedure "ppDrSequence" 10:02:30.156 5558 ERR 4L 3C TT3204: Sequence PRODUCTID is not found - - file "saCanon.c", lineno 4373, procedure "ppDrSequence" 10:02:30.156 5559 ERR 4L 3C TT3204: Sequence CUSTID is not found -- f ile "saCanon.c", lineno 4373, procedure "ppDrSequence" 7 records dumpedERRトレースをデフォルトの設定(1)に戻し、ttTraceMonを終了します。
Trace > level err 1 Trace > {press ENTER - blank line}