我們的IT部門最近受到我們IT部門的譴責(運行良好),因爲我們的查詢具有破壞數據庫穩定性和/或崩潰的實際可能性,因此運行查詢的成本非常高。我們都不是DBA的;只是研究人員對數據庫編寫和執行查詢,我可能是唯一一個在譴責之前查看解釋計劃的人。查詢成本與執行速度+並行度
我們被告知,超過100的查詢成本應該非常少見,並且不應該運行超過1000的成本查詢。我遇到的問題是成本似乎與執行時間沒有關係,而且我在優化查詢時失去了生產力。
作爲一個例子,我有一個查詢在5秒鐘內執行,費用爲10844.我重寫了查詢以使用包含我需要的大部分信息的視圖,並將成本降至109,但檢索相同結果的新查詢需要40秒才能運行。我發現了一個問題,在這裏與一個可能的解釋:
Measuring Query Performance : "Execution Plan Query Cost" vs "Time Taken"
這個問題使我並行提示。我在成本10884查詢中嘗試使用/*+ no_parallel*/
,但成本沒有變化,執行時間也沒有變化,所以我不確定並行性是更快執行時間還是更高成本的解釋。然後,我嘗試使用/*+ parallel(n)*/
提示,並發現n
的值越高,查詢的成本就越低。在成本10844查詢的情況下,我發現/*+ parallel(140)*/
將成本降至97,執行時間僅略有增加。
這似乎是一個理想的「欺騙」,以滿足我們的IT部門提出的要求,但後來我讀了這一點:
本文包含了這樣一句話:
並行執行可以使單個操作能夠利用所有系統資源。
所以,我的問題是:
我是否實際使用/*+ parallel(n)*/
暗示具有非常高的並行度將服務器上的資源較爲緊張,即使我降低了成本?
假設沒有並行性,執行速度是比成本更好的資源使用衡量標準嗎?
什麼的,爲什麼業務部門往往建立了自己的數據庫,以繞過它限制一個很好的解釋。 – 2014-09-03 21:16:04