2011-01-27 50 views
2

我有一個基於ASP.net的應用程序。SQL CPU高 - SqlConnection未關閉 - 相關?

上的SQL Server框中的CPU是不斷〜90 - 100%

有很多inneficient查詢,我目前的工作,然而,從以前的編碼器,他從來不看代碼的似乎關閉(或處置)的SqlConnection的

當我運行folloing查詢,我得到大約450個連接,是根據 MASTER.DBO.SYSPROCESSES WHERE 「等待命令」

SELECT COUNT(*) DB_NAME(DBID)= 'CroCMS'AND DBID!= 0 AND cmd ='AWAITING COMMAND'

這是否可能導致問題?

我讀到這,它似乎涉及: http://www.pythian.com/news/1270/sql-server-understanding-and-controlling-connection-pooling-fragmentation/

我們也得到了很多超時,啓用複製特別是當.. 我不知道這是否是相關的..已禁用複製(事務性)現在看起來好像.. (該服務器是我們在辦公室數據庫服務器的用戶)

會處置SQL連接對象的幫助嗎?

回答

1

當你完成它時,你應該總是處置命令對象。這樣可以更好地使用連接池。

easist是使用使用說明。

using (
       var sqlCommand = new SqlCommand(
        "storedprocname", 
        new SqlConnection("connectionstring")) 
        { CommandType = CommandType.StoredProcedure }) 
      { 
      // do what you should.. setting params executing etc etc. 

} 
+0

我相信這段代碼正在創建一個連接,但不會處理它。即首先創建SqlConnection並將其包裝在「使用」中。 – 2011-06-25 06:45:11

2

是的,處置它們。否則,現在就忽略它們。可能這個池是一樣大的,因爲這些陳述很慢。我會更多的建議:

  • 修復聲明。
  • 檢查應用程序,它只使用每個請求的一個連接(即不能同時打開多個連接)。

如果在優化SQL之後問題沒有得到改善 - 您可以重新訪問該池。