2013-10-11 87 views
2

因此,我期待增加最大池大小。問題是我不知道「合理」增長會是什麼。現在我不設置它,只是使用100以下默認的是我的更具體的問題:確定如何提高我的連接池的最大池大小

  1. 爲什麼是這個數字默認爲100,似乎低。將它提升到1000或者類似的東西有什麼不利之處?

  2. 有沒有一種很好的方法來確定這個Max應該提高到什麼程度?

  3. 什麼是連接池的「範圍」?這個池是否連接到數據庫?每個「機器/服務器」連接都有自己的池?

背景:

雖然我的應用程序運行時,我們收到以下錯誤:。

「超時過期從池中獲取連接之前經過的超時時間。這可能是因爲發生所有聯網連接都在使用中,並且達到了最大池大小。「我已經閱讀了很多類似的問題,所有這些都討論了我應該如何做兩件事之一。

  1. 確保我關閉所有連接打開它們之後
  2. 增加最大池大小

我有一個非常大的應用程序,所以(1)是很難確定的地方連接沒有關閉。我找不到一個。

+1

關於你是否需要,我會在這裏提出一個很好的總結:http://stackoverflow.com/questions/5793960/maximum-connection-pool-size;假設你已經閱讀了這篇文章,並且你確定你需要更多,這可能有助於查看你是否「泄漏」連接? http://blogs.msdn.com/b/angelsb/archive/2004/08/25/220333.aspx – dash

+1

如果你有連接泄漏(打開而不關閉),增加池大小可能無濟於事,因爲打開的連接保持打開狀態無限期。默認情況下,100能夠在連接關閉時處理大負載,並且查詢發生的速度相當快。連接池保存在.net服務器端,因此每個.net服務器都維護它自己的池 – ren

+0

我編輯了標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

6

Why is this number defaulted at 100, seems low.

100連接大概的意思是,你可以在每秒處理每秒200個500ms的數據庫處理沒有連接上運行低。這很高。 如果您達到此限制,現在該查看優化。

What are the negatives of significantly raising it to 1000 or something like that?

Is there a good way to determine what this Max Should be raised to? 

在一個粗略的基礎,它應該是你需要每秒鐘釋放每次連接前所需的平均執行時間的連接數。例如,如果您需要每秒打開100個新連接,每個連接需要10秒纔會釋放(這將非常龐大),您需要池中的1000個連接來處理長連接。

What is the "scope" of the Connection Pool?

我會說這是對的AppDomain(將檢查)

Is this pool all connections to the database?

連接基於連接字符串合併。在連接字符串中的任何小的差異將導致不同的池(雖然我不知道這是否是區分大小寫)

Each "Machine/Server" connecting has is own Pool?

關於您的問題,它可能是幾件事情:

  • 您的應用程序接收更多的流量超過其處理(SQL事件探查器應幫助有關,養則池的大小將有助於)
  • 你有一定的查詢需要太多的時間,被稱爲過於頻繁(以幾秒鐘,叫每幾次第二)創建一個瓶頸(分析器也會有所幫助)
  • 您泄漏在一些嵌套(遞歸)循環,似乎不太可能連接或打開太多的
  • 你有你打的(我2008R2標準Select @@MAX_CONNECTIONS 32767)連接的數據庫限制這麼多池
+1

所以我們也最終找到被打開了連接在那裏,然後SQL異常被拋出,沒有「最後」模塊設置以確保連接已關閉。感謝您的幫助。 –

+0

@jbl,你確定100多個連接適用於大多數業務案例嗎? – Julien