我正在調整Oracle數據庫上的SQL查詢。我想確保在運行每個查詢之前清除所有緩存項目,以防止誤導性能結果。我清除出共享池(擺脫緩存的SQL /解釋計劃)和緩衝區高速緩存(擺脫緩存的數據)通過運行以下命令:如何清除Oracle中的所有緩存項目
alter system flush buffer_cache;
alter system flush shared_pool;
是否有更多我應該做的事情,或者這足夠嗎?
謝謝!
我正在調整Oracle數據庫上的SQL查詢。我想確保在運行每個查詢之前清除所有緩存項目,以防止誤導性能結果。我清除出共享池(擺脫緩存的SQL /解釋計劃)和緩衝區高速緩存(擺脫緩存的數據)通過運行以下命令:如何清除Oracle中的所有緩存項目
alter system flush buffer_cache;
alter system flush shared_pool;
是否有更多我應該做的事情,或者這足夠嗎?
謝謝!
沖洗共享池應該這樣做,但湯姆凱特列出下面爲什麼你可能不會讓你在某些情況下,期待的結果幾個原因:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6349391411093
你也應該收集統計信息 - 無論是您模式甚至整個數據庫:
begin
dbms_stats.gather_schema_stats('schema_name');
end;
或
begin
dbms_stats.gather_database_stats;
end;
然後清除共享池。
請記住,操作系統和硬件也會執行緩存,從而導致結果偏斜。
是的,即使在清除緩衝區緩存之後,當查詢運行速度比平常快時,這絕對是我想知道的。謝謝你的提示! – 2010-01-28 15:53:24
我會爭辯說,你會出現誤導結果,因爲你已經清除了所有的緩存。現實世界中的數據庫在其生命中一直處於這種狀態。 事實上,當性能測試,它通常是一個公認的慣例運行查詢多次,這樣您就可以看到緩存(和其他優化)的利益。
哇,這是一個非常好的信息很好的鏈接。感謝分享! – 2010-01-27 15:00:07