【问题标题】:Why does the connection counts of a long running query keeps increasing?为什么长时间运行的查询的连接数不断增加?
【发布时间】:2015-12-01 09:00:27
【问题描述】:

我正在使用这个查询来查看当前的连接:

select  loginame , nt_username, hostprocess, program_name, cmd, status, count(*) 'Connections count'
from master..sysprocesses
where spid > 50 and spid != @@spid
group by  loginame , nt_username, dbid, hostprocess, program_name, cmd, status
order by loginame, count(*) desc;

每当我运行一个需要很长时间的查询时(比如,count(1) 来自一个大表,需要 40 多秒),连接数就会不断增加。结果,最大 已达到连接限制(EF 的默认值为 100),并且对我的站点的请求超时。异常消息如下所示:

Exception Message: The underlying provider failed on Open.
InnerException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

为什么会这样?

例如,如果我在 sql管理工作室:

select COUNT(1)
FROM tableA ss
INNER  JOIN tableB s
ON s.Id = ss.tableAId      
WHERE s.Time < '2015-10-01';

这是我在运行上一个查询时看到的:

这里显示 30 个连接;但它一直在增加。

【问题讨论】:

    标签: sql-server database database-administration


    【解决方案1】:

    使用该查询,您将每个并行流计算为一个连接,如果您只是将它们列出而不聚合它们,您将看到许多并行查询执行,其中 SPID 相同且 ECID > 0。使用 COUNT( DISTINCT spid ) 或将 AND ECID = 0 添加到查询中。

    【讨论】:

    • 但是会抛出异常,说明所有连接都已用完。我尝试将池大小增加到 250(尽管 ms 建议将其保持为默认值 100)。类似的问题,稍晚一点。你能告诉我,如何改进它吗?
    • 您能否发布您收到的确切错误消息。并行线程 (ECID>0) 不计入连接限制。另外,您使用的是什么版本(2008、2012 等...)和版本(Express、Standard 等...)?
    • 好的 - 所以这实际上不是 SQL Server 问题,而是连接池问题。看起来您的进程启动了一个连接(从池中),执行了一个查询,但该查询需要很长时间,因此连接连接,另一个请求进来,需要另一个连接等等......直到连接池累。您需要优化正在运行的查询 - 确保索引到位等。
    • 我的查询已优化。索引/统计数据每天都会重建/重组/更新。我的网站流量很大。 99.5% 的请求是简单的插入,但 1/2 的请求可能是长时间运行的(例如,有人获取可能需要 2 到 20 秒以上的报告),这与帖子中提到的情况相同。我观察到,在长时间运行的查询之后,连接总数固定为 100,并且微小的请求超时(除非我强制终止该进程)。但通常连接数在 25~45 左右。
    • 您需要确定为什么应用程序认为有必要继续创建连接,这基本上是因为查询花费的时间太长。可能是阻塞问题 -> 运行 SELECT * FROM master..sysprocesses WHERE blocked > 0 和 SPID Blocked 以查看阻塞连接和块链。使用 SQL Profiler 查看语句花费了多长时间并对其进行优化。如果你一开始就没有合适的索引,那么重建/重组是没有意义的!
    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多