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出発前の茅ヶ崎にて