SQLチューニングとは
性能の悪いSQLを発見し、その処理過程を改善することを指します。
実行したい一つの処理に至るためにとることができるSQLアプローチは数多くありますが、性能という点でもそれぞれのアプローチにより異なる結果が伴われます。
目的の処理結果を変えずにその過程を最適化する、それがSQLチューニングです。
性能の良いSQLとは
そもそも性能の良いSQLとは何でしょうか。
端的に言えば、少ないリソースで処理を行うことができるSQLです。リソースを多く使用してしまう例としては、以下のようなことが挙げられます。
- 索引を使用していない
- 適切な索引を使用していない
- 無駄なソートを行っている
参考:津島博士のパフォーマンス講座 第9回 良いSQLについて
参考:津島博士のパフォーマンス講座 第11回 良いSQLについて(2)
上記の例は、索引の使用、SQLテキストの記述内容といった個別的な観点での問題です。
こういった各観点において使用リソースの削減を実現することができているSQLを指して、性能の良いSQLということができます。
これは、いかにスマートなSQL文を記述するか、ということとは同義ではありません。
なぜならば、SQLを実行するうえでは、SQLテキスト自体は一つの構成条件にしか過ぎないからです。
SQLチューニングが必要な状態とは
SQLチューニングが必要な状態とは、アプリケーションのパフォーマンスに問題がある状態を指します。上記の例にあったように、例えば「無駄なソートを行っている」というのもパフォーマンスに悪影響を与えるものです。
しかし、ならばSQLテキストがすべて適切なものであればパフォーマンスが最適化されるかといえば、そうではありません。なぜならば、SQLが処理される手順である実行計画の算出においては、SQLテキスト以外の様々な情報が使用されているからです。
上記を踏まえパフォーマンスが低下してしまう原因を考慮すると、以下の2点にまとめることができます。
1. **オプティマイザのインプット情報** が正確ではない 2. **オプティマイザが生成した実行計画** が適切ではない。
オプティマイザ(DBの頭脳)は、インプットされている情報に基づき処理の実行計画を算出します。
したがって、まずはオプティマイザにインプットされている情報を確認・修正することが必要です。
そのうえで算出される実行計画がまだ適切でなければ、それを適切な形に成るよう種種の修正を加えていきます。
オプティマイザのインプット情報
オプティマイザにインプットされる情報とはなんでしょうか。
前述したとおり、インプット情報とはオプティマイザが実行計画を算出するための材料となる情報群になります。その内容はというと、表の情報であったりSQL文本体であったりします。
その中でも最も重要なものは、統計情報と呼ばれるものです。
インプットされる情報について、以下のようなものがあります。具体的な中身については、後続の記事をご覧ください。
- 統計情報
- SQLテキスト
- 初期化パラメータ
SQLチューニングについて(2) オプティマイザのインプット情報について
オプティマイザの実行計画
上述したインプット情報に基づき、オプティマイザはSQL処理の実行計画を算出します。
インプットされた情報が正確なものであれば実行計画も正確なものになるはずですが、例えば統計情報のデータ変動幅が大きかったり、そもそもインプットする情報を適切なものに更新することができないなどの状況が発生し得ます。それでは実行計画も正確なものにはなりません。
そのような場合には、実行計画が理想的なものになるように能動的なアプローチをかけていく必要があります。
この場合ではオプティマイザによらず自分の理想に向けて実行計画を修正する必要がありますので、自分で実行計画の妥当性を判断できるスキルが求められます。
実行計画の読み方、修正の仕方などについては後続の記事をご覧ください。
SQLチューニングについて(3) 実行計画の読み方について 執筆中
SQLチューニングについて(4) 実行計画の修正について 執筆中
終わりに
本記事では、SQLチューニングとは何か、どのような方法でそれを達成できるのかを概観しました。
具体的な内容への踏み込みは後続記事で行っていきたいと思っているので、そちらもご覧いただければ幸いです。
参考
本記事を執筆するにあたり、以下の情報サイト・書籍などを参考にさせていただいています。
情報サイト
- 津島博士のパフォーマンス講座:http://www.oracle.com/technetwork/jp/database/articles/tsushima/index.html
- 統計情報はなぜ必要か:http://www.doppo1.net/oracle/tuning/statistics_outline.html
書籍
- 「即戦力のOracle管理術」技術評論社
- 「Oracle SQLチューニング」翔泳社