Oracle 11g検証 新機能:SPMって何? その6
<Oracle 11g検証 第3弾 新機能:SPMって何? その6>
ペンネーム: クリープ
さて、SPMについていろいろ検証してきましたが、今週でいよいよ最終回です。
SPMがなんとなく使えそう、ということはわかりましたが、やはりこの機能を
使用した時のパフォーマンスが一番気になるところではないでしょうか?
ということで、最後にSPMのパフォーマンスについてみてみることにしましょ
う。
■■■■■概要■■■■■
1)SPMのパフォーマンスについて
2)SPMパフォーマンス検証
■環境
RedHat Enterprise Linux 5
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – Production
1)SPMのパフォーマンスについて
SPM検証の第1回でOPTIMIZER_CAPTURE_SQL_PLAN_BASELINESをTRUEに設定しまし
た。このパラメータをTRUEに設定していると、実行されたSQL文の実行計画が
SQL計画ベースラインに自動的にサンプリングされます。サンプリングされる
ということは、サンプリング時のオーバーヘッドが発生していることになりま
す。実際、SPM検証の第4回では、再帰SQL文で複数のテーブルにINSERTされて
いたように、SPMを使用する上でこのような負荷は気になるところです。
ということで、最終回として、自動実行計画取得時のパフォーマンスについて
検証してみましょう。
2)SPMパフォーマンス検証
それでは早速検証してみることにします。
テストケースは以下の通り。
■テストケース
1.通常ケース
・OPTIMIZER_CAPTURE_SQL_PLAN_BASELINESはFALSE
・10000件のSELECT文実行
2.SQL計画ベースラインに実行計画が格納されるケース
・OPTIMIZER_CAPTURE_SQL_PLAN_BASELINESはTRUE
・10000件のSELECT文実行
※SELECT実行時、SQL計画ベースラインに10000件の実行計画が格納
3.SQL計画ベースラインに実行計画が格納済みのケース
・OPTIMIZER_CAPTURE_SQL_PLAN_BASELINESはTRUE
・実行計画が格納済のSELECT文を10000件実行
※全てのケースでライブラリキャッシュのフラッシュを実行
今回のテストケースは、2のケースは全てのSQL文の実行計画を格納してしま
うのでパフォーマンス的には最悪のケースであり、3は全てのSELECT文の実行
計画が格納されているのでパフォーマンス的には最高のケースであるというこ
とができます。
以下、テストで使用したスクリプトになります。
■テストシェルスクリプト
[oracle@localhost ~]$ vi perf_test.sh #!/bin/sh time sqlplus test/test < /dev/null @perf_test.sql exit _EOF_ exit
■SQL
[oracle@localhost ~]$ vi perf_test.sql SELECT seq_no FROM test_spm WHERE seq_no = 0; SELECT seq_no FROM test_spm WHERE seq_no = 1; SELECT seq_no FROM test_spm WHERE seq_no = 2; SELECT seq_no FROM test_spm WHERE seq_no = 3; . . . SELECT seq_no FROM test_spm WHERE seq_no = 9999;
■SQL計画ベースライン削除SQL
DECLARE i NATURAL; cursor cur_spm is select distinct sql_handle from dba_sql_plan_baselines; BEGIN FOR r_spm IN cur_spm LOOP i := dbms_spm.drop_sql_plan_baseline(r_spm.sql_handle); END LOOP; END; /
では、早速テストを実行してみましょう。
まずは、通常ケースで実行!
■1.通常ケース
1回目 real 0m12.496s user 0m1.496s sys 0m0.280s 2回目 real 0m12.063s user 0m1.148s sys 0m0.196s 3回目 real 0m12.144s user 0m1.212s sys 0m0.188s
3回実行した平均は約12秒でした。この時間をベースにその他のケースと比較
することになります。
では次にSQL計画ベースラインに実行計画が格納されるケースを実行!
■2.SQL計画ベースラインに実行計画が格納されるケース
1回目
real 4m33.481s user 0m0.176s sys 0m0.084s 2回目 real 4m18.627s user 0m0.344s sys 0m0.056s 3回目 real 4m47.122s user 0m0.328s sys 0m0.056s
※テストの間でSQL計画ベースライン削除SQLを実行
平均で4分43秒、通常ケースと比べて約23倍の処理時間がかかってしまいまし
た。やはり、SYSAUX表領域への書き込みによるオーバーヘッドが影響してい
るようです。
今回の検証環境はかなり非力なことが大きく影響しているとは思いますが、
そのことを考慮してもやはりパフォーマンスへの影響は少なくないといえます。
最後に、既にSQL計画ベースラインに実行計画が格納されているケースを確認
してみましょう!
■3.SQL計画ベースラインに実行計画が格納済みのケース
1回目 real 0m18.386s user 0m1.780s sys 0m0.276s 2回目 real 0m17.585s user 0m1.572s sys 0m0.324s 3回目 real 0m17.952s user 0m1.564s sys 0m0.216s
平均で約18秒前後と、通常ケースより若干遅くなっていました。
今回のテストケースでは、実行計画を参照する為にSYSAUX表領域にアクセスし
ていますが、この時のオーバーヘッドが影響して通常ケースよりも若干遅く
なっているようです。
今回、OPTIMIZER_CAPTURE_SQL_PLAN_BASELINESをTRUEに設定した時にパフォー
マンスとして最悪のケース(2のケース)と最高のケース(3のケース)を検
証しました。
2のような常にSQL計画ベースライン上に実行計画が格納されるようなケース
はOPTIMIZER_CAPTURE_SQL_PLAN_BASELINESのパラメータをTRUEに設定した直後
が考えられます。OPTIMIZER_CAPTURE_SQL_PLAN_BASELINESをFALSEからTRUEに
変更する際には注意が必要と言えます。
以上、6回に渡ってSPMを検証してきましたが、今週でSPMの検証は終了です。
SPM検証は今回で終了ですが、11gの検証は来週以降も引き続きます。
それでは、また次の検証で会いましょう。
春眠暁を覚えず、な今日この頃
恵比寿にて