簡體   English   中英

優化SQL連接性能?

[英]Optimizing SQL connection performance?

這不是關於優化SQL命令的問題。 我想知道有哪些方法可以確保SQL連接保持打開並准備好盡可能高效地處理命令。

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

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

您是否檢查過程的執行計划。 我認為執行計划被加載到服務器上的內存中,然后在一段時間后或根據過程中訪問的表等進行清除。 我們曾經遇到過這樣的情況,即簡化存儲過程(可能會拆分它們)會減少數據庫服務器在計算計划時必須完成的工作量......並最終減少第一次調用過程時...您可以發出命令強制存儲過程每次重新編譯以測試是否縮短了初始調用時間...我們遇到過這樣的情況:存儲過程的復雜性導致數據庫服務器不斷地根據不同的參數重新編譯,從而大大減慢了它的速度,拆分SP或將大型select語句簡化為多個更新語句等有很大幫助。

其他想法可能會經常間歇性地調用一個簡單的getDate()或類似的東西,以便sql服務器清醒(希望有意義)......就像在IIS中將asp.net應用程序保存在內存中一樣。

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

您可以將連接字符串中的此值調整為1或更多:

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

在MSDN中查看有關這些選項的更多信息。

你不關閉它就保持開放。 :)但這不建議,因為連接池將為您處理連接管理。 你啟用它了嗎?

默認情況下,ADO .NET中啟用了連接池。 這將通過應用程序使用的連接字符串。 有關使用SQL Server連接池的詳細信息

如果您使用多個數據庫連接,則可能更有效。 擁有一個數據庫連接意味着最好的訪問速度總是會被順序限制。 有> 1個連接意味着你的編譯器有機會優化並發訪問。 我猜你在使用.NET?

此外,如果您重復發出相同的SQL語句,您的數據庫服務器可能會在短時間內緩存結果,因此可以更快地返回結果集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM