2014-07-11 57 views
0

在Oracle 10g中,我有一個SQL,它現在可以更快地執行(大約30-40分鐘左右)。當兩天前執行相同的SQL時,SQL完成需要大約2.5小時。我認爲查詢的執行計劃可能已經改變。但事實並非如此。 兩個執行計劃匹配。所以在DBA的幫助下,我得到了生成的AWR報告來查找期間的數據庫活動。果然,這個長時間運行的查詢與其他一些查詢一起出現。在AWR中,這個查詢以大量緩衝區獲取,磁盤讀取列表爲特徵,但至少有四個其他查詢甚至更高(它們共佔98%)。實際上,這兩個列表中的頂級查詢大約佔緩存的50%,而磁盤佔80%,而我的分別只佔2%和0.9%。我的查詢在任何其他列表中都沒有,包括CPU時間和Parsed調用。SQL的性能基於同時執行的其他查詢的性能 - AWR

所以我的問題是否有可能大量的緩衝區獲取和其他查詢磁盤讀取影響我的查詢的性能?

回答

3

絕對如此。沒有深入數據庫設計的深入,數據庫系統就擁有一堆共享資源。

最大的是數據頁面。這些在服務器中進行維護併爲查詢提供數據。例如,如果您正在多次讀取表格,那麼當頁面已經在內存中時,第二次讀取會更有效得多。如果其他查詢正在使用頁面緩存,則緩存中的頁面數量會減少 - 並且您的查詢更有可能需要從磁盤讀取。

當然,也可能有直接的爭用。多個查詢可能試圖同時從磁盤獲取數據 - 而且您的I/O調用最終可能會延遲到隊列中。

也可以有更微妙的交互。數據庫引擎的一個重要優化是「提前閱讀」。也就是說,如果您閱讀了一個數據頁面,那麼您可能還需要下一個數據頁面。當引擎正在處理內存中的數據時,I/O系統可以熄滅並取出下一個。

好吧,如果你有很多查詢在同一時間運行,引擎可能沒有帶寬來預讀你的頁面。

這些只是緩衝和其他查詢如何影響性能的一些示例。但答案是一個響亮的「是」。其他查詢可能會影響查詢的性能。

+0

感謝您的回覆。這確實很有意義。 – toddlermenot