2010-01-27 75 views
28

我正在調整Oracle數據庫上的SQL查詢。我想確保在運行每個查詢之前清除所有緩存項目,以防止誤導性能結果。我清除出共享池(擺脫緩存的SQL /解釋計劃)和緩衝區高速緩存(擺脫緩存的數據)通過運行以下命令:如何清除Oracle中的所有緩存項目

alter system flush buffer_cache; 
alter system flush shared_pool; 

是否有更多我應該做的事情,或者這足夠嗎?

謝謝!

回答

3

你也應該收集統計信息 - 無論是您模式甚至整個數據庫:

begin 
    dbms_stats.gather_schema_stats('schema_name'); 
end; 

begin 
    dbms_stats.gather_database_stats; 
end; 

然後清除共享池。

4

請記住,操作系統和硬件也會執行緩存,從而導致結果偏斜。

+1

是的,即使在清除緩衝區緩存之後,當查詢運行速度比平常快時,這絕對是我想知道的。謝謝你的提示! – 2010-01-28 15:53:24

1

我會爭辯說,你會出現誤導結果,因爲你已經清除了所有的緩存。現實世界中的數據庫在其生命中一直處於這種狀態。 事實上,當性能測試,它通常是一個公認的慣例運行查詢多次,這樣您就可以看到緩存(和其他優化)的利益。