Oracle 11g検証 新機能:SPMって何? その2

投稿日:

<Oracle 11g検証 第3弾 新機能:SPMって何? その2>
ペンネーム: クリープ

先週のバレンタインデーもひっそりと過ぎ、2月のイベントはこれで終わり、
次のイベントは3月のひな祭り。。。

って、ちょっと待った!
ひな祭りの前に大きなイベントがあります!

来る2/26にグランドプリンスホテル赤坂でInsight Worldという弊社イベント
が開催されます。当日はOracleの技術情報や弊社製品のご紹介だけでなく、
F1で大活躍した片山右京氏の講演や、QWEENのトリビュートバンドKWEENによ
るライブなど、見所満載のイベントとなっています。
メルマガでしかインサイトを知らない!という方でももちろん参加可能です
ので、興味あるセッションがあれば、是非足を運んで下さい。

↓詳細は、こちらをチェック!
https://old.insight-tec.com/news/seminar/iw080226.html

宣伝はこれくらいにして、今週もSPMについて検証していきます。
今週は、先週確認できなかった実行計画の登録を実施してみましょう。

■■■■■概要■■■■■
1)SPMを使ってみよう!
1.実行計画を取得
⇒2.取得した実行計画とは異なるものを保留
⇒3.保留された実行計画を検証し、承認/拒否を判断
※.「⇒」は今週作業予定項目

■環境
RedHatLinux ES4 Update 5
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – Production

1)SPMを使ってみよう!
1.実行計画を取得
⇒2.取得した実行計画とは異なるものを保留
3.保留された実行計画を検証し、承認/拒否を判断

前回は、以下SQL文を実行して、SPMリポジトリ(SQL Management Base)にフ
ルスキャンの実行計画が格納されたところまで確認しました。

SQL> select * from test_spm where seq_no = 1;

今回は、前回の実行計画とは異なる実行計画をSPMリポジトリに保存してみま
しょう。
上記SELECT文は前回フルスキャンだったので、今回はインデックススキャンに
なるようにpk_noにインデックスを作成して実行してみましょう。

SQL> create index idx_test_spm on test_spm(seq_no);

Index created.

SQL> BEGIN
  2    DBMS_STATS.GATHER_INDEX_STATS(
  3       ownname      => 'TEST'
  4      ,indname      => 'IDX_TEST_SPM'
  5    );
  6  END;
  7  /

PL/SQL procedure successfully completed.

SQL> set autotrace trace
SQL> select * from test_spm where seq_no = 1;


Execution Plan
----------------------------------------------------------
Plan hash value: 1145642998

------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |     1 |     5 |     7   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| TEST_SPM |     1 |     5 |     7   (0)| 00:00:01 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("SEQ_NO"=1)

Note