[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使い方・削除方法 Oracle DatabaseのSQLトレースログの 取得方法出力先tkprofの使い方削除方法 を紹介したいと思います。 性能劣化時や障害時の調査に大変役立つログであり、 サポート問...

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トレースはオプティマイザーがどのような計算を行い、

最終的にどんな実行計画を作成したかを調査することができます。

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

よかったらシェアしてね!
  • URLをコピーしました!
目次