ttTraceMonユーティリティを使用すると、多数のTimesTenコンポーネントについて様々なトレース情報を記録できます。各TimesTenコンポーネントは、様々な詳細レベルでトレースできます。ttTraceMonをshow
サブコマンド付きで指定すると、トレース可能なすべてのTimesTenコンポーネントとそれらの現在のトレース・レベルを表示できます。ttTraceMonのオプションの完全なリストについては、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』を参照してください。
トレースの出力をファイルに行うと、TimesTenのトレース処理は、アプリケーションのパフォーマンスに大きく影響し、大量のディスク領域を消費します。ttTraceMonユーティリティは、問題を診断するときにのみ使用してください。診断が終了したら、トレースをデフォルト値にリセットしてください。
この例は、demoデータ・ストアに対するほとんどのトレース・コンポーネントがレベル0(OFF)に設定されていることを示しています。ERRトレースのデフォルトはレベル1です。詳細は、「ERRトレース」を参照してください。
% ttTraceMon -e show demo
LATCH ... 0
LOCK ... 0
LOG ... 0
LOGF ... 0
TRACE ... 0
API ... 0
HEAP ... 0
SM ... 0
XACT ... 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
AGING ... 0
ほとんどのTimesTenコンポーネントの出力は、テクニカル・サポートでのみ使用されます。ただし、SQL、API、LOCK、ERRおよびAGINGコンポーネントの出力は、アプリケーションの問題のトラブルシューティングで役立つ場合があります。
この項の以降の内容は次のとおりです。
新しいトレースは、ttTraceMondatastoreを指定して開始します。たとえば、demoデータ・ストアに対してトレースを開始するには、次のように入力します。
% ttTraceMon demo
Trace monitor; empty line to exit
Trace >
Traceプロンプトで、トレース・タイプとそのレベルを指定します。たとえば、レベル3でSQLコンポーネントのトレースを開始するには、次のように入力します。
Trace > level sql 3
この時点で、アプリケーションを実行でき、TimesTenのトレース情報がトレース・バッファに書き込まれます。トレース・バッファの内容を読み取るには、次の2つの方法があります。
outfile
コマンドを使用して、トレース・バッファのデータを出力するファイルを指定します(アプリケーションの実行前に行う必要があります)。トレース情報がファイルに書き込まれるとき、新しいトレース情報はファイルの既存の内容に連結されます。dump
コマンドを使用してトレース・バッファ・データを画面に表示します。注意: | トレース・バッファには、新しいトレースごとに内容が累積されます。トレース・バッファを消去するには、ttTraceMonプロンプトでflush コマンドを使用します。flush コマンドを使用してコンポーネントを指定すると、特定のコンポーネントのバッファされたトレース・レコードが消去されます。 |
トレース・バッファから出力される各レコードの書式は次のとおりです。
timestamp sequence component level connection processid operation
レコードのフィールドは次のように定義されています。
注意: | いくつかのコンポーネントのトレース・レベルは、連続した範囲の数値ではありません。コンポーネントでサポートされているレベルに対応しない数値を入力した場合、入力した数値より小さく、最も高いサポート・レベルでトレースが発生します。たとえば、コンポーネントのトレース・レベルが1、2、3、4、6で、5を入力すると、レベル1、2、3、4のトレース・イベントが生成されます。 |
たとえば、レベル3のSQLトレース後のトレース・バッファの行は、次のようになります。
10:39:50.231 5281 SQL 2L 1C 3914P Preparing: select cust_num from customer
ttTraceMonをSQLコンポーネントで使用すると、TimesTenエンジンによって準備または実行されているSQLに関する情報が提供されます。表1.1に、SQLトレースのレベルを示します。
注意: | SQLのトレースは、レベル3または4で実行することをお薦めします。SQLトレースでは、オプティマイザに関する情報は表示されません。オプティマイザのトレースは、レベル4で別のコンポーネント(OPT)によって管理され、ユーザーが使用するようには設計されていません。 |
この例では、demoデータ・ストアに対してSQLトレースをレベル4で実行するためにttTraceMonを実行します。SQLトレースの出力は、SQLtrace.txtファイルに書き込みます。その後、トレースで過去のSQL文がレポートされないようにバッファをフラッシュします。
% ttTraceMon demo
Trace monitor; empty line to exit
Trace > outfile SQLtrace.txt
Trace > level sql 4
Trace> flush
この時点で、次のSQL文を含むアプリケーションを実行します。
SELECT * FROM departments WHERE department_id = 10;
トレース情報がSQLtrace.txt ファイルに書き込まれます。
12:19:36.582 269 SQL 2L 3C 29570P Preparing: select * from departments where department_id = 10
12:19:36.583 270 SQL 4L 3C 29570P sbSqlCmdCompile ()(E): (Found already compiled version: refCount:01, bucket:28) cmdType:100, cmdNum:1000146.
12:19:36.583 271 SQL 4L 3C 29570P Opening: select * from departments where department_id = 10;
12:19:36.583 272 SQL 4L 3C 29570P Fetching: select * from departments where department_id = 10;
12:19:36.583 273 SQL 4L 3C 29570P Closing: select * from departments where department_id = 10;
5 records dumped
アプリケーションが完了したら、SQLトレースをオフにし、ttTraceMonを終了します。
Trace > level sql 0
Trace > {press ENTER - blank line}
APIトレースは、データ・ストアへの接続、接続属性の変更、トランザクションのコミットなどのデータベース操作のために生成されます。表1.2に、APIトレースのレベルを示します。
注意: | レベル3でのトレースをお薦めします。 |
この例では、demoデータ・ストアに対してAPIトレースをレベル3で実行するためにttTraceMonを実行します。APIトレースの出力は、APItrace.txt ファイルに書き込まれます。APIトレースをバッファに保存する前に、flush
コマンドを使用してバッファを空にします。
% ttTraceMon demo
Trace monitor; empty line to exit
Trace> outfile APItrace.txt
Trace> level api 3
Trace> flush
ここでアプリケーションを実行します。アプリケーションが完了したら、APIトレースを無効にし、ttTraceMonを終了します。
Trace > level api 0
Trace > {press ENTER - blank line}
APItrace.txtの内容は、次の出力例に似ています。出力は、データ・ストアへの接続、接続キャラクタ・セットの設定、分離レベルの設定およびトランザクションのコミットを示しています。
11:54:26.796 1016 API 3L 2C 4848P sb_dbConnect()(X)
11:54:26.796 1017 API 3L 2C 4848P sb_dbConnCharsetSet()(E)
11:54:26.796 1018 API 3L 2C 4848P sb_dbConnSetIsoLevel()(E)
11:54:39.795 1019 API 3L 2C 4848P sb_dbConnSetIsoLevel()(E)
11:54:45.253 1020 API 3L 2C 4848P sb_xactCommitQ()(E)
LOCKコンポーネントを使用すると、アプリケーションのロック動作をトレースして、デッドロックまたはロックの待機による問題を検出できます。LOCKトレースは大量の情報を生成するので、適切なトレース・レベルを選択することが重要です。たとえば、レベル3では、ごく一般的なイベントについてもトレースが作成されるため、大量のトレースが発生します。さらに、トレース自体が読みにくくなることもあります。必要な情報が見つからない場合は、テクニカル・サポートに連絡してください。
表1.3に、LOCKトレース・レベルを示します。
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}
ERRコンポーネントのトレースが役立つ場合もあります。たとえば、レベル4のERRトレースでは、TimesTenダイレクト・ドライバにプッシュされるすべてのエラー・メッセージが表示されます(内部的に処理されるため、すべてのエラーがユーザーに出力されるわけではありません)。デフォルトは、レベル1のERRトレースです。レベル2および3のERRトレースでは、出力は作成されません。
この例では、myDSNデータ・ストアに対してERRトレースをレベル4で実行するためにttTraceMonを実行します。
最初に、表を作成します。
Command> create table test (id tt_integer);
次に、レベル4でトレースを有効にします。前述の例とは異なり、この例ではトレースをファイルに出力するのではなく、トレース・バッファからその内容を直接参照します。ERRトレースをバッファに保存する前に、flush
コマンドを使用してバッファを空にします。
% ttTraceMon myDSN
Trace monitor; empty line to exit
Trace> level err 4
Trace> flush
3つのエラーがあるSQLスクリプトを実行します。エラーは次のとおりです。
Command> create table test (id tt_integer);
2207: Table TEST already exists
The command failed.
Command> insert into test values 'abcd');
1001: Syntax error in SQL statement before or at: "'abcd'", character position:
25
insert into test values 'abcd');
^^^^^^
The command failed.
Command> insert into test values ('abcd');
2609: Incompatible types found in expression
The command failed.
トレース情報はトレース・バッファに書き込まれます。表示するには、dump
コマンドを使用します。
Trace> dump
19:28:40.465 174227 ERR 4L 1C 24263P TT2207: Table TEST already exists
-- file "eeDDL.c", lineno 2930, procedure "sbEeCrDtblEval()"
19:28:51.399 174228 ERR 4L 1C 24263P TT1001: Syntax error in SQL statement before or at: "'abcd'", character position: 25
insert into test values 'abcd');
^^^^^^
-- file "ptSqlY.y", lineno 6273, procedure "reserved_word_or_syntax_error"
19:29:00.725 174229 ERR 4L 1C 24263P TT2609: Incompatible types found
in expression -- file "saCanon.c", lineno 12618, procedure "sbPtAdjustType()"
3 records dumped
ERRトレースをデフォルトの設定(1)に戻し、ttTraceMonを終了します。
Trace > level err 1
Trace > {press ENTER - blank line}
ttTraceMonユーティリティを使用して次の情報を取得します。
詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。
表1.4に、AGINGトレース・レベルを示します。
レベル | 説明 |
1 | 次のイベントに関するメッセージを表示します。 |
2 |
+各表に対する次のイベントに関するメッセージを表示します。 |
3 | +各エージング・サイクルで何行が削除されたかを示す詳細レポート。 |
4 | +サブデーモンのウェイクアップごとのメッセージ。 |
この例では、myDSNデータ・ストアに対してAGINGトレースを実行するためにttTraceMonを実行します。データ・ストアには、TTUSER.MYTAB表が含まれます。TTUSER.MYTAB表には、時間ベースのエージング・ポリシーを設定されています。表の詳細は次のとおりです。
Command> describe TTUSER.MYTAB;
Table TTUSER.MYTAB:
Columns:
*ID TT_INTEGER NOT NULL
TS TIMESTAMP (6) NOT NULL
Aging use TS lifetime 3 minutes cycle 1 minute on
1 table found.
(primary key columns are indicated with *)
エージング・サイクルが開始される前、表には次の行が含まれています。
Command> select * from TTUSER.MYTAB;
< 1, 2007-03-21 12:54:06.000000 >
< 3, 2010-03-17 08:00:00.000000 >
< 4, 2007-03-21 12:59:40.000000 >
< 5, 2007-03-21 13:00:10.000000 >
< 6, 2007-03-21 13:01:22.000000 >
5 rows found.
AGINGトレースをレベル3で実行するためにttTraceMonを実行します。トレースをファイルに出力するのではなく、トレース・バッファからその内容を直接参照します。AGINGトレースをバッファに保存する前に、flush
コマンドを使用してバッファを空にします。
% ttTraceMon myDSN
Trace monitor; empty line to exit
Trace> level aging 3
Trace> flush
dump
コマンドを使用してバッファ内のトレース情報を表示します。
Trace> dump
13:16:56.802 1247 AGING 1L 2045C 17373P Entering sbAgingTB(): curTime=78
13:16:56.803 1248 AGING 2L 2045C 17373P Entering sbAgingOneTable(): curTime=78, ltblid= 637140
13:16:56.804 1249 AGING 3L 2045C 17373P curTime=78, 4 deleted, 1 remaining, tbl = TTUSER.MYTAB
13:16:56.804 1250 AGING 2L 2045C 17373P Exiting sbAgingOneTable(): curTime=78, reason = 'no more rows', 4 deleted, 1 remaining, tbl = TTUSER.MYTAB
13:16:56.804 1251 AGING 1L 2045C 17373P Exiting sbAgingTB(): curTime=78
5 records dumped