データベース技術や知識は、座学だけでなく「実際に手を動かして、実際に試して」理解を深めよう──。日本オラクルのデータベーススペシャリストが「新人をDBAに育てる際に使用する課題」をベースに、DBAがすぐ実践できる即効テクニックを紹介。今回は「高度なSQL実行計画を正しく取得するテクニック」を解説します。
皆さんこんにちは。日本オラクルの“しばちょう”こと、柴田長(しばたつかさ)です。
今回は、これまで解説してきたSQLの実行計画の取得方法よりもさらに高度な方法を2つ体験してみましょう。
いざというときに、今回紹介するようなコマンドをスラスラと入力して解決できると、以降、周囲から尊敬のまなざしで見られること間違いなしです。もちろん分析もできなければなりませんが、まずはコマンドを自分の指に記憶させてみてくださいね。
早速、第3回の演習を実行した直後のデータベース環境で、以下の演習にチャレンジしてみてください。
「SQL*Plus」から「TRY」ユーザーでデータベースに接続し、「dbms_xplan.display_cursor」ファンクションを使用して、第3回の演習2『SELECT文にコメントを追加して実行する』で実行したSELECT文(SQL_ID=2vrywhbx1jxtb, CHILD_NUMBER=0)の実行計画を表示させます。
$ sqlplus / as sysdba SQL> set linesize 100 pagesize 100 select * from table(DBMS_XPLAN.DISPLAY_CURSOR('2vrywhbx1jxtb', 0)); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------- SQL_ID 2vrywhbx1jxtb, child number 0 ------------------------------------- select /* practiceSQL1 */ COL1 || ' : ' || COL2 "Record" from TBL2 where ROWNUM <=3 Plan hash value: 2810601966 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 4 (100)| | |* 1 | COUNT STOPKEY | | | | | | | 2 | TABLE ACCESS FULL| TBL2 | 920K| 57M| 4 (50)| 00:00:01 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(ROWNUM<=3) Note ----- - dynamic sampling used for this statement (level=2)
「dbms_xplan.display_cursor」ファンクションは第2回の演習5『「dbms_xplan.display_cursor」ファンクションで原因を追及する』でも紹介しましたが、その際には実行計画の取得対象のSELECT文を実行した直後に引数なしの状態で「dbms_xplan.display_cursor」ファンクションを実行していました。今回はSQL_IDとCHILD_NUMBERを引数に設定することで、直前に対象のSELECT文を実行していない場合でも実行計画を取得できることを体験していただきました。設定すべきSQL_IDとCHILD_NUMBERの値については、第3回の演習3『V$SQLビューでSQL_IDとCHILD_NUMBERを確認する』で確認済みですね。
なお、各種PL/SQLパッケージのプロシージャやファンクションの詳細は、マニュアル「PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス」に記載されています。「DBMS_XPALNパッケージのDISPLAY_CURSORファンクション」の項を参照してください。大抵の場合、構文、パラメーター、使用上の注意、例が記載されています。特にこのファンクションの「format」パラメーターの指定の仕方次第では、さまざまな情報を出力させることが可能です。ぜひいろいろと試してみてください。
Copyright © ITmedia, Inc. All Rights Reserved.