我根據答案重寫了以下內容。如何找到哪些代碼正在消耗我的SQL Server連接池?
我有一個網站導致數據庫服務器上的高CPU問題到服務器變得不可用的地步。回收應用程序池可解決問題。根據服務器管理員http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en顯示,有一些線程活動大約一個小時。
與數據庫的交互非常簡單,並且在我們將Web表單路由添加到應用程序之前工作。
它們在整個應用程序中只包含類似這樣的代碼。 是的,這個代碼並不完美,但它不是這個代碼,這是我們添加路由之前的問題,沒有問題。
private string GetPublishedParagraphs()
{
string query, paragraphs = "";
try
{
m_sql_connection = new SqlConnection(m_base_page.ConnectionString());
query = "select * from PublishedParagraphs where IDDataContent_page='" + m_IDDataContent_page + "'";
SqlDataAdapter da = new SqlDataAdapter(query, m_sql_connection);
DataSet ds = new DataSet();
da.Fill(ds, "paragraph");
if (ds.Tables["paragraph"].Rows.Count > 0)
paragraphs = (string)ds.Tables["paragraph"].Rows[0]["paragraphs"];
ds.Dispose();
da.Dispose();
}
finally
{
m_sql_connection.Close();
}
paragraphs = paragraphs.Replace("™", "™");
return paragraphs;
}
連接字符串的樣子:
server_name; User ID=server_user; Password=server_password
我們爲你精心檢查,要打開數據庫,每次調用()之後是關閉()。 我們測量有通過觀察他們,因爲我們在本地運行應用程序和連接數不增加通過沒有打開的連接:
SELECT SPID,
STATUS,
PROGRAM_NAME,
LOGINAME=RTRIM(LOGINAME),
HOSTNAME,
CMD
FROM MASTER.DBO.SYSPROCESSES
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0
(但是,如果我們不這樣做的密切聯繫,有泄漏)
我們的應用程序與它工作時的區別在於通過web表單添加了asp.net路由。這也會調用數據庫,但在打開連接後再次關閉連接。
我們不確定還有什麼我們可以檢查的。 任何想法其他程序員?
ANSWER
我們通過查詢探查中發現的問題。這向我們展示了一個使用率很高的查詢。將查詢追溯回代碼顯示一遍又一遍地調用數據庫的無限循環。很難找到這個循環是由一個殭屍程序調用網頁上不再存在的頁面啓動的。
真的是UYJ788hh2NN您的密碼到數據庫? – 2010-07-01 01:27:38
不,它是一個虛擬的,只是想知道連接字符串本身是否有問題 – Petras 2010-07-01 01:50:37