Open棟梁Project - マイクロソフト系技術情報 Wiki
SQL ServerもOracleもSQLを実行するに当たり、
「オプティマイザ」と呼ばれるプログラムが、
どう処理したら効率がよいかを解析し、「実行計画」を立てる。
SQLの実行パフォーマンスを向上させるためには、
どうすれば効率のよい実行計画になるかを探る必要がある。
オプティマイザの種類 (CBO、RBO)
- オラクル・Oracleをマスターするための基本と仕組み
http://www.shift-the-oracle.com/inside/optimizer.html
オプティマイザには、
の2つの種類が存在する。
オプティマイザの種類としては、コストベースのオプティマイザ(CBO)が主流となっている。
この理由は、CBOは、データが変化する環境においても定期的に統計情報の収集をするため、
データにフィットした 実行計画、 アクセスパスになるように自動的に調整されるためである。
Oracle 10g からはルールベースのオプティマイザ(RBO)はサポートされなくなっている。
ただし、この「サポートされない」の意味は、
RBOの生成する実行計画に影響を与えるクエリヒントが
将来、サポートされなくなる可能性を示唆しているだけで
「実際はまだ使用可能」である。
Windows Serverが自動パラメータであるように、SQL ServerもCBOに基づいたチューニングを行う。
#Sybase SQL ServerはCBOをサポートした初めて商用で成功したRDBMSでもある。
以下の手順にある様に、CBO(統計情報→実行プラン)の問題を確認し、
必要に応じてRBO(プラン ガイド、クエリ ヒント)を適用する。
クエリ パフォーマンス
http://msdn.microsoft.com/ja-jp/library/ms190610.aspx
実行計画の確認、統計情報のメンテナンスの手順は以下を参照。
連載 RDBMSアーキテクチャの深層(5)
OracleとSQL Server、チューニングの違いを知る(Page 2)
http://www.atmarkit.co.jp/fdb/rensai/rdbmsarc05/rdbmsarc05_2.html
統計情報の自動更新が ON の時には統計情報を手動で更新する必要はない?
- Microsoft SQL Server Japan Support Team Blog - Site Home - MSDN Blogs
http://blogs.msdn.com/b/jpsql/archive/2012/04/19/on.aspx
UPDATE STATISTICS や sp_updatestats を実行して
明示的に統計情報を更新する必要がある場合はある。
おおよそテーブルの 20% に相当するデータが更新されると、
そのデータの統計は自動更新の対象になる。
SQL Serverには以下のRBO的な機能が残されている。
実際のクエリのテキストを直接変更することが不可能な場合や望ましくない場合に、
プラン ガイドを使用してクエリのパフォーマンスを最適化することができます。
プラン ガイドは、クエリ ヒントまたは固定クエリ プランを
クエリにアタッチすることにより、クエリの最適化を促します。
プラン ガイドは、サード パーティ ベンダーが提供する
データベース アプリケーションのクエリの小さなサブセットで、
期待どおりのパフォーマンスが得られない場合に役に立ちます。
USE PLAN クエリ ヒントを使用すると、クエリ オプティマイザが
クエリに対して指定のクエリ プランを強制的に適用するように設定できます。
USE PLAN クエリ ヒントは、引数として
XML 形式のクエリ プランを受け取ることによって機能します。
USE PLAN は、実行時間の長いプランを使用するクエリに、
より優れたプランが存在することがわかっている場合に使用できます。