使用Oracle的ODP.NET庫,我正在處理的應用程序需要執行兩種不同類型的查詢,其中一種類型可能相對較慢,但另一種類型的查詢速度要快。我繼承的當前應用程序代碼完全禁用連接池,併爲「快速」查詢保留特定的連接對象,這對於此目的非常有用,因爲如果第一次調用的時間超過X毫秒,我們就可以切換到另一個打開的連接,提醒用戶如果第二次通話不夠快,數據沒有足夠快地返回。單個連接的ODP.NET連接池關閉?
與此同時,更改連接字符串以啓用池化操作後,我們運行的常規查詢返回的速度要快得多,因此使用池化查詢會更好。
有沒有一種方法可以爲大多數目的啓用池,但禁用它的特定連接對象?或者它會更容易一些(因爲我們已經有了基本的代碼來爲關鍵查詢「彙集」兩個連接)來擴展現有的代碼,以通過一般查詢的連接對象的小集合進行輪換,並保持兩個其他連接分開對於更關鍵的查詢?
我認爲你並不是想通過煙霧來取代火焰。在連接對象之間切換會導致代碼難以理解,並且該解決方案會增加代碼的複雜性(維護這些連接)。在一個項目中,我們發現計算執行計劃花了很長時間,我們認爲應該將這些執行計劃存儲到數據庫中,幾周後我們意識到左外連接是慢查詢和消除這些問題的真正原因。 – Mino
現有的代碼在任務內部運行查詢,因此使用不同的連接運行另一個任務很容易通過簡短的'//過了很長時間,再次嘗試不同的連接'來解釋。就實際查詢而言,我無法以任何方式對其進行優化,幸運的是,它通常返回的速度比我們的閾值快大約10倍。如果沒有,我們使用新連接從羣集中獲取響應相同TNS名稱的空閒服務器(根據DBA強大的「建議」),這通常可以解決問題。 – Amazingant
您是否檢查過此網站? http://www.oracle.com/technetwork/issue-archive/2006/06-jul/o46odp-097508。html – Mino