SQLのパフォーマンスを改善したい
負荷の高い SQL は該当処理のレスポンスが遅いだけでなく、リソース消費によって
Oracle データベース全体のパフォーマンス低下の要因となる場合がある。よって、
負荷をかけている SQL を特定しておき、必要に応じてチューニングを行うべきである。
チューニングの流れ
まず対象の SQL を特定しトレースを取得する。
実行計画を元に SQL の改善やインデックス作成等の対処を行い、
処理コストを確認しながら、目標値に達するまで繰り返し行う。
既に最適化されている場合、パフォーマンスの向上が困難であることも多い。
チューニングはある意味終わりのない作業であるため、必ず目標値を設定する。
負荷の高い上位 SQL
上位 SQL の確認としては、以下のような観点が考えられる。
・実行時間( CPU時間 /経過時間)が長い ・バッファ読取りが多い(= CPU 使用率が高い) ・ディスク読取りが多い(= I/O 使用率が高い) ・解析コール数が多い ・ソートが多い ・待機時間が長い ・実行回数が多い
解析対象のv$ビュー
これらの情報を取得する場合、v$ からはじまる動的パフォーマンスビューを参照する。
一次切り分けとしては、 v$sql や v$sqlstats を主に利用するが、
その他に v$sqlarea v$sysstat v$sqltext v$sql_plan なども必要となることがある。
しかし、これらで特定した SQL に必ず問題点があるとは限らない。
例えば大量データ取得や複雑な結合処理では、最適化されていて
コストが妥当でも、結果として上位となる可能性があるため。
逆に上位に表示されていなくても、アクセスしたブロック数のわりに選択行が少ない SQL や、
読取りブロックのわりに実行時間が長い SQL などに改善の余地が潜んでいる可能性もある。