2009-07-03 111 views
1

這不是關於優化SQL命令的問題。我想知道確保SQL連接保持打開並準備好儘可能高效地處理命令的方式。優化SQL連接性能?

我現在看到的是我可以執行一個SQL命令,該命令需要約1秒,額外的執行將花費約300毫秒。這是之前對SQL服務器執行的命令(來自另一個應用程序實例)......因此,在此應用程序初始執行之前,SQL緩存應完全填充以執行查詢。只要我不斷重新執行查詢,我會看到大約300ms的時間,但是如果我將應用程序閒置5-10分鐘並返回,則下一個請求將回到〜1s(與初始請求相同)。

有沒有辦法通過連接字符串或SqlConnection上的某些屬性指示框架保持連接水合並準備好有效地處理查詢?

回答

0

由於不關閉它而使其保持打開狀態。 :)但這不是通知,因爲連接池將爲您處理連接管理。你有它啓用?

+0

默認啓用。 – 2009-07-07 00:36:37

2

您是否檢查過程的執行計劃?我認爲執行計劃會被加載到服務器的內存中,然後在某段時間之後清除或取決於過程中訪問的表等。我們曾經有過簡化存儲過程(可能會將它們分開)的情況,從而減少了數據庫服務器在計算計劃時所需執行的工作量......並最終減少了第一次調用過程的時間......您可以發出命令強制存儲過程每次重新編譯以測試您是否正在縮短初始調用時間... 我們遇到過存儲過程的複雜性使得數據庫服務器不斷需要根據不同的參數進行重新編譯的情況,這些參數大大降低了速度,將SP分解或將大型選擇語句簡化爲多個更新語句等都有相當大的幫助。

其他想法也許間歇性地每隔一段時間間歇地調用一個簡單的getDate()或類似的東西,這樣SQL服務器就會喚醒(希望有意義)......就像在IIS中將內存保存在內存中一樣。

0

如果您使用多個數據庫連接,它可能會更有效。擁有一個數據庫連接意味着最佳的訪問速度始終受到順序限制。而> 1的連接意味着你的編譯器有機會優化併發訪問。我想你正在使用.NET?

此外,如果你多次發出相同的SQL語句,它可以將數據庫服務器緩存結果的時間很短,因此使結果集快速返還..

1

打開連接的默認值在.NET連接池中爲零。

您可以在連接字符串中該值調整爲1個或多個:

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1" 

查看更多有關這些options in MSDN