Database OracleDB インフラ

[OracleDB] 障害時に取得するSQLトレース。10046/10053トレースの違いとは?

Oracle DatabaseでSQL障害が発生した時にSQL単体を詳細に解析するためにSQLトレースを取得することは多々あります。

SQL障害とて

  • 性能問題
  • SQLの結果不正

があげられます。

サポートチームへの連携時によく使いますので参考にしてみてください。


10046トレースの取得方法

最も一般的な取得する方法を紹介します。

今回は最も詳細のトレースレベルである、12で取得します。

alter session set tracefile_identifier='10046';
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 12';

ここで調査するSQLを実行

alter session set events '10046 trace name context off';

 

トレースログは以下に出力されます。

$ORACLE_BASE/diag/rdbms/<dbname>/<SID>/trace/

 

別途トレースの整形方法は以下の記事を参考してください。

[Oracle] SQLトレースログの取得方法・出力先・tkprof使い方・削除方法

こんにちは!シミダイ(@shimidai2100)です。 Oracle DatabaseのSQLトレースログの 取得方法 ...

続きを見る

10053トレースの取得方法

10053トレースはオプティマイザーの動作をトレースしたログです。どのようにSQLを解析したかをトレースします。

そのため10053トレース実行時にはハードパース(0からSQLを解析)する必要があります。

強制的にハードパースさせるため共有プールをすべて初期化します。

alter system flush shared_pool;
alter session set tracefile_identifier='10053';
alter session set max_dump_file_size = unlimited;
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set events '10053 trace name context forever, level 1';

ここでSQLを実行

 

トレースログは以下に出力されます。

$ORACLE_BASE/diag/rdbms/<dbname>/<SID>/trace/

 

10046トレースと10053トレースの違い

10046トレースと10053トレースの違いは以下になります。

10046トレース

10046トレースは解析・実行・取得(Parse/Execute/Fetch)でかかった時間を詳細に取得することができます。

実行計画、バインド値、待機イベントの情報などが確認できるためパフォーマンス低下の調査に有用です。

10053トレース

10053トレースはオプティマイザーがどのような計算を行い、最終的にどんな実行計画を作成したかを調査することができます。

パフォーマンス低下およ不具合時の調査に有効です。

関連記事

-Database, OracleDB, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.