オラクルは会議室で動いてんじゃな〜〜イ。統計情報で動いてんだ! Tweet
と少々無理矢理なタイトル付けてみました:) 今回はチューニングはチューニングでも、statspack.snap()のチューニングのお話。
注)表現はそれなりに脚色してありますw
ある日のこと。
大トラブルなんです〜(こういう人、うまくいってないプロジェクトにはよくいます。全然”大”じゃないのに、もう口癖なんでしょうねw)
statspack.snap()がものすごく遅いんです! なんとかなりませんか?
ん〜〜〜、で、状況を教えてください。
PERFSTAT>
PERFSTAT> exec statspack.snap(i_snap_level=>7,i_executions_th=>0);
PL/SQLプロシージャが正常に完了しました。
経過: 00:00:31.46
・・・・中略・・・・
PERFSTAT> exec statspack.snap(i_snap_level=>7,i_executions_th=>0);
PL/SQLプロシージャが正常に完了しました。
経過: 00:06:28.02
説明によると、こんな状況になっていたらしい。最初は30秒ぐらいで終わっていたのに、ここ最近は5分以上になり今日はついに6分超えたとか。
で……statspack.snap()の時間がかかってて試験の消化に支障でてんですよね…とか、
マシン貧弱だからな…とか、
と打ち合わせでも話題になることしばしば…
で、この状態になってからやっと、訪ねてきたわけね.
・・・・マシン環境について、しばし歓談タイム〜・・・・
話していて気づいた!
あ!、その試験環境って、統計情報の自動収集は止められてますよね。しかも試験する時に取得している統計情報って試験用のユーザだけ統計情報収集していますよね〜。
あれだ!、 感のいいかあなたなら気づきましたよね。ね。ね。:)
次のディクショナリを見れば一億目瞭然! :)
PERFSTAT> select table_name,num_rows,stale_stats,last_analyzed from user_tab_statistics;
TABLE_NAME NUM_ROWS STA LAST_ANA
------------------------------ ---------- --- --------
STATS$BUFFERED_QUEUES
STATS$BUFFERED_SUBSCRIBERS
STATS$BUFFER_POOL_STATISTICS
STATS$CR_BLOCK_SERVER
STATS$CURRENT_BLOCK_SERVER
STATS$DATABASE_INSTANCE
STATS$DB_CACHE_ADVICE
STATS$DLM_MISC
STATS$DYNAMIC_REMASTER_STATS
STATS$ENQUEUE_STATISTICS
STATS$EVENT_HISTOGRAM
・・・・中略・・・・
STATS$STREAMS_POOL_ADVICE
STATS$SYSSTAT
STATS$SYSTEM_EVENT
STATS$SYS_TIME_MODEL
STATS$TEMPSTATXS
STATS$TEMP_SQLSTATS
STATS$THREAD
STATS$TIME_MODEL_STATNAME
STATS$UNDOSTAT
STATS$WAITSTAT
72行が選択されました。
じゃ〜、統計情報収集しましょーよー、ちゃんと!
23:58:46 PERFSTAT> execdbms_stats.gather_schema_stats(ownname=>'PERFSTAT',no_invalidate=>false,cascade=>true);
PL/SQLプロシージャが正常に完了しました。
経過: 00:00:04.02
試してみて!、 staspack.snap()を! ね! 前よりすげー速くなった!
23:58:50 PERFSTAT> exec statspack.snap(i_snap_level=>7,i_executions_th=>0);
PL/SQLプロシージャが正常に完了しました。
経過: 00:00:01.38
STATSPACK.SNAP()内で実行されてるSQL文にも統計情報は必要ですよーーーーーーーーーーーーと。
ごれぐらい”ー”付けてればわかってくれるかなー:)
一発ネタは、これにて FIN
| 固定リンク | 0


コメント