SQL文を実行するためには、内部的には表からデータを取り出したり、索引を使用したり、表を結合したりと、複数の処理を実行する必要があります。このSQL文の実行に必要な処理の組み合わせを、Oracle Serverでは「実行計画」といいます。 一方、SQL Serverではこの処理手順を「実行プラン」といいます。実行プランは、索引を使用するかどうかや結合の順番などを決めていますので、SQL文のパフォーマンスに影響を与えます。このため、実行プランはSQL文のチューニングに使用します。どのような実行プランが立てられたのかを確認し、必要があれば変更することも可能です。確認方法などについては、次のキーワード「EXPLAIN PLAN」を参照してください。
クエリのパフォーマンスが悪いときには、実行計画(SQL Serverでは実行プラン)を確認すると、どのような方法でデータアクセスしているかを確認することができます。Oracle Serverでは「EXPLAIN PLAN」命令を使用して、プランテーブルに格納された内容を確認します。 EXPLAIN PLAN を使用するためにはプランテーブルの作成などの準備が必要ですが、SQL Serverではクエリアナライザを使用して、容易に、視覚的にわかりやすく実行プランの表示をすることができます。クエリアナライザにて[クエリ]-[実行プランの表示]メニューをクリックしてクエリを実行するか、クエリを入力後に[クエリ]- [推定実行プランの表示]メニューを選択すると、結果に[実行プラン]タブまたは[推定実行プラン]タブが出てきますので、そこで実行プランを確認できます。
☆さらに詳細はこちら→
Oracle Serverのオプティマイザは、SQL文を評価し、複数の処理手順の中から最も効率的な実行方法を判断する機能です。その判断には「コストベース」、「ルールベース」という2種類の方法が使われます。 SQL Serverにも「クエリオプティマイザ」と呼ばれる同等の機能があります。 クエリオプティマイザは、コストベースのオプティマイザです。つまり、実行コスト(I/OとCPUコスト)を見積もることによって各実行プランを評価します。 クエリオプティマイザは、ただ単にリソース消費の最も少ない実行プランを選択するのではなく、適切な量のリソースを消費し、かつ最も早く結果を返す実行プランを選択します。
データベースのメモリチューニング作業の中で、メモリ領域のヒット率診断があります。Oracle Serverでは、現時点でのメモリ領域のヒット率を求める方法としてV$の動的パフォーマンス・ビューを使用し、ある期間内でのヒット率などを求める方法として「STATSPACKパッケージ」を使用します。 一方、SQL Serverでは、「DBCCコマンド」で現時点でのメモリ情報を確認できます。たとえば、DBCC SQLPERF(LRUSTATS)コマンドによってキャッシュヒット率の確認が可能です。 特定の期間内でのヒット率を監視する場合は、Windows 2000の「システムモニタ」を使用します。たとえば、SQL Server: Buffer ManagerオブジェクトのBuffer Cache Hit Ratioカウンタで、バッファキャッシュのヒット率を確認できます。
SQL文実行時にオプティマイザが作成する実行計画(SQL Serverでは実行プラン)は、事前に収集した統計情報から、コストが最小になるもの(スループットが高いもの)が選ばれます。場合によっては、ユーザーのニーズとは一致しない形で実行計画が作成されることもあります。そこで、ユーザーのニーズをオプティマイザに伝える方法としてSQLの「ヒント」を使用します。Oracle ServerもSQL Serverも、同じようにヒントをサポートしています。次に示すのは、索引の使用を明示的に指定する例です。
・Oracle Serverの場合 SELECT /*+ INDEX(employees emp_dept_id_idx) */ * FROM employees … ・SQL Serverの場合 SELECT * FROM employees WITH(INDEX(1)) …
表や索引の特徴を表す情報を「統計情報」といいます。統計情報はコストベース・オプティマイザが最適な実行計画を選択できるようにするために使用されます。Oracle Serverでは、統計情報のおもな取得方法として「ANALYZE文」と「DBMS_STATSパッケージ」があります。これらは両方とも、手動で実行し、手動で更新する必要があります。 SQL Serverでも、列内の値の分布に関する統計情報を作成できます。既定では統計情報は自動で作成されます。また既定では、データの変更に応じて、統計情報の更新も自動で行われます。手動で統計を作成、更新したい場合には、「CREATE STATISTICS」や「UPDATE STATISTICS」ステートメントを使用してください。