「高度なSQL実行計画の取得」を実践する:しばちょう先生の試して納得! DBAへの道(改)(4)(1/3 ページ)
データベース技術や知識は、座学だけでなく「実際に手を動かして、実際に試して」理解を深めよう──。日本オラクルのデータベーススペシャリストが「新人をDBAに育てる際に使用する課題」をベースに、DBAがすぐ実践できる即効テクニックを紹介。今回は「高度なSQL実行計画を正しく取得するテクニック」を解説します。
皆さんこんにちは。日本オラクルの“しばちょう”こと、柴田長(しばたつかさ)です。
今回は、これまで解説してきたSQLの実行計画の取得方法よりもさらに高度な方法を2つ体験してみましょう。
いざというときに、今回紹介するようなコマンドをスラスラと入力して解決できると、以降、周囲から尊敬のまなざしで見られること間違いなしです。もちろん分析もできなければなりませんが、まずはコマンドを自分の指に記憶させてみてくださいね。
早速、第3回の演習を実行した直後のデータベース環境で、以下の演習にチャレンジしてみてください。
演習1:「dbms_xplan.display_cursor」ファンクションで特定SQLの実行計画を表示する
「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.
関連記事
- 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】 - 障害発生! 問題切り分けはスピード勝負
Oracleデータベースの運用管理者は、突発的に直面するパフォーマンス障害にどうやって対処したらよいか。本連載は、非常に複雑なOracleのアーキテクチャに頭を悩ます管理者に向け、短時間で問題を切り分け、対処法を見つけるノウハウを紹介する。対象とするバージョンはOracle8から9iまでを基本とし、10gの情報は随時加えていく。(編集局) - パフォーマンス向上の最短コースを知る
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局) - SQL実践講座
SQLは、データを操作するために非常に簡単な構文で構成されているように見えます。ところが実際に使い込んでいくと、一見簡単に取得できるように見えるデータが取得できない場面にぶち当たることもあります。こういった場面のために、SQLの効率的な使い方をエッセンスにしてお伝えします。