确定为我的连接池提高最大池大小的内容

Jos*_*ick 2 c# sql-server wcf

所以,我希望增加最大池大小.问题是我不知道"合理"的增加是多少.现在我没有设置它,只使用默认值100.以下是我更具体的问题:

  1. 为什么这个数字默认为100,看起来很低.显着提高到1000或类似的东西有什么负面影响?

  2. 有没有一种很好的方法来确定这个Max应该被提升到什么?

  3. 连接池的"范围"是什么?这个池是否都与数据库连接?每个"机器/服务器"连接都有自己的池?

背景:

我的应用程序运行时收到以下错误:

"超时已到期.在从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小." 我已经阅读了很多其他类似问题的帖子,所有这些都讨论了我应该如何做两件事之一.

  1. 打开后确保我关闭所有连接
  2. 增加最大池大小

我有一个非常大的应用程序,因此(1)很难确定某个连接是否未被关闭.我找不到一个不是.

jbl*_*jbl 7

为什么这个数字默认为100,看起来很低.

100个连接大致意味着您可以每秒处理每秒250毫秒的数据库处理,而不会在连接上运行不足.那是相当高的.如果达到此限制,则需要查看优化.

显着提高到1000或类似的东西有什么负面影响?

Is there a good way to determine what this Max Should be raised to?
Run Code Online (Sandbox Code Playgroud)

粗略地说,它应该是每秒所需的连接数量,即释放每个连接之前所需的平均执行时间.例如,如果你需要每秒打开一百个新连接,每个连接需要在发布前10秒(这将是非常巨大的),你需要在池中使用类似1000个连接的东西来长期处理它.

连接池的"范围"是什么?

我会说它在AppDomain上(将检查)

这个池是否都与数据库连接?

连接基于连接字符串进行池化.连接字符串中的任何小差异都会导致不同的池(虽然我不确定它是否区分大小写)

每个"机器/服务器"连接都有自己的池?

关于您的问题,可能有以下几点:

  • 你的应用程序获得的流量远远超过它的处理能力(SQL分析器应该对此有所帮助,提高池大小会有所帮助)
  • 你有一些需要花费太多时间并经常调用的查询(需要几秒钟,每秒调用几次)会造成瓶颈(探测器也会有帮助)
  • 你在一些嵌套(递归)循环中泄漏连接或打开太多连接
  • 你有这么多的游泳池,你达到连接的数据库限制(我的2008R2标准32767 Select @@MAX_CONNECTIONS)这似乎不太可能