Open棟梁Project - マイクロソフト系技術情報 Wiki -[[戻る>SQL Server]] * 目次 [#r2bd7430] #contents *基本情報 [#j0f58e35] **概要 [#dd722b34] SQL ServerもOracleもSQLを実行するに当たり、~ 「オプティマイザ」と呼ばれるプログラムが、~ どう処理したら効率がよいかを解析し、「実行計画」を立てる。~ ~ SQLの実行パフォーマンスを向上させるためには、~ どうすれば効率のよい実行計画になるかを探る必要がある。~ **オプティマイザの種類 [#u18a8ef8] オプティマイザの種類 (CBO、RBO)~ - オラクル・Oracleをマスターするための基本と仕組み~ http://www.shift-the-oracle.com/inside/optimizer.html~ ~ オプティマイザには、 -コストベースのオプティマイザ(CBO) -ルールベースのオプティマイザ(RBO) の2つの種類が存在する。~ ~ オプティマイザの種類としては、コストベースのオプティマイザ(CBO)が主流となっている。~ ~ この理由は、CBOは、データが変化する環境においても定期的に統計情報の収集をするため、~ データにフィットした 実行計画、 アクセスパスになるように自動的に調整されるためである。~ ~ Oracle 10g からはルールベースのオプティマイザ(RBO)はサポートされなくなっている。~ ~ >ただし、この「サポートされない」の意味は、~ RBOの生成する実行計画に影響を与えるクエリヒントが~ 将来、サポートされなくなる可能性を示唆しているだけで~ ''「実際はまだ使用可能」''である。~ **チューニング方法 [#u07ef8c5] ***自動パラメータ [#adbfe6b9] Windows Serverが自動パラメータであるように、SQL ServerもCBOに基づいたチューニングを行う。~ #Sybase SQL ServerはCBOをサポートした初めて商用で成功したRDBMSでもある。 -[[Windows 自動パラメタとチューニング]] ***クエリのチューニング [#w8f896dd] 以下の手順にある様に、CBO(統計情報→実行プラン)の問題を確認し、~ 必要に応じてRBO(プラン ガイド、クエリ ヒント)を適用する。 クエリ パフォーマンス~ http://msdn.microsoft.com/ja-jp/library/ms190610.aspx -クエリのチューニング~ http://msdn.microsoft.com/ja-jp/library/ms176005.aspx~ SQL Server データベース エンジンのプラン表示機能を使用して、~ クエリ プランを表示し、分析する方法について説明します。 -プラン ガイドを使用した配置済みアプリケーションのクエリの最適化~ http://msdn.microsoft.com/ja-jp/library/ms187032.aspx~ クエリのテキストを変更できない場合に、プラン ガイドを使用して、~ クエリ パフォーマンスを最適化する方法について説明します。 -プラン強制の使用によるクエリ プランの指定~ http://msdn.microsoft.com/ja-jp/library/ms190727.aspx~ USE PLAN クエリ ヒントを使用して、クエリ オプティマイザがあるクエリに対して~ 特定のクエリ プランを使用するように設定する方法について説明します。 *CBO [#e611b387] **実行計画の確認、統計情報のメンテナンスの手順 [#t1fff22a] 実行計画の確認、統計情報のメンテナンスの手順は以下を参照。~ ~ 連載 RDBMSアーキテクチャの深層(5)~ OracleとSQL Server、チューニングの違いを知る(Page 2)~ http://www.atmarkit.co.jp/fdb/rensai/rdbmsarc05/rdbmsarc05_2.html -オプティマイザと統計情報 --SQL実行計画の確認手順 --統計情報のメンテナンス **統計情報の自動更新・手動更新の使い分け [#b4304d99] 統計情報の自動更新が ON の時には統計情報を手動で更新する必要はない?~ - Microsoft SQL Server Japan Support Team Blog - Site Home - MSDN Blogs~ http://blogs.msdn.com/b/jpsql/archive/2012/04/19/on.aspx~ ***統計情報の自動更新が ON に設定されている場合には、統計情報を手動で更新する必要は全くないか? [#fc9d846d] UPDATE STATISTICS や sp_updatestats を実行して~ 明示的に統計情報を更新する必要がある場合はある。 ***統計情報の自動更新はいつどのように行われるのか? [#pd6e9a3e] おおよそテーブルの 20% に相当するデータが更新されると、~ そのデータの統計は自動更新の対象になる。 ***どのような場合に手動更新が必要か? [#o1c0502f] -統計情報の自動更新が実行されるためのしきい値には達しないまでも、データ分布に影響を与える量のデータ変更が行われた場合。 -全体のデータ分布には大きな影響は与えていないが、データ参照を行う処理が、追加変更されたデータのみを参照する場合。 -言い換えれば、データ変更後に、統計情報に含まれていないデータを対象とした処理が行われる場合。 *RBO [#l48a6c26] SQL Serverには以下のRBO的な機能が残されている。 -プラン ガイド -クエリ ヒント **プラン ガイド [#ia0b214f] -プラン ガイドを使用した配置済みアプリケーションのクエリの最適化~ http://msdn.microsoft.com/ja-jp/library/ms187032.aspx --プラン ガイド~ http://msdn.microsoft.com/ja-jp/library/ms190417.aspx >>実際のクエリのテキストを直接変更することが不可能な場合や望ましくない場合に、~ プラン ガイドを使用してクエリのパフォーマンスを最適化することができます。 ~ ~ プラン ガイドは、クエリ ヒントまたは固定クエリ プランを~ クエリにアタッチすることにより、クエリの最適化を促します。~ ~ プラン ガイドは、サード パーティ ベンダーが提供する~ データベース アプリケーションのクエリの小さなサブセットで、~ 期待どおりのパフォーマンスが得られない場合に役に立ちます。 --プラン ガイドのデザインと実装 --プラン ガイドを使用したクエリのパラメータ化動作の指定 --パラメータ化クエリのプラン ガイドの設計 --SQL Server がプラン ガイドをクエリに照合するプロセス --SQL Server Profiler を使用したプラン ガイドの作成とテスト **クエリ ヒント [#qe267d06] -プラン強制の使用によるクエリ プランの指定~ http://msdn.microsoft.com/ja-jp/library/ms190727.aspx --プランの適用について~ http://msdn.microsoft.com/ja-jp/library/ms186343.aspx >>USE PLAN クエリ ヒントを使用すると、クエリ オプティマイザが~ クエリに対して指定のクエリ プランを強制的に適用するように設定できます。~ ~ USE PLAN クエリ ヒントは、引数として~ XML 形式のクエリ プランを受け取ることによって機能します。~ ~ USE PLAN は、実行時間の長いプランを使用するクエリに、~ より優れたプランが存在することがわかっている場合に使用できます。~ --USE PLAN クエリ ヒントの使用 --カーソルを使用したクエリでの USE PLAN クエリ ヒントの使用 --プラン強制シナリオと例 *参考情報 [#j229e731] -特集基礎から理解するデータベースのしくみ:ITpro~ http://itpro.nikkeibp.co.jp/article/COLUMN/20060127/228070/?ST=develop --Part1:SQL文はどのように実行されるのか ---基礎から理解するデータベースのしくみ(2) ---基礎から理解するデータベースのしくみ(3) ---基礎から理解するデータベースのしくみ(4) ---基礎から理解するデータベースのしくみ(5)