2008-12-16 68 views
4

有很多關於SQL Server中的緩存執行計劃如何取代存儲過程的大部分性能優勢而非動態SQL的很多信息。但是,我還沒有發現太多關於Oracle數據庫是否也是如此。有沒有人有關於Oracle中動態sql處理信息的信息或指針?最好是真實的表現數字,而不是一般的「sp's good」/「sp's bad」討論。動態SQL與Oracle上的存儲過程的性能

+0

您需要澄清一下您的術語,因爲我們不會將每個SQL都稱爲「動態SQL」,並且您可以在存儲過程中使用「動態SQL」。 我假設你所指的動態SQL作爲客戶端SQL的問題? – 2008-12-17 01:25:38

回答

7

Oracle也有一個緩存執行工具。查詢被哈希並匹配到計劃,如果它擊中散列表。您也可以使用此機制強制執行特定查詢的計劃。與SQL Server一樣,您需要使用參數化查詢來執行此操作,而不是將值替換爲字符串 - 因爲後者會生成不同的哈希值。

3

Oracle從不需要用於緩存計劃的存儲過程,所以這就是爲什麼沒有太多關於它的說法。存儲過程的主要性能優勢是光標高速緩存。我們的假設是,如果會話執行過一次PL/SQL,那麼會話很有可能會再次運行它。所以當存儲的PL/SQL的代碼告訴會話關閉一個遊標時,它通常不會立即關閉它。相反,它會保持它的分配,直到代碼顯示「我需要打開這個遊標(再次)」或者它需要內存。

這樣做的主要好處是在OLTP處理中,但是實際數量在站點之間會有很大差異。但有一個看看「的分析是分析是某個解析」的文章在這裏: http://www.oracle.com/technology/oramag/oracle/07-jul/o47asktom.html