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

时间:2013-10-11 14:51:59

标签: c# sql-server wcf

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

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

  2. 有没有一种好方法可以确定应该将这个Max提升到什么位置?

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

  4. 背景:

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

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

    1. 确保我打开后关闭所有连接
    2. 增加最大池大小
    3. 我有一个非常大的应用程序,因此(1)很难确定某个连接是否未被关闭。我找不到一个不是。

1 个答案:

答案 0 :(得分:6)

  

为什么这个数字默认为100,似乎很低。

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

  

将它大幅提高到1000或类似的东西有什么负面影响?

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

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

  

连接池的“范围”是什么?

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

  

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

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

  

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

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

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