0

不是數據庫管理員(甚至不是數據庫管理員),我收到抱怨說我寫了一段代碼在數據庫中留下了「睡眠連接」。睡眠連接在SQL Server中

我的代碼是Java和使用Apache下議院DBCP連接池。我也使用Spring的JdbcTemplate來管理連接的狀態,所以不要關閉連接是不可能的(因爲庫對我來說是這樣做的)。

我的主要問題是,從一個DBA的角度來看,可以將這些連接會導致服務中斷或性能不佳?

This question是相關的,目前的設置都留給他們在那裏(在游泳池無限有功/無連接)。

回答

1

真的,回答你的問題,這些「沉睡」的連接數量的想法是很好的。這個服務器的主要目的是爲您的應用程序提供服務,還是您的應用程序是衆多應用程序之一也很重要。同樣重要的是您的應用程序是否有多個實例(例如,在多個Web服務器上),還是隻有一個。

以我的經驗,很少有沒有對現代硬件的空閒連接相關的,只要你沒有達到成百的開銷。這就是說,看着你以前的問題,讓游泳池產生無數的連接聽起來不明智 - 我建議設置一個上限,即使你設置了一個上限。

我可以從至少一個痛苦的情況告訴你泄漏連接池,具有到一個SQL服務器一千打開的連接是昂貴的,即使它們是空閒的。我似乎想起當服務器接近2000連接範圍(幾年前在中端硬件上使用SQL 2000)時,服務器開始失去它(未接受新連接,簡單查詢超時等)。

希望這會有所幫助!

1

Apache DBCP的maxIdle連接設置爲8,maxActive設置爲8.這意味着可以在池中存在8個活動連接數和8個空閒連接數。撥打連接時,DBCP重新使用連接。您可以根據您的要求進行設置。您可以參考下面的文檔:

DBCP Configuration - Apache

+0

我才知道,問前面的問題:),我很感興趣,當是如果這些「沉睡」的連接,就像他們說的,會影響SQL Server的性能。 – 2011-05-06 09:51:09

+0

@Alex - 通常在現場系統中,根據使用要求分配連接數量。對於實時有250個用戶的應用程序,我們提供了30個最大連接數。如果有更多的應用程序訪問同一個數據庫,最好根據每個人需要的連接數進行分配。很顯然併發活動連接的數量會影響數據庫服務器,也取決於系統的資源(RAM,CPU)。 – 2011-05-06 10:04:34