この章の次の項では、TimesTenデータベースの問題を診断するためのTimesTenユーティリティおよびその他のツールの使用方法について説明します。
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
ユーティリティを使用すると、対話形式でSQL文を実行して、TimesTenデータベースに関するステータス情報をレポートできます。
TimesTenのすべてのSQL操作は、ttIsql
のCommand>
プロンプトから実行できます。
例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
ユーティリティを使用すると、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のシステム管理およびアプリケーションのデバッグに役立ちます。
デフォルトでは、情報メッセージは次の場所に格納されます。
場所やサイズなど、ログの構成に関する情報については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のエラー、警告および情報のメッセージに関する説明を参照してください。
すべてのメッセージ・カテゴリは、デフォルトで有効化されますが、ttDaemonLog
ユーティリティのオプションを使用すると、すべてのデータベースまたは指定したデータベースに対して、次のカテゴリのユーザー・エラー・ログ・メッセージを無効化または明示的に有効化することができます。
ALL
(デフォルト): すべてのメッセージが対象です
CACHE
: CAC
で指定する、キャッシュ・エージェントからのメッセージが対象です。
DAEMON
: メイン・デーモンおよびサブデーモンからのメッセージが対象です。
DAEMONDBG
: メイン・デーモンおよびサブデーモンからの追加情報が対象です。
REPLICATION
: REP
で指定する、レプリケーション・エージェントからのメッセージが対象です。
SERVER
: TimesTen Serverからのメッセージが対象です。
ttDaemonLog
オプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttDaemonLogに関する項を参照してください。
ttTraceMon
ユーティリティを使用すると、多数のTimesTenコンポーネントについて様々なトレース情報を記録できます。各TimesTenコンポーネントは、様々な詳細レベルでトレースできます。ttTraceMon
をshow
サブコマンド付きで指定すると、トレース可能なすべてのTimesTenコンポーネントとそれらの現在のトレース・レベルを表示できます。オプションのリストについては、『Oracle TimesTen In-Memory Databaseリファレンス』のttTraceMonに関する項を参照してください。
トレースの出力をファイルに行うと、TimesTenのトレース処理は、アプリケーションのパフォーマンスに大きく影響し、大量のファイル・システム領域を消費します。また、AWTキャッシュ・グループを使用している場合は、ttTraceMon
でORACON
コンポーネントのトレースを試行するときに、レプリケーション・エージェントを再起動する必要があります。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カスタマ・サポートでのみ使用されます。ただし、SQL
、API
、LOCK
、ERR
、AGING
および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コンポーネント(SQL
、API
、LOCK
、ERR
など)です。
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
ttTraceMon
をSQLコンポーネントで使用すると、TimesTenエンジンによって準備または実行されているSQL
に関する情報が提供されます。表1-1に、SQLトレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
表1-1 SQLトレース・レベル
レベル | 出力 |
---|---|
2 |
準備されているSQLコマンド |
3 |
+ 実行中のSQLコマンド。 |
4 |
+ コマンドをプールする効果(準備されたコマンドはすでにプールに存在するため、準備は行われない)、再準備の必要性(索引が作成されたためなど)、および破棄されるコマンド このレベルでは、 |
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トレースは、データベースへの接続、接続属性の変更、トランザクションのコミットなどのデータベース操作のために生成されます。表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
コンポーネントを使用して、すべてのアプリケーションにおけるデッドロックの発生状況をトレースします。
表1-3に、DEADLOCK
トレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
例1-8 DEADLOCKトレース
この例では、myDSN
データベースに対して、DEADLOCK
トレースをデフォルトのレベル1で実行するために、ttTraceMon
を実行します。
myDSN
への2つの接続を作成します。最初の接続では、自動コミットは有効になっています。表test
を作成して2行挿入します。次に、自動コミットを無効にして、表test
のx1=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つ目の接続では、自動コミットを無効にします。表test
のx1=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
トレースに高い値を設定します。たとえば、次では、ttTraceMon
でDEADLOCK
トレースをレベル4に設定しています。
Trace > level deadlock 4
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
コンポーネントのトレースが役立つ場合もあります。たとえば、レベル4のERR
トレースでは、TimesTenダイレクト・ドライバにプッシュされるすべてのエラー・メッセージが表示されます(内部的に処理されるため、すべてのエラーがユーザーに出力されるわけではありません)。デフォルトは、レベル1のERR
トレースです。レベル2および3のERR
トレースでは、出力は作成されません。
表1-5に、ERR
トレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
例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}
ttTraceMon
ユーティリティを使用して次の情報を取得します。
エージングの開始と終了のタイミング
エージング・サブデーモンによって何行が削除されたか
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。
表1-6に、AGING
トレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
表1-6 AGINGトレース・レベル
レベル | 説明 |
---|---|
1 |
次のイベントに関するメッセージ。
|
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}
ttTraceMon
ユーティリティを使用して、AUTOREFRESH
キャッシュ・グループ属性を持つキャッシュ・グループの自動リフレッシュ操作の処理状況に関する情報を取得します。
『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のAUTOREFRESHキャッシュ・グループ属性に関する項を参照してください。
表1-7に、AUTOREFRESH
トレース・レベルを示します。「+」サインの付いた各レベルには、該当するレベルで説明されているトレース情報に加え、該当レベルより上のすべてのレベルの情報も含まれます。
表1-7 AUTOREFRESHトレース・レベル
レベル | 説明 |
---|---|
1 |
その時間隔の自動リフレッシュのサマリー:
ノート: 時間およびルート表の行に関する情報は、完全自動リフレッシュの場合にレポートされます。 |
2 |
+ キャッシュ・グループ・レベルでの自動リフレッシュのサマリー:
ノート: 時間およびルート表の行に関する情報は、完全自動リフレッシュの場合にレポートされます。 |
3 |
+ 表レベルでの自動リフレッシュのサマリー:
|
4 |
+ 各表の自動リフレッシュの詳細:
|
例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
ユーティリティは、レプリケーション、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に関する項を参照してください。
LinuxおよびUNIXシステムでは、ドライバ・マネージャを使用している場合にのみODBCトレースを使用できます。Traceを有効にするには、Trace
およびTraceFile
属性を設定します。
各TimesTenデータベースには、データベースの現在の状態に関するメタデータを格納するシステム表のグループが含まれています。システム表の詳細は、Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンスのシステム表およびビューを参照してください。
ノート: システム表に対してSELECT 文は実行できますが、INSERT 、UPDATE 、DELETE などの文は実行できません。 |
システム表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リファレンス・ガイド』の文レベル・オプティマイザ・ヒントに関する項を参照してください。