Oracle10g Cost Base Optimizerにまつわる検証 その7
<Oracle10g Cost Base Optimizerにまつわる検証 その7>
~DBMS_STATSの変~
ペンネーム:りん
前回から引き続き、Oracle 9iとOracle 10gのシステム統計情報について検証
したいと思います。
できれば、先週のメルマガも参照しつつご覧になっていただけると読みやすい
と思います。
■検証
では、Oracle 9iから、システム統計情報を取得してみたいと思います。
SQL> EXECUTE DBMS_STATS.GATHER_SYSTEM_STATS(gathering_mode => 'INTERVAL', interval => 120, statown => 'SYSTEM'); PL/SQLプロシージャが正常に完了しました。
では、AUX_STATS$ビューに値が入っているか確認します。
SQL> select * from aux_stats$; SNAME PNAME PVAL1 PVAL2 --------------- ---------- ---------- -------------------- SYSSTATS_INFO STATUS COMPLETED SYSSTATS_INFO DSTART 12-02-2004 18:37 SYSSTATS_INFO DSTOP 12-02-2004 20:37 SYSSTATS_INFO FLAGS 0 SYSSTATS_MAIN SREADTIM 9.744 SYSSTATS_MAIN MREADTIM -1 SYSSTATS_MAIN CPUSPEED 572 SYSSTATS_MAIN MBRC -1 SYSSTATS_MAIN MAXTHR 730112 SYSSTATS_MAIN SLAVETHR -1 10件のレコードが存在します。
とりあえず、同じSQL文を実行し、コストを確認したいと思います。
実行計画 ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=49 Bytes=1274) 1 0 TABLE ACCESS (FULL) OF 'STATS_TEST' (Cost=8 Card=49 Bytes=1274)
コストが7→8へと変更されています。
DBMS_STATSの実行前、実行後のトレースファイルの内容を比較したいと思います。
IO-RSC :7→7 IO-RSP :7→7 CPU-RSC :0→1163416 CPU-RSP :0→1408466
というように変更されています。
CPUの負荷がコストを算出するのに影響していることがわかります。コストが
高くなるのはなんとなく嫌なんですがより正確なコスト計算を行えるというこ
とになります。
ところで、AUX_STATS$の見かたも整理しておきましょう
SYSSTATS_INFOには、DBMS_STATSの実行結果が表示されるようですが
SYSSTATS_MAINには、各計測値が入ります。
例えば、CPUSPEEDが572になっていますがこれは、Oracleが適当な処理を投げ
て計測した速さになります。
つまり、他のアプリケーションがCPUをたくさん使っていればそれだけ数値は
減るはずですよね。これについては後々検証したいと思います。
SREADTIMは、Block Read Timeの平均値で、MREADTIMはMulti Block Read Time
の平均値です。
共に単位はミリ秒です。
-1となってしまっているのは、計測できなかったのでしょうか。こちらも追っ
て検証したいと思います。
次週よりいよいよ、Oracle 10gから変更された部分などをチェックしていきた
いと思います。同じマシンに、Oracle9iR2とOracle10gをインストールしてあ
るので値に大きな差は出ないはずです。
少し短くなってしまいましたが、時間切れとなってしまいました。
今週はここまでです。
Oracle World出発前の茅ヶ崎にて