2013-10-11 55 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