ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド
リリース7.0
E05173-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

ttTraceMonユーティリティの使用

ttTraceMonユーティリティを使用すると、多数のTimesTenコンポーネントについて様々なトレース情報を記録できます。各TimesTenコンポーネントは、様々な詳細レベルでトレースできます。ttTraceMonをshowサブコマンド付きで指定すると、トレース可能なすべてのTimesTenコンポーネントとそれらの現在のトレース・レベルを表示できます。ttTraceMonのオプションの完全なリストについては、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』を参照してください。

トレースの出力をファイルに行うと、TimesTenのトレース処理は、アプリケーションのパフォーマンスに大きく影響し、大量のディスク領域を消費します。ttTraceMonユーティリティは、問題を診断するときにのみ使用してください。診断が終了したら、トレースをデフォルト値にリセットしてください。

例1.8

この例は、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つの方法があります。

トレース・バッファから出力される各レコードの書式は次のとおりです。

timestamp    sequence    component    level    connection    processid    operation

レコードのフィールドは次のように定義されています。

たとえば、レベル3のSQLトレース後のトレース・バッファの行は、次のようになります。

10:39:50.231 5281 SQL 2L 1C 3914P Preparing: select cust_num from customer

SQLトレース

ttTraceMonをSQLコンポーネントで使用すると、TimesTenエンジンによって準備または実行されているSQLに関する情報が提供されます。表1.1に、SQLトレースのレベルを示します。

表1.1 SQLトレース・レベル
SQLトレース・レベル
出力
2
準備されているSQLコマンド。
3
+ 実行されているSQLコマンド。
4
+ コマンドをプールする効果(準備されたコマンドはすでにプールに存在するため、準備は行われない)、再準備の必要性(索引が作成されたためなど)、および破棄されるコマンド。
このレベルでは、ttTraceMonによって問合せコマンドのオープン、フェッチおよびクローズのタイミングも示されます。
5
+ コマンド番号などの内部データ(通常、ユーザー・レベルでのデバッグには役立ちません)。

注意: SQLのトレースは、レベル3または4で実行することをお薦めします。SQLトレースでは、オプティマイザに関する情報は表示されません。オプティマイザのトレースは、レベル4で別のコンポーネント(OPT)によって管理され、ユーザーが使用するようには設計されていません。

例1.9

この例では、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トレース

APIトレースは、データ・ストアへの接続、接続属性の変更、トランザクションのコミットなどのデータベース操作のために生成されます。表1.2に、APIトレースのレベルを示します。

表1.2 APIトレース・レベル
APIトレース・レベル
出力
1
サブデーモンが実行したロールバックのすべての試行。アプリケーションが異常終了し、サブデーモンがその接続をリカバリする場合に実行されます。
2
+ ある程度の領域不足の状態。
3
+ データ・ストアに対する作成、接続、切断、チェックポイント、バックアップおよび圧縮の各操作と、各接続のコミットおよびロールバック、その他のいくつかの操作。
4
+ TimesTenの内部APIレベルで処理されるその他のほとんどの操作。ストレージ・マネージャおよび索引に対して実行され、APIの内部で実行される多数の操作は表示されません。

注意: レベル3でのトレースをお薦めします。

例1.10

この例では、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コンポーネントを使用すると、アプリケーションのロック動作をトレースして、デッドロックまたはロックの待機による問題を検出できます。LOCKトレースは大量の情報を生成するので、適切なトレース・レベルを選択することが重要です。たとえば、レベル3では、ごく一般的なイベントについてもトレースが作成されるため、大量のトレースが発生します。さらに、トレース自体が読みにくくなることもあります。必要な情報が見つからない場合は、テクニカル・サポートに連絡してください。

表1.3に、LOCKトレース・レベルを示します。

表1.3 LOCKトレース・レベル
LOCKトレース・レベル
出力
1
検出されたデッドロック・サイクル。
2
+ なんらかの理由によるロック付与の失敗。
3
+ ロックの待機(付与の有無に依存しない)。
4
+ すべてのロックの付与/解除、ルーチンのコール、デッドロック検出のメカニズム。
6

+ サイクルにおける各ステップ。

例1.11

この例では、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トレース

ERRコンポーネントのトレースが役立つ場合もあります。たとえば、レベル4のERRトレースでは、TimesTenダイレクト・ドライバにプッシュされるすべてのエラー・メッセージが表示されます(内部的に処理されるため、すべてのエラーがユーザーに出力されるわけではありません)。デフォルトは、レベル1のERRトレースです。レベル2および3のERRトレースでは、出力は作成されません。

ERRトレース・レベル
出力
1(デフォルトの設定)
致命的エラー。
4
+ 他のすべてのエラー・メッセージ。ほとんどがTimesTenで内部的に処理されます。

例1.12

この例では、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スクリプトを実行します。エラーは次のとおりです。

トレース情報はトレース・バッファに書き込まれます。表示するには、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}

AGINGトレース

ttTraceMonユーティリティを使用して次の情報を取得します。

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

表1.4に、AGINGトレース・レベルを示します。

表1.4 AGINGトレース・レベル
レベル
説明

1

次のイベントに関するメッセージを表示します。
  • エージング・サブデーモンによる、最低使用頻度(LRU)エージングまたは時間ベース・エージングの開始。
  • LRUしきい値に満たなかったための、エージング・サブデーモンによるLRUエージングの繰返し。
  • エージング・サブデーモンによる、LRUエージングまたは時間ベース・エージングの終了。

2

+各表に対する次のイベントに関するメッセージを表示します。

  • エージングが開始されたかどうか。
  • エージングが終了したかどうか。メッセージには、終了した理由と削除された行の数が含まれます。

3

+各エージング・サイクルで何行が削除されたかを示す詳細レポート。

4

+サブデーモンのウェイクアップごとのメッセージ。
例1.13

この例では、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