=encoding euc-jp =head1 名前 explain, ora_explain - Oracle問い合わせ計画の視覚化 =head1 概要 $ explain [ [ user/password@database ] sql script ] $ ora_explain [ [ user/password@database ] sql script ] B<注意:> DBD::Oracleとバンドルされているとき、そのスクリプトはora_explainと呼ばれます =head1 説明 ExplainはOracle問い合わせ計画を視覚化するための簡単なGUIベースのツールです。 問い合わせ計画はOracleがSQL問い合わせを満足させるために使おうとしている アクセスパスです。Oracle問い合わせオプティマイザは利用するのに最適な パスを判定することに責任を持っています。いうまでもなく、そのような問い合わせを 理解するためには、Oracleのアーキテクチャとその内部についての、まさに 高度の知識が必要となります。 Explain はSQLステートメントを対話的に編集し、その結果である問い合わせ計画 1つのボタンのクリックで見ることを可能にしています。SQLの変更やヒントの追加の 影響を、すぐに確認することができます。 Explain は、ユーザがOracleによりキャッシュされている全てのSQLを補足することを 可能にしています。SQLの捕捉は基準を変えることによりフィルターを掛けたり、 ソートすることができます。例えば、すべてのSQLへのマッチングパターン、 実行回数による並べ替えなど。 ExplainはPerl、DBI/DBD::OracleそしてTkを使って書かれています。 =head1 必要なもの =over 2 =item 1. Oracle 7 あるいは Oracle 8。もしappropriateであれば、SQL*Net付き =item 2. L あるいは、それ以降 =item 3. L バージョン 1.02 あるいは、それ以降 =item 4. L 0.54 あるいは、それ以降 =item 5. L 800.011 あるいは、それ以降 =item 6. L 3.15 あるいは、それ以降 =back 2番から6番のものは、いずれかのCPANミラーから取得することができます。 =head1 インストール =over 2 =item 1. 全ての必要なものがインストールされ、動くかをチェックしてください。 =item 2. 'perl Makefile.PL; make instal1'を実行 =item 3. SQL*Plusセッションから$ORACLE_HOME/rdbms/admin/utlxplan.sqlを確実に 実行してください。このスクリプトは問い合わせ計画を説明するさい、 Oracleによって使用されるPLAN_TABLE を作成します。 =back =head1 使い方 シェル・プロンプトで"explain" あるいは "ora_explain"とタイプしてください。 メニューバーと"Query Plan"、"Query Step Details"、そして"SQL Editor"というラベルが ついた3つのフレームを持ったウィンドウが表示されます。ウィンドウの一番下には、 "Explain"、"Clear"そして"SQL Cache"というラベルがついた3つのボタンがついています。 ログイン・ダイアログも表示されます。それにはデータベース・ユーザ名、パスワード、 データベース・インスタンス名(SID)を入力してください。あなたが入力したパラメータは DBI->connectメソッドに渡されます。そのため何か問題があったら、DBIとDBD::Oracleの ドキュメントをご覧ください。 オプションで2つのコマンド行引数を2つまで与えることが出来ます。もし最初の 引数がユーザ名/パスワード@データベースの形式のものであれば、explainは これをOracleへのログインに使います。そうでなく、それがファイル名であれば、 それがSQLエディタにロードされます。もし2つの引数が与えられると、2番目のものを ファイル名であると考えます。 例: explain scott/tiger@DEMO query.sql explain / query.sql explain query.sql =head2 Explainの機能 メニューバーには2つのプルダウン・メニュー、"File"と"Help"が入っています。 "File"からはOracleへのログイン、カレント・スキーマの変更、Oracle SQLキャッシュの 内容の補足、ファイルからのSQLのロード、ファイルへのSQLの保存、そして プログラムの終了ができます。"Help"からはリリース情報を見ること、 このドキュメントを読むことができます。 "SQL Editor"フレームではSQLステートメントを編集することが出来ます。単なる1つの ステートメントでなければなりません - 複数のステートメントは許されていません。 利用できる編集するためのキーの説明については、Tk textウィジットのドキュメントを 参照してください。"File"プルダウン・メニューを使って、Textにロードしたり、 保存することができます。 一度、SQLステートメントを入力すれば、ウィンドウの一番下にある"Explain"ボタン が、そのステートメントのための問い合わせ計画を生成します。計画がツリー形式で "Query Plan"フレームに表示されます。計画の個別の"区間(=leg)"は、 計画ツリーの"+"と"-"の四角をクリックすることにより、展開したり折りたたんだり することができます。ツリーは"最も内側"あるいは"先頭"の問い合わせステップが 最も深くインデントされるように描かれます。つなげられた行は、それらの問い合わせ ステップ間の"親子"関係を示します。問い合わせ計画の意味のわかりやすい説明については、 関連するOracleのドキュメントをご覧ください。"Clear"ボタンはエディタと問い合わせ 計画ツリーのペインを空にします。 問合せ計画ペインの中の計画ステップをシングル・クリックすると、より その問合せステップについての詳細な情報が、問合せステップ詳細(Query Step Details) フレームに表示されます。この情報にはOracleのコスト、原則、返されるバイトの 見積りも含まれます。表示される厳密な情報はOracleのバージョンに依存します。 ここでもこれらのフィールドの意味についての詳細な情報は、Oracleのドキュメントを ご覧ください。 テーブルやインデックスを参照している計画ステップをダブルクリックすると、 テーブルやインデックスの定義をSQL*Plus 'desc' コマンドとよく似た形式で 表示するダイアログがポップアップされます。 表示されるダイアログには'インデックス'というボタンがついています。これを クリックすると、そのテーブルに定義されている全てのインデックスを表示するため テーブル・ダイアログを展開します。各カラムがインデックスを表し、数字は テーブルカラムがインデックスで現れる順番を定義します。インデックスの名前を 見つけるためには、インデックス・カラムの上にマウスを持っていってください。 シングル・クリックすると別のダイアログにインデックスの定義が表示されます。 テーブルを参照している計画ステップで右クリックすると、そのテーブルで利用できる 全てのインデックスのリストを表示するメニューがポップアップされます。 インデックスを選択すると、その定義がダイアログ・ボックスに表示されます。 =head2 SQLキャッシュ捕捉機能 explainウィンドウには、そのほかの機能を持っているボタンとともに、 "File"メニューに"SQL Cashe ..."というオプションがあります。これを選択すると 新しく、メニューバーと、"SQL Cache"、"SQL Statement Statistics"そして "SQL Selection Criterea"という3つのフレームが入っているトップレベル・ウィンドウが ポップアップされます。ウィンドウの一番下には"Capture SQL", "Explain"そして"Close" という3つのボタンがあります。 メニューバーには2つのプルダウン・メニュー"File"と"Help"があります。 "File"からはSQL Cacheペインの内容をファイルに保存し、 選択されたSQLステートメントをExplainウィンドウにコピーし、 Grabウィンドウをクローズすることができます。 "SQL Cache"フレームは現在Oracle SQLキャッシュにあるステートメントを表示します。 このウィンドウにカーソルを移動させると、各SQLステートメントが四角で囲まれ、 強調されます。SQL Cacheペインでステートメントをシングル・クリックすると、 そのステートメントを緑色で強調し、そのステートメントについてのより詳細な情報を SQL Statement Statisticsフレームに表示します。 SQL Cacheペインの内容全体を保存したければ、"File"メニューからこれを行う ことができます。 "SQL Selection Criterea"フレームからは、どのSQLステートメントに興味を持っているか、 どのようにソートしたいかを指定することができます。ステーメントを選択するために 使われるパターンは通常のperl正規表現です。一度、選択基準を定義しておけば、 "Captuer SQL"ボタンをクリックすると、SQLキャッシュから全てのマッチするステートメントを 読み込み、それらをトップ・フレームに表示します。 "SQL Cache"ペインでステートメントをダブルクリックすること、 "File"メニューから"Explain"を選択すること、あるいは"Explain"ボタンをクリック することは、現在、"SQL Cache"ペインで強調されているステートメントを、 そのステートメントのための問合せ計画を調べることができるよう、Explainウィンドウの SQL editorにコピーします。その捕捉されたステートメントを最初に実行した 人に、カレント・スキーマも変更されることに注意してください。 =head1 参考資料 このツールは、あなたが既にOracle問い合わせ計画を解析する方法を知っているものと 想定しています。このツールにより表示される情報の説明が必要であれば、 適切なOracleドキュメントを参照するべきです。情報は"概念"(="Concepts") および "Oracleチューニング"(="Oracle Tuning")マニュアルにあります。 "問い合わせ計画"(="Query plan")および"計画の説明"(="Explain plan")を探してみてください。 その他の便利な2つの情報源を以下に示します: Oracle Performance Tuning, 2nd ed. Mark Gurry and Peter Corrigan O'Reilly & Associates, Inc. ISBN 1-56592-237-9 Advanced Oracle Tuning and Administration Eyal Aronoff, Kevin Loney and Noorali Sonawalla Oracle Press (Osborne) ISBN 0-07-882241-6 =head1 サポート サポートの質問および提案はAlan.Burlison@uk.sun.comに送ることができます。 =head1 著作権および放棄生命(=COPYRIGHT AND DISCLAIMER) Copyright (c) 1999 Alan Burlison You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file, with the exception that it cannot be placed on a CD-ROM or similar media for commercial distribution without the prior approval of the author. This code is provided with no warranty of any kind, and is used entirely at your own risk. This code was written by the author as a private individual, and is in no way endorsed or warrantied by Sun Microsystems.