2016-05-13 12 views
4

我想知道如何在調整前和調整後測試正確的sqls。 但一旦我執行原始的SQL,我得到的結果太快,調諧的SQL。如何測試調優的oracle sql以及如何清除清除系統/硬件緩衝區?

我發現下面...

How to clear all cached items in Oracle

我真的臉紅數據緩衝區高速緩存和共享池,但它仍然沒有奏效。 我想這個問題的答案與我想知道的更多有關: 請記住,操作系統和硬件也會執行緩存,這會導致您的結果偏差。

Oracle的版本是11g,服務器是HP-UX 11.31。

如果服務器是Linux的,我可能已經試過清除使用「/proc/sys/vm/drop_caches'.(I'm緩衝區不知道它會作品)

我在尋找相當長的時間對於這個問題。有沒有人有這種問題?

感謝

+0

嘗試在flush之前和之後查詢V $ BH視圖以檢查對象是否已被刷新。如果有另一個會話查詢相同的塊,你會發現它們「粘性」。 「選擇o.object_name,COUNT(*)NUMBER_OF_BLOCKS FROM DBA_OBJECTS O,V $ BH BH WHERE o.data_object_id = bh.OBJD AND o.owner!= 'SYS' GROUP BY o.object_Name ORDER BY COUNT( *);」 – TenG

回答

0

如果您的查詢是這樣的結果在文件系統中,你的描述建議被緩存,則該查詢可能不是一個「沉重的擊球手」的整體。但是,如果您單獨進行測試,並且數據庫沒有太多活動,那麼當SQL在生產環境中運行時,性能可能會受到影響。

您可以通過幾件事來確定哪個版本的兩個查詢更好。實際上,整本書都是關於這個話題的。但總結如下:

開始之前,請確保表和索引的統計數據是最新的。

  • 查看SQL在多大程度上執行的事情。如果它每天運行一次或兩次,並且需要2秒鐘運行,請不要試圖調整。
  • 在兩者上執行explain plan並查看估計的成本和步驟數。
  • 爲優化程序步驟和執行統計信息啓用跟蹤並進行比較。