「高度なSQL実行計画の取得」を実践する:しばちょう先生の試して納得! DBAへの道(改)(4)(3/3 ページ)
データベース技術や知識は、座学だけでなく「実際に手を動かして、実際に試して」理解を深めよう──。日本オラクルのデータベーススペシャリストが「新人をDBAに育てる際に使用する課題」をベースに、DBAがすぐ実践できる即効テクニックを紹介。今回は「高度なSQL実行計画を正しく取得するテクニック」を解説します。
演習4:「MONITOR」ヒント句で強制的に監視対象にする
対象のSELECT文に「MONITOR」ヒント句を追加して実行し、再度「dbms_sqltune.report_sql_monitor」ファンクションを実行します。
$ sqlplus TRY/TRY12345 SQL> /* MONITORヒント句を付けて実行 */ set trimspool on set trim on set pages 0 select /*+ MONITOR */ /* practiceSQL2 */ COL1 || ' : ' || COL2 "Record" from TBL2 where ROWNUM <=3 ; /* 実行したSELECT文のSQL_IDを確認 */ connect / as sysdba set pagesize 100 linesize 120 col SQL_TEXT for a100 select SQL_ID, CHILD_NUMBER, SQL_TEXT from V$SQL where SQL_TEXT like 'select /*+ MONITOR%' ; SQL_ID CHILD_NUMBER SQL_TEXT ------------- ------------ ---------------------------------------------------------------------------------------------------- crf5a18jws344 0 select /*+ MONITOR */ /* practiceSQL1 */ COL1 || ' : ' || COL2 "Record" from TBL2 where ROWNUM <=3 /* リアルタイムSQL監視のアクティブレポートを生成 */ set linesize 1000 set long 1000000 set longchunksize 1000000 spool sqlmon_active.html select dbms_sqltune.report_sql_monitor(sql_id=>'crf5a18jws344', type=>'active') from dual; spool off
このように、監視したいSQL文内に「MONITOR」ヒント句を埋め込むことで強制的に監視させることが可能です。
逆に監視対象から外したい場合には、「NO_MONITOR」ヒントを使用します。ただし「MONITOR」ヒントは、初期化パラメーター「CONTROL_MANAGEMENT_PACK_ACCESS」の値が「DIAGNOSTIC+TUNING」に設定されている場合にのみ有効になることに注意してください。
再度取得したHTMLファイルをブラウザで開いてください。以下のようにレポートが表示されれば成功です(図2)。今回はSQLの実行時間が非常に短いので情報を取得できていないページもありますが、そこはご了承ください。時間がある方は、時間を要するSQL文を使って復習をしてみてください。
今回は、より高度なSQLの実行計画の取得方法を2つ紹介しました。
前回解説した動的パフォーマンスビュー「V$SQL」から取得したSQL_IDやCHILD_NUMBERを用いれば、SQLの実行直後だけではなく、パフォーマンス問題が発生して現場へ駆け付けるような場面においても、過去にさかのぼって実行計画を取得できることをお分かりいただけたと思います(もちろん、Oracle Enterprise Managerの管理画面でもリアルタイムSQL監視レポートを確認できるので、そちらも合わせて利用するのが良いでしょう)。
それではまた次回お会いしましょう!
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の効率的な使い方をエッセンスにしてお伝えします。