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トレースはオプティマイザーがどのような計算を行い、
最終的にどんな実行計画を作成したかを調査することができます。
パフォーマンス低下およ不具合時の調査に有効です。