主コンテンツへ
Oracle® TimesTen In-Memory Databaseトラブルシューティング・ガイド
リリース18.1
E98632-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 TimesTenのトラブルシューティング・ツール

この章の次の項では、TimesTenデータベースの問題を診断するためのTimesTenユーティリティおよびその他のツールの使用方法について説明します。

ttCaptureユーティリティの使用

ttCaptureユーティリティは、TimesTenの構成および状態に関する情報を取得します。ttCaptureユーティリティは、ttcapture.date.time.logというファイルを生成します。デフォルトでは、ファイルは、ttCaptureユーティリティの呼出し元であるディレクトリに書き込まれます。ttCapture -destオプションを使用すると、出力ファイルを別のディレクトリに書き込むように指示できます。

ttCaptureを再度実行すると、新しいファイルに情報が書き込まれます。

TimesTenデータベースで問題が発生した場合は、問題が発生しているときまたは発生直後、早急にそのデータベースに対して、DSNオプションを指定してttCaptureを実行します。


ノート:

ディレクトリ名およびファイル名に空白が含まれる場合は、必ず二重引用符で囲んでください。

TimesTenカスタマ・サポートにお問合せいただく場合は、ttcapture.date.number.logファイルをサービス・リクエストにアップロードしてください。

他のオプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttCaptureに関する項を参照してください。

ttIsqlユーティリティの使用

ttIsqlユーティリティを使用すると、対話形式でSQL文を実行して、TimesTenデータベースに関するステータス情報をレポートできます。

TimesTenのすべてのSQL操作は、ttIsqlCommand>プロンプトから実行できます。

例1-1 ttIsqlユーティリティの使用

database1データベースに対してttIsqlユーティリティを起動するには、次のように入力します。

% ttIsql database1

次のような出力が表示されます。

Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.

connect "DSN=database1";
Connection successful:
DSN=database1;UID=testuser;DataStore=/scratch/testuser/database1;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;PermSize=128;
(Default setting AutoCommit=1)

SQL文またはttIsqlコマンドをCommandプロンプトから実行できます。TimesTen組込みプロシージャをコールすることもできます。ここで役立つプロシージャは、ttConfigurationです。ttConfigurationをコールすると、TimesTenの現在のデータベース接続の接続属性の値が表示されます。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttConfigurationに関する項を参照してください。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のttIsqlユーティリティの使用に関する説明では、最も一般的なttIsqlコマンドの使用方法を説明しています。問題の解決によく使用されるttIsqlコマンドは、次のとおりです。

  • dssizeは、データベースのサイズ情報を出力します。

    『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のデータベース構造情報の表示に関する説明を参照してください。

  • showplanは、このトランザクションでの選択、更新および削除のオプティマイザの実行計画を出力します。

    『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の問合せオプティマイザ計画の確認と変更に関する説明を参照してください。

  • timingは、問合せのタイミングを出力します。

    『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のtiming ODBC関数コールに関する説明を参照してください。

  • optprofileは、現在のオプティマイザ・フラグの設定と結合順序を出力します。

    『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の問合せオプティマイザ計画の確認と変更に関する説明を参照してください。

ttIsql機能の完全なリストは、Oracle TimesTen In-Memory DatabaseリファレンスのttIsqlを参照してください。

ttStatusユーティリティの使用

ttStatusユーティリティを使用すると、TimesTenデーモンのステータスと、すべてのTimesTen接続の状態を確認できます。

例1-2 ttStatusによってTimesTenデーモンが稼働していないことが示される

この例のttStatus出力は、TimesTenデーモンが稼働していないことを示しています。デーモンが突然停止したときのトラブルシューティングについては、「TimesTenのデーモン、サブデーモンからレスポンスがない」を参照してください。

LinuxおよびUNIXシステムの場合:

% ttStatus
ttStatus: Could not connect to the TimesTen daemon.
If the TimesTen daemon is not running, please start it
by running "ttDaemonAdmin -start".

例1-3 ttStatusによってTimesTenデーモンが稼働していることが示される

この例のttStatusの出力は、TimesTenデーモンが稼働していることを示しています。database1という1つのデータベースがあります。

最初の行は、TimesTenインスタンスのinstance1に対して、TimesTenデーモンがプロセス26251としてポート6624で稼働していることを示しています。2行目は、TimesTen Serverがプロセス26258としてポート6625で稼働していることを示しています。

現在、データベースには、1ユーザー接続と13サブデーモン接続の合計14の接続があります。

データベースのキャッシュ・エージェントおよびレプリケーション・エージェントの再起動ポリシーはmanualに設定されています。

% ttStatus
TimesTen status report as of Tue Mar 19 10:16:07 2019
 
Daemon pid 26251 port 6624 instance instance1
TimesTen server pid 26258 started on port 6625
------------------------------------------------------------------------
------------------------------------------------------------------------
Data store /scratch/testuser/database1
Daemon pid 26251 port 6624 instance instance1
TimesTen server pid 26258 started on port 6625
There are 14 connections to the data store
Shared Memory KEY 0x021001b9 ID 10813443
PL/SQL Memory KEY 0x031001b9 ID 10846212 Address 0x5000000000
Type            PID     Context             Connection Name              ConnID
Process         26291   0x00007f5975c07010  database1                         1
Subdaemon       26256   0x00007fe2000008c0  Deadlock Detector              2043
Subdaemon       26256   0x00007fe2040008c0  Checkpoint                     2041
Subdaemon       26256   0x00007fe2080008c0  Monitor                        2045
Subdaemon       26256   0x00007fe2280008c0  Flusher                        2044
Subdaemon       26256   0x00007fe230eb1010  Garbage Collector              2037
Subdaemon       26256   0x00007fe2312ce010  XactId Rollback                2038
Subdaemon       26256   0x00007fe2317ec010  IndexGC                        2035
Subdaemon       26256   0x00007fe231d0a010  HistGC                         2039
Subdaemon       26256   0x00007fe232228010  AsyncMV                        2040
Subdaemon       26256   0x00007fe232746010  Log Marker                     2036
Subdaemon       26256   0x00007fe232c64010  Aging                          2042
Subdaemon       26256   0x00007fe238170010  Rollback                       2046
Subdaemon       26256   0x00007fe23858d010  Manager                        2047
Replication policy  : Manual
Cache Agent policy  : Manual
PL/SQL enabled.
------------------------------------------------------------------------
Accessible by group g900
End of report

例1-4 ttStatusによって古いインスタンスへの接続が示される

この例では、データベースの古いインスタンスへの接続を示します。これは、データベースを無効化する際に、一部のユーザーがメモリー内にまだ格納されている無効化の対象となるデータベースのコピーを切断していない場合に発生します。すべてのユーザーが切断した後に、メモリーは自動的に解放されます。

% ttStatus

TimesTen status report as of Mon Aug  6 22:03:04 2012
Daemon pid 5088 port 17000 instance instance1
TimesTen server pid 4344 started on port 17002
-----------------------------------------------------------------
Data store c:\temp\sample
There are no connections to the data store
Obsolete or not yet active connection(s):
Process  4696 context 0xd08800 name sample connid 1, obsolete connection, shmKey
'Global\DBI45b94c6f.3.SHM.4'
Replication policy : Manual
Cache agent policy : Manual
-----------------------------------------------------------------
End of report

TimesTenデーモンによって生成されるログの使用

TimesTenデーモンおよびそのサブデーモンとエージェントは、エラー、警告および情報メッセージを生成します。これらのメッセージは、TimesTenのシステム管理およびアプリケーションのデバッグに役立ちます。

デフォルトでは、情報メッセージは次の場所に格納されます。

  • 実行が必要になる可能性があるアクションなど、注意する必要がある情報を含むユーザー・エラー・ログ

  • ユーザー・エラー・ログ内のすべての情報に加えて、TimesTenカスタマ・サポートが使用する情報を含まれるサポート・ログ。

場所やサイズなど、ログの構成に関する情報については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のエラー、警告および情報のメッセージに関する説明を参照してください。

すべてのメッセージ・カテゴリは、デフォルトで有効化されますが、ttDaemonLogユーティリティのオプションを使用すると、すべてのデータベースまたは指定したデータベースに対して、次のカテゴリのユーザー・エラー・ログ・メッセージを無効化または明示的に有効化することができます。

  • ALL (デフォルト): すべてのメッセージが対象です

  • CACHE: CACで指定する、キャッシュ・エージェントからのメッセージが対象です。

  • DAEMON: メイン・デーモンおよびサブデーモンからのメッセージが対象です。

  • DAEMONDBG: メイン・デーモンおよびサブデーモンからの追加情報が対象です。

  • REPLICATION: REPで指定する、レプリケーション・エージェントからのメッセージが対象です。

  • SERVER: TimesTen Serverからのメッセージが対象です。

ttDaemonLogオプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttDaemonLogに関する項を参照してください。

ttTraceMonユーティリティの使用

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

トレースの出力をファイルに行うと、TimesTenのトレース処理は、アプリケーションのパフォーマンスに大きく影響し、大量のファイル・システム領域を消費します。また、AWTキャッシュ・グループを使用している場合は、ttTraceMonORACONコンポーネントのトレースを試行するときに、レプリケーション・エージェントを再起動する必要があります。ttTraceMonユーティリティは、問題を診断するときにのみ使用してください。診断が終了したら、トレースをデフォルト値にリセットしてください。

例1-5 コンポーネントのデフォルトのトレース・レベル

この例は、database1データベースに対するほとんどのトレース・コンポーネントがレベル0 (OFF)に設定されていることを示しています。ERRおよびDEADLOCKコンポーネントのトレースは、どちらもデフォルトでは1に設定されています。詳細は、「ERRトレース」を参照してください。

% ttTraceMon -e show database1
AGING        ... 0
API          ... 0
ASYNCMV      ... 0
AUTOREFRESH  ... 0
BULKLOAD     ... 0
BLK          ... 0
CG           ... 0
CKPT         ... 0
DBG0         ... 0
DBG1         ... 0
DEADLOCK     ... 1
DIST         ... 0
EE           ... 0
ERR          ... 1
EXTTBLLOAD   ... 0
FLOW         ... 0
GRID         ... 0
GRIDAS       ... 0
HEAP         ... 0
INTERRUPT    ... 0
IX           ... 0
IXGC         ... 0
IXHEAP       ... 0
LATCH        ... 0
LBCU         ... 0
LOB          ... 0
LOCK         ... 0
LOG          ... 0
LOGF         ... 0
MEM          ... 0
ODBC         ... 0
OPT          ... 0
ORACON       ... 0
PLOAD        ... 0
PREP         ... 0
PT           ... 0
REPL         ... 0
SM           ... 0
SQL          ... 0
TEST         ... 0
TRACE        ... 1
XA           ... 0
XACT         ... 0
XLA          ... 0

ほとんどのTimesTenコンポーネントの出力は、TimesTenカスタマ・サポートでのみ使用されます。ただし、SQLAPILOCKERRAGINGおよびAUTOREFRESHコンポーネントの出力は、アプリケーションの問題のトラブルシューティングで役立つ場合があります。

この項の以降の内容は次のとおりです。

トレースの開始とトレース・バッファの参照

新しいトレースは、ttTraceMon datastoreを指定して開始します。たとえば、database1データベースでトレースを開始するには、次のように入力します。

%  ttTraceMon database1
Trace monitor; empty line to exit
Trace >

Traceプロンプトで、トレース・タイプとそのレベルを指定します。たとえば、レベル3でSQLコンポーネントのトレースを開始するには、次のように入力します。

Trace > level sql 3

この時点で、アプリケーションを実行でき、TimesTenのトレース情報がトレース・バッファに書き込まれます。トレース・バッファの内容を読み取るには、次の2つの方法があります。

  • Traceプロンプトで、outfileコマンドを使用して、トレース・バッファのデータを出力するファイルを指定します(アプリケーションの実行前に行う必要があります)。これは、アプリケーションを実行する前に行う必要があります。トレース情報がファイルに書き込まれるとき、新しいトレース情報はファイルの既存の内容に連結されます。

  • Traceプロンプトで、dumpコマンドを使用してトレース・バッファ・データを画面に表示します。


ノート:

トレース・バッファには、新しいトレースごとに内容が累積されます。トレース・バッファを消去するには、ttTraceMonプロンプトでflushコマンドを使用します。flushコマンドを使用してコンポーネントを指定すると、特定のコンポーネントのバッファされたトレース・レコードが消去されます。

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

timestamp   sequence   component   level   connection   processid
   operation

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

  • timestampは、操作が実行された時刻です。

  • sequenceは、トレース行を識別する連番です。

  • componentは、トレース対象のTimesTenコンポーネント(SQLAPILOCKERRなど)です。

  • levelは、そのトレース行に関連付けられたトレース・レベルです。トレース・レベルの範囲はコンポーネントによって異なりますが、すべてのコンポーネントで、最も低いトレース・レベルは冗長度が最低の出力を生成し、最も高いトレース・レベルは冗長度が最高の出力を生成します。たとえば、レベル4でSQLトレースを行うと、出力にはレベル2(prepare)、3(execute)および4(open、close、fetch)の行が含まれます。


ノート:

いくつかのコンポーネントのトレース・レベルは、連続した範囲の数値ではありません。コンポーネントでサポートされているレベルに対応しない数値を入力した場合、入力した数値より小さく、最も高いサポート・レベルでトレースが発生します。たとえば、コンポーネントのトレース・レベルが1、2、3、4、6で、5を入力すると、レベル1、2、3、4のトレース・イベントが生成されます。

  • connectionは、トレースを生成した接続を識別する内部接続IDです。この数値は、ttStatus出力で表示されるConnIDに対応しています。接続IDは、トランザクションIDの最初の要素としても使用されます。

  • processidは、トレースを生成したプロセスのオペレーティング・システム・プロセスIDです。

  • operationは、発生した操作(SQL文、API操作、エラー・メッセージなど)です。

たとえば、レベル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トレース・レベル

レベル 出力

2

準備されているSQLコマンド

3

+ 実行中のSQLコマンド。

4

+ コマンドをプールする効果(準備されたコマンドはすでにプールに存在するため、準備は行われない)、再準備の必要性(索引が作成されたためなど)、および破棄されるコマンド

このレベルでは、ttTraceMon によって問合せコマンドのオープン、フェッチおよびクローズのタイミングも示されます。

5

+ コマンド番号などの内部データ(通常、ユーザー・レベルでのデバッグには役立ちません)



ノート:

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

例1-6 SQLトレース

この例では、database1データベースに対してSQLトレースをレベル4で実行するためにttTraceMonを実行します。SQLトレースの出力は、SQLtrace.txtファイルに書き込みます。その後、トレースで過去のSQL文がレポートされないようにバッファをフラッシュします。

% ttTraceMon database1
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トレース・レベル

レベル 出力

1

サブデーモンが実行したロールバックのすべての試行

アプリケーションが異常終了し、サブデーモンがその接続をリカバリする場合に実行されます。

2

+ ある程度の領域不足の状態

3

+ データベースに対する作成、接続、切断、チェックポイント、バックアップおよび圧縮の各操作と、各接続のコミットおよびロールバック、その他のいくつかの操作

4

+ TimesTenの内部APIレベルで処理されるその他のほとんどの操作

ストレージ・マネージャおよび索引に対して実行され、内部で実行される多数の操作は表示されません。



ノート:

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

例1-7 APIトレース

この例では、database1データベースに対してAPIトレースをレベル3で実行するためにttTraceMonを実行します。APIトレースの出力は、APItrace.txtファイルに書き込まれます。APIトレースをバッファに保存する前に、flushコマンドを使用してバッファを空にします。

% ttTraceMon database1
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)

DEADLOCKトレース

DEADLOCKコンポーネントを使用して、すべてのアプリケーションにおけるデッドロックの発生状況をトレースします。

表1-3に、DEADLOCKトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。

表1-3 DEADLOCKトレース・レベル

レベル 出力

1

検出されたデッドロック・サイクル

4, 6

+ デッドロックの検出方法に関する詳細な情報の説明


例1-8 DEADLOCKトレース

この例では、myDSNデータベースに対して、DEADLOCKトレースをデフォルトのレベル1で実行するために、ttTraceMonを実行します。

myDSNへの2つの接続を作成します。最初の接続では、自動コミットは有効になっています。表testを作成して2行挿入します。次に、自動コミットを無効にして、表testx1=1行を更新します。自動コミットが無効なため、コミットされるまで表に行は挿入されません。トランザクションがコミットされる、またはロールバックされるまで、ロックは保持されます。

Command> create table test (x1 int unique, y1 int);
Command> insert into test values (1,1);
1 row inserted.
Command> insert into test values (2,2);
1 row inserted.
Command> autocommit 0;
Command> update test set y1=y1 where x1=1;
1 row updated.

myDSNへの2つ目の接続では、自動コミットを無効にします。表testx1=2行を更新します。

Command> autocommit 0;
Command> update test set y1=y1 where x1=2;1 row updated.

これから、お互いにロックされている行の各接続の更新文を実行してデッドロック状況を作成します。1つ目の接続は、x1=2の行に対して更新を実行します。

Command> update test set y1=y1 where x1=2;
 6003: Lock request denied because of time-out
Details: Tran 2.1 (pid 32750) wants Un lock on rowid BMUFVUAAAAaAAAAETk, 
table ME.TEST. But tran 3.2 (pid 32731) has it in Xn (request was Xn).
Holder SQL (update t1 set y1=y1 where x1=2)
The command failed.

2つ目の接続は、x1=1の行に対して更新を実行します。

Command> update test set y1=y1 where x1=1;
 6002: Lock request denied because of deadlock
Details: Tran 3.2 (pid 32731) wants Un lock on rowid BMUFVUAAAAaAAAADzk, 
table ME.TEST. But tran 2.1 (pid 32750) has it in Xn (request was Xn). 
Holder SQL (update t1 set y1=y1 where x1=1)
The command failed.

flushコマンドを使用してバッファを空にします。

% ttTraceMon myDSN
Trace monitor; empty line to exit
Trace> flush

トレース・バッファには、「1L」からわかるように、すべてのレベル1デッドロック・トレースを表示する次の情報が含まれています。

Trace> dump
09:50:26.444      13 DEADLOCK 1L 2036C   3484P edge 1: xid 3.2, cid 3, 
<Row BMUFVUAAAAaAAAADzk,0x8c5
74(574836)> 0 cnt=1 , Tbl 'T1', SQL='update t1 set y1=y1 where x1=1'
09:50:26.455      14 DEADLOCK 1L 2036C   3484P edge 0: xid 2.1, cid 2, 
<Row BMUFVUAAAAaAAAAETk,0x8c5
74(574836)> 0 cnt=1 , Tbl 'T1', SQL='update t1 set y1=y1 where x1=2'
09:50:26.455      15 DEADLOCK 1L 2036C   3484P Victim: xcb:3.2, 
SQL='update t1 set y1=y1 where x1=1'

さらに詳しい情報を確認する場合は、DEADLOCKトレースに高い値を設定します。たとえば、次では、ttTraceMonDEADLOCKトレースをレベル4に設定しています。

Trace > level deadlock 4

LOCKトレース

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

表1-4に、LOCKトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。

表1-4 LOCKトレース・レベル

レベル 出力

1

検出されたデッドロック・サイクル

2

+ なんらかの理由によるロック付与の失敗

3

+ ロックの待機(付与の有無に依存しない)

4

+ すべてのロックの付与/解除、ルーチンのコール、デッドロック検出のメカニズム

6

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


例1-9 LOCKトレース

この例では、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トレースでは、出力は作成されません。

表1-5に、ERRトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。

表1-5 ERRトレース・レベル

レベル 出力

1(デフォルトの設定)

致命的エラー

4

+ 他のすべてのエラー・メッセージ。ほとんどがTimesTenで内部的に処理されます


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

  • 既存の表と同じ名前で表を作成する。

  • 誤った構文を使用して表に値を挿入する。

  • CHARデータをTT_INTEGER列に挿入する。

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}

AGINGトレース

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

  • エージングの開始と終了のタイミング

  • エージング・サブデーモンによって何行が削除されたか

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

表1-6に、AGINGトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。

表1-6 AGINGトレース・レベル

レベル 説明

1

次のイベントに関するメッセージ。

  • エージング・サブデーモンによる、最低使用頻度(LRU)エージングまたは時間ベース・エージングの開始。

  • LRUしきい値に満たなかったための、エージング・サブデーモンによるLRUエージングの繰返し。

  • エージング・サブデーモンによる、LRUエージングまたは時間ベース・エージングの終了。

2

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

  • エージングが開始されたかどうか。

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

3

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

4

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


例1-11 AGINGトレース

この例では、myDSNデータベースに対してAGINGトレースを実行するためにttTraceMonを実行します。データベースには、時間ベース・エージングのポリシーが含まれた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

AGINGトレースをデフォルトの設定(0)に戻し、ttTraceMonを終了します。

Trace > level aging 0
Trace > {press ENTER – blank line}

AUTOREFRESHトレース

ttTraceMonユーティリティを使用して、AUTOREFRESHキャッシュ・グループ属性を持つキャッシュ・グループの自動リフレッシュ操作の処理状況に関する情報を取得します。

『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のAUTOREFRESHキャッシュ・グループ属性に関する項を参照してください。

表1-7に、AUTOREFRESHトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。

表1-7 AUTOREFRESHトレース・レベル

レベル 説明

1

その時間隔の自動リフレッシュのサマリー:

  • 自動リフレッシュが開始された時間

  • その時間隔で自動リフレッシュされた行数

  • その時間隔で自動リフレッシュされたルート表の行数

  • キャッシュ・エージェントの起動後に自動リフレッシュされた行の総数

  • キャッシュ・エージェントの起動後に自動リフレッシュされたルート表の行の総数

  • 自動リフレッシュが終了した時間

ノート: 時間およびルート表の行に関する情報は、完全自動リフレッシュの場合にレポートされます。

2

+ キャッシュ・グループ・レベルでの自動リフレッシュのサマリー:

  • 各キャッシュ・グループで自動リフレッシュが開始された時間

  • 各キャッシュ・グループで自動リフレッシュされた行数

  • 各キャッシュ・グループで自動リフレッシュされたルート表の行数

  • キャッシュ・エージェントの起動後に各キャッシュ・グループで自動リフレッシュされた行の総数

  • キャッシュ・エージェントの起動後に各キャッシュ・グループで自動リフレッシュされたルート表の行の総数

  • 各キャッシュ・グループで自動リフレッシュが終了した時間

ノート: 時間およびルート表の行に関する情報は、完全自動リフレッシュの場合にレポートされます。

3

+ 表レベルでの自動リフレッシュのサマリー:

  • 自動リフレッシュが開始された時間

  • 自動リフレッシュされた行数

  • キャッシュ・エージェントの起動後に自動リフレッシュされた行の総数

  • 自動リフレッシュが終了した時間

4

+ 各表の自動リフレッシュの詳細:

  • 各表で自動リフレッシュが開始された時間

  • 自動リフレッシュ問合せ

  • Oracle Databaseで問合せの実行にかかった時間(ミリ秒)

  • Oracle Databaseの問合せでフェッチにかかった時間(ミリ秒)

  • TimesTenで問合せの適用にかかった時間(ミリ秒)

  • Oracle Databaseで子表に対する問合せの実行にかかった時間(ミリ秒)

  • Oracle Databaseで子表に対する問合せでフェッチにかかった時間(ミリ秒)

  • TimesTenで子表に対する問合せの適用にかかった時間(ミリ秒)

  • 各表で自動リフレッシュが終了した時間

  • 自動リフレッシュの完了位置を示す自動リフレッシュ・ブックマーク(logseq)


例1-12 AUTOREFRESHトレース

この例では、ttTraceMonユーティリティを使用して、cgDSNデータベースの自動リフレッシュ操作をトレースします。トレース・レベルを1に設定すると、ttCacheAutorefreshStatsGet組込みプロシージャの出力に似た情報が表示されます。

% tttracemon cgDSN
Trace monitor; empty line to exit
Trace> level autorefresh 1
Trace> dump

08:56:57.445 19398 AUTOREFRESH 1L 5C 32246P Autorefresh number 1415 started 
for interval 60000
08:56:57.883 19419 AUTOREFRESH 1L 5C 32246P Duration For Interval 60000ms: 420
08:56:57.883 19420 AUTOREFRESH 1L 5C 32246P Num Rows For Interval 60000ms: 0
08:56:57.883 19421 AUTOREFRESH 1L 5C 32246P Num Root Rows For Interval 
60000ms: 0
08:56:57.883 19422 AUTOREFRESH 1L 5C 32246P Cumulative Rows for Interval 
60000ms: 11587
08:56:57.883 19423 AUTOREFRESH 1L 5C 32246P Cumulative Root Rows for Interval 60000ms: 1697
08:56:57.883 19424 AUTOREFRESH 1L 5C 32246P Autorefresh number 1415 ended for 
interval 60000ms successfully.
7 records dumped

レベル4でトレースすると、自動リフレッシュ操作1415に関する追加情報が生成されます。testuser.readcacheキャッシュ・グループ、testuser.readtabルート表および自動リフレッシュ間隔に関する自動リフレッシュ情報が提供されます。

Trace> level autorefresh 4
Trace> dump

08:56:57.445 19398 AUTOREFRESH 1L 5C 32246P Autorefresh number 1415 started for 
interval 60000
08:56:57.471 19399 AUTOREFRESH 2L 5C 32246P Autorefresh started for cachegroup 
TESTUSER.READCACHE
08:56:57.471 19400 AUTOREFRESH 3L 5C 32246P Incremental autorefresh started for 
table TESTUSER.READTAB
08:56:57.471 19401 AUTOREFRESH 4L 5C 32246P Autorefresh Query: SELECT L."COL_10", 
X."COL_20", X.ft$NotDelete, Z.rowid FROM (SELECT DISTINCT "COL_10" FROM 
"TESTUSER"."TT_06_454854_L" WHERE logseq >:logseq AND ft_cacheGroup <> 
100000000000*1844259679+-299200618) L,(SELECT "TESTUSER"."READTAB"."COL_10", 
"TESTUSER"."READTAB"."COL_20", 1 AS ft$NotDelete  FROM "TESTUSER"."READTAB", 
"TESTUSER"."T1" WHERE "TESTUSER"."READTAB"."COL_10" = "TESTUSER"."T1"."COL_10") 
X, "TESTUSER"."READTAB" Z WHERE L ."COL_10" = X."COL_10" (+) AND X."COL_10" = 
Z."COL_10" (+), logseq: 7
08:56:57.870 19402 AUTOREFRESH 3L 5C 32246P Duration for table 
TESTUSER.READTAB: 70
08:56:57.870 19403 AUTOREFRESH 3L 5C 32246P Num Rows for table 
TESTUSER.READTAB: 1
08:56:57.870 19404 AUTOREFRESH 3L 5C 32246P Cumulative rows for table 
TESTUSER.READTAB: 1559
08:56:57.870 19405 AUTOREFRESH 4L 5C 32246P Autorefresh Query Execute duration 
for table TESTUSER.READTAB: 60
08:56:57.870 19406 AUTOREFRESH 4L 5C 32246P Autorefresh Query Fetch duration for 
table TESTUSER.READTAB: 0
08:56:57.870 19407 AUTOREFRESH 4L 5C 32246P Autorefresh Query Apply duration for 
table TESTUSER.READTAB: 0
08:56:57.870 19408 AUTOREFRESH 4L 5C 32246P Max logseq applied for table 
TESTUSER.READTAB: 8
08:56:57.870 19409 AUTOREFRESH 4L 5C 32246P Autorefresh Query Execute duration 
for 7 child(ren) table(s): 32
08:56:57.870 19410 AUTOREFRESH 4L 5C 32246P Autorefresh Query Fetch duration for 
7 child(ren) table(s): 0
08:56:57.870 19411 AUTOREFRESH 4L 5C 32246P Autorefresh Query Apply duration for 
7 child(ren) table(s): 0
08:56:57.870 19412 AUTOREFRESH 3L 5C  32246P Incremental autorefresh ended for 
table TESTUSER.READTAB
08:56:57.872 19413 AUTOREFRESH 2L 5C 32246P Duration For Cache Group 
TESTUSER.READCACHE: 1020
08:56:57.872 19414 AUTOREFRESH 2L 5C 32246P Num Rows For Cache Group 
TESTUSER.READCACHE: 1
08:56:57.872 19415 AUTOREFRESH 2L 5C 32246P Num Root Rows For Cache Group 
TESTUSER.READCACHE: 0
08:56:57.872 19416 AUTOREFRESH 2L 5C 32246P Cumulative Rows for Cache Group 
TESTUSER.READCACHE: 11776
08:56:57.872 19417 AUTOREFRESH 2L 5C 32246P Cumulative Root Rows for Cache Group 
TESTUSER.READCACHE: 1697
08:56:57.872 19418 AUTOREFRESH 2L 5C 32246P Autorefresh ended for cache group 
TESTUSER.READCACHE
08:56:57.883 19419 AUTOREFRESH 1L 5C 32246P Duration For Interval 60000ms: 420
08:56:57.883 19420 AUTOREFRESH 1L 5C 32246P Num Rows For Interval 60000ms: 0
08:56:57.883 19421 AUTOREFRESH 1L 5C 32246P Num Root Rows For Interval 
60000ms: 0
08:56:57.883 19422 AUTOREFRESH 1L 5C 32246P Cumulative Rows for Interval 
60000ms: 11587
08:56:57.883 19423 AUTOREFRESH 1L 5C 32246P Cumulative Root Rows for Interval 
60000ms: 1697
08:56:57.883 19424 AUTOREFRESH 1L 5C 32246P Autorefresh number 1415 ended for 
interval 60000ms successfully.
27 records dumped

AUTOREFRESHトレースをデフォルトの設定(0)に戻し、ttTraceMonを終了します。

Trace > level autorefresh 0
Trace > {press ENTER – blank line}

ttXactAdminユーティリティの使用

ttXactAdminユーティリティは、未処理の各トランザクションの所有者、ステータス、ログおよびロックの情報を表示します。このユーティリティを使用して、データベースへの現在のすべての接続を表示することもできます。ttXactAdminユーティリティは、レプリケーション、XLAおよび非同期WRITETHROUGHキャッシュ・グループの問題のトラブルシューティングに役立ちます。

例1-13 ttXactAdminを使用してロック・タイムアウトを診断する

ttXactAdminを使用してロック・タイムアウトを診断します。同じ行を更新しようとしている2つの接続について考えてみます。接続1による次のトランザクションが進行中です。

UPDATE table1 SET c1 = 2 WHERE c1 = 1;

接続2では、次の更新を実行しようとします。

UPDATE table1 SET c1 = 3 WHERE c1 = 1;

接続2は、次のエラーを受信します。

6003: Lock request denied because of time-out
  Details: Tran 2.3 (pid 2880) wants Un lock on rowid 0x00156bbc, table
 TTUSER.TABLE1.
  But tran 1.21 (pid 2564) has it in Xn (request was Xn). Holder SQL 
(update table1 set c1 = 2 where c1 = 1;)
  The command failed.

エラーの詳細によると、トランザクション1.21では行0x00156bbc(トランザクション2.3が更新する行)がロックされていることがわかります。ttXactAdminによって、データベース全体のアクションに関する出力にこの情報が表示されます。

% ttXactAdmin myDSN
2011-03-07 12:57:41.237
c:\datastore\myDSN
TimesTen Release 11.2.2.0.0

Outstanding locks

PID   Context   TransID  TransStatus  Resource   ResourceID   Mode Name

Program File Name: ttIsql

2564  0xeeb9a8  1.21     Active       Database   0x01312d00   IX
                                      Row        0x00156bbc   Xn   TTUSER.TABLE1
                                      Table      1910868      IXn  TTUSER.TABLE1

Program File Name: ttIsql

2880  0xeeb9a8  2.3      Active        Database   0x01312d00  IX
                                       Table      1910868     IXn  TTUSER.TABLE1
                                       Command    19972120    S

Awaiting locks

PID  Context   TransID Resource ResourceID  RMode HolderTransID HMode Name
2880 0xeeb9a8  2.3     Row      0x00156bbc  Un    1.21          Xn TTUSER.TABLE1

2 outstanding transactions found

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttXactAdminに関する項を参照してください。

ODBCトレースの使用

LinuxおよびUNIXシステムでは、ドライバ・マネージャを使用している場合にのみODBCトレースを使用できます。Traceを有効にするには、TraceおよびTraceFile属性を設定します。

TimesTen SYSTEM表の監視

各TimesTenデータベースには、データベースの現在の状態に関するメタデータを格納するシステム表のグループが含まれています。システム表の詳細は、Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンスのシステム表およびビューを参照してください。


ノート:

システム表に対してSELECT文は実行できますが、INSERTUPDATEDELETEなどの文は実行できません。

システム表SYS.SYSTEMSTATSを使用して、データベース・メトリックを表示します。ttStatsユーティリティを使用すると、データベース・メトリックを監視し、メトリックのスナップショットを取得して比較できます。詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』のSYS.SYSTEMSTATSに関する項、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatsに関する項および『Oracle TimesTen In-Memory Database PL/SQLパッケージ・リファレンス』のTT_STATSに関する項を参照してください。

SYS.MONITOR表を使用すると、データベースに最初に接続して以来発生した特定のイベントに関する統計を表示できます。たとえば、SYS.MONITOR表には、データベースへの接続数、チェックポイントの処理回数、データベースのサイズおよび現在使用中のメモリー量に関する情報が含まれています。列に対してSELECT文を実行するか、ttIsql monitorコマンドを実行してSYS.MONITOR表の内容を確認します。ttIsql monitorコマンドの使用方法の例については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のttIsqlユーティリティの使用に関する説明を参照してください。

問合せオプティマイザの使用

問合せオプティマイザは、パフォーマンス・チューニングのための重要なツールです。

問合せオプティマイザの詳細は、次を参照してください。

  • 『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen問合せオプティマイザに関する説明

  • 『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の問合せオプティマイザ計画の確認と変更に関する説明

特定の問合せ速度が予想より遅い場合は、問合せオプティマイザで、問合せに含まれる表の最新の統計が使用されていることを確認します(「問合せオプティマイザの統計を更新する」を参照)。統計を更新しても問合せ速度が遅い場合は、TimesTenオプティマイザが問合せに応答するための最適な問合せ計画を選択していない可能性があります。このような状況では、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の計画作成の変更に関する項で説明されているttOptプロシージャを使用して、オプティマイザが計画を作成する方法を調整することができます。文レベル・オプティマイザ・ヒントを使用すると、文レベルでオプティマイザに指示できます。詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の文レベル・オプティマイザ・ヒントに関する項を参照してください。