チューニング(SQL解析ツール編)
開発者必見?!
SQLチューニング用の標準解析ツールがいろいろ用意されている。
SQL_TRACE
実行時間やディスクアクセスに関する情報を取得できる。<準備>
調査したいユーザにてログインし、情報取得フラグ/時間統計取得フラグを有効化する。
alter session set sql_trace=true;
alter session set timed_statistics=true;
<実行>
調査したいSQLを実行する。
あとしまつ↓
ログアウト
or
alter session set sql_trace=false;
alter session set timed_statistics=false;
<解析>
初期化パラメータ udump に設定したフォルダに、トレースファイル(拡張子.trc)が作成されているはず。
OSコマンドtkprofを使って解析可能な形式に変換する。
tkprof トレースファイル名 出力先ファイル名(*.txtにでもしときゃいい)
作成ファイルの例)
********************************************************************************
delete from AAA
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.01 0 0 0 0
Execute 1 0.00 0.10 1 7 3 1
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.00 0.11 1 7 3 1
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 23
Rows Row Source Operation
------- ---------------------------------------------------
0 DELETE
1 TABLE ACCESS FULL AAA
********************************************************************************
列のcpu,diskなどに注目する。これを減らす努力をすることでパフォーマンスアップ!EXPLAIN PLAN
実行計画に関する情報を取得できる。<準備>
調査対象ユーザにて、実行計画保存用のテーブルを作成する。
@C:\oracle\product\920\rdbms\admin\utlxplan.sql
sysユーザにて、EXPLAIN PLANを利用するためのロール(PLUSTRACE)を作成する。
@C:\oracle\product\920\sqlplus\admin\plustrce.sql
さらに、調査対象ユーザに権限を付与する。
grant plustrace to ユーザ名;
※準備作業はデータベースに対して一回行うのみでよい。
※ただしテーブル作成/権限付与は調査対象ユーザごとに必要。
<実行>
調査対象ユーザにてログインし、
set autotrace on
を実行したあとで、調査したいSQLを実行する。
あとしまつ↓
ログアウト
or
set autotrace off
<解析>
SQL_TRACEのような追加手順は不要。
実行結果の直後に、以下のような解析情報が表示される。
実行計画
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'AAA'
統計
----------------------------------------------------------
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
228 bytes sent via SQL*Net to client
372 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
実行計画の情報にて、インデックス利用がされているかなどを確認する。表示例の場合だと、テーブルAAAに対してFULLスキャンが実行されているとわかる。
補足
上記2つのツールは、ある個別のSQLの解析を行うのに適している。たとえば
・プログラム開発中に自分の書いたSQLをチェックする
・チューニング問題の原因となっているSQLが既に判明している
などの時に有効利用できる。
データベース全体の問題を調査したい場合には、標準ツールのstatspackなどの利用を検討すればよい。