Technical Articles
SAP SQL Anywhere Tips – Ver.17 SQL Anywhere プロファイラ(後編)
この記事は
この記事はSAP SQL Anywhere Ver.17のパフォーマンス分析ツール「SQL Anywhereプロファイラ」の解説の後編となります。
前編はこちらです。
プロファイリングデータの保存(と開く)方法
プロファイリングのデータは保存して他のマシン上(のSQL Central)で閲覧することもできます。保存方法はプロファイリング中に上部メニューの「ファイル」をクリックし、展開されたメニューより「名前を付けて保存」をクリックします。
あとはファイルを保存するダイアログが開きますので、ファイル名を設定して保存します。拡張子は.sqlapです。
反対に開くにはSQL AnywhereVer.17がインストールされたマシン上でSQL CentralからSQL Anywhereプロファイラを起動します。この場合はデータベースに接続する必要はないので以下の方法が良いでしょう。
SQL Central上部メニューで「ツール」→「SQL Anywhere 17」と辿り、
「SQL Anywhereプロファイラを開く」をクリックします。
プロファイリングの停止
プロファイリングを停止するには上部メニューの「ファイル」をクリックし、
切断をクリックします。
OKをクリックしてください。これでプロファイリングは停止します。
なお、「切断前にプロファイリングを停止」チェックボックスのチェックを消すと、リアルタイムのプロファイリングはできなくなりますが、プロファイリング自体はバックグラウンドで動作し続けます。この場合、SQL Anywhereプロファイラから再度そのプロファイリング対象データベースに接続するとバックグラウンド動作中に取得したデータも含めてSQL Anywhereプロファイラで表示することが可能です。
インデックスの提案の違い
プロファイリングしたデータはインデックスコンサルタントを使用してインデックスの提案をさせることが出来ます。(なお、この機能はプロファイリング対象データベースに接続していることが必要です。)
これは上部メニューの「ツール」を展開すること表示されるメニューにあります。画面上にはこのように
「文のインデックスの提案」
「負荷のインデックスの提案」
の2種の提案が表示されます。
*前編で紹介した操作で左側のSQLを右クリックしたメニューで表示される提案は「文のインデックス提案」と等価です。
これは機能的に
- 文のインデックスの提案
その文だけをインデックスコンサルタントで分析する。
- 負荷のインデックスでの提案
キャプチャしたデータ(SQL)全てをインデックスコンサルタントで分析する。
という違いがあります。どのような違いが生まれるかですが、例えば1つのテーブルに対し、2つのSQLを実行していた場合、「文のインデックスの提案」では「それぞれ1つずつインデックスを提案」する可能性があります。それに対し「負荷のインデックスの提案」ではその2つのSQLに対して「カラムをまとめた一つのインデックスを提案する」という形になります。
単純な例を挙げると
CREATE TABLE TABLE1(
COL1 int,
COL2 int,
COL3 VARCHAR(30));
というテーブルで、
SQL1:
SELECT COL1,COL2,COL3 FROM TABLE1 ORDER BY COL1;
SQL2:
SELECT COL1,COL2,COL3 FROM TABLE1 ORDER BY COL1,COL2;
というSQLが実行される場合、「文のインデックス提案」ではSQL1に対してはCOL1のインデックス、SQL2に対してはCOL1とCOL2の複合インデックスを提案します。ただ、考えるとこれはCOL1とCOL2の複合インデックスだけでこの2つのSQLは賄えてしまいます。これは複数のSQL(=負荷)を総合的に判断しないと1つで賄うという提案は出来ません。これが「負荷のインデックスの提案」です。
インデックスは「検索」に対しては同一テーブルに複数個存在しても問題ありません。適切なものをオプティマイザが判断し使用します。が、「挿入・更新・削除」では存在するインデックス全てに操作が必要なためインデックスが多数存在することは挿入・更新・削除でパフォーマンスロスとなります。 |
まとめ
このようにSQL Anywhereプロファイラは開発から運用時に発生した問題解析に使用できるツールです。ぜひ一度使ってみてください