连接池被重置,错误:18056,严重性:20,状态:46。&Perfmon计数器未显示


21

我们使用SQL身份验证(以减少连接池的数量)和.NET 4.0连接字符串连接到Windows 2008 R2 Enterprise Server上的SQL Server Enterprise Edition 2012 SP1:

Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)
2012年10月19日13:38:57
版权所有(c)
Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation Enterprise Edition(64位)

我们使用大约50台服务器,将其分为网站的不同部分8个不同的组。

我们的网站正在使用此SQL Server记录访问跟踪数据。在过去的几天中,它吐出了有关重置连接池的以下消息:

客户端无法重用SPID 1327的会话,该会话已被重置用于连接池。故障ID为46。此错误可能是由较早的操作失败引起的。在此错误消息之前,请检查错误日志中是否有失败的操作。

错误日志显示为:

错误:18056,严重性:20,状态:46
。客户端无法重用SPID 959的会话,该会话已被重置用于连接池。失败ID为46。此错误可能是由较早的操作失败引起的。在此错误消息之前,请检查错误日志中是否有失败的操作。
用户“ xxxx”的登录失败。原因:在重新验证连接登录时,无法打开在登录对象中配置的数据库'xxxxxxxx'。[客户:10.xx.xx.xxx]

经过一番挖掘后,我在CSS博客上找到了该文档:工作原理:错误18056 –客户端无法重用SPID ##进行会话,该会话已被重置用于连接池,Aaron Bertrand 对此进行了重置故障排除错误18456。我知道错误号不同,但是失败ID相同,并且消息数量相同)。

故障ID 46表示登录名没有权限。我们的登录名默认为master数据库,并且数据库名称在连接字符串中指定。

我想检查连接字符串池等的数量,并检查Perfmon中所有的计数器.Net Data Provider for SqlServer。它只为我defaultdomain9675提供了实例的选项,因此我选择了那是假设它是我们的Datacentre网络的系统生成的ID名称。不幸的是,所有计数器的读数均为零。在我们的其他一台主服务器上,连接池徘徊在10个左右,这是我期望在具有这种负载的正常服务器上看到的。

我的问题是三折

  1. 谁能说出Windows 2008 R2 Server没有显示的原因.Net Data Provider for SqlServer吗?

  2. 有谁遇到过这种情况,因为我显然认为没有权限的登录名是一个红鲱鱼?

  3. 如果不同的Web服务器组具有相同的连接字符串语法,但空格稍有不同,这会导致服务器使用另一个连接池吗?

最小和最大内存设置分别为20GB和58GB。该服务器是具有64GB RAM的专用数据库服务器。我不认为内存不是问题,因为该包装盒的页面预期效果不错。未启用自动关闭。服务器始终处于启动状态:这是一个使用率很高的24x7网站。


3
我们的服务器上间歇性地遇到相同的问题(.NET应用程序/ Windows 2008 R2 / SQL Server 2008 R2 / SQL登录);我一直无法找到发生这种情况的原因……基本上,我们已经放弃了这一点的尝试。在升级到4.0之前,我们在.NET 3.5上也遇到了此问题。我很想听听是否有人解决了这个问题!
乔恩·塞格尔

1
@jonSeigel约翰,您好,我已使用有关扩展事件的以下文档设法确定所讨论的服务器实际上正在正确使用阻塞池。sqlserverpedia.com/blog/sql-server-bloggers / ... 我目前正在尝试改编Xevents以找到必要的信息,以便为我提供连接池总数的信息
DamagedGoods,

问题服务器是否使用镜像?当数据库故障转移到辅助计算机时,我已经在主计算机上看到此错误消息。
Max Vernon

Answers:


5

1-不能肯定地说,我必须去寻找一台服务器来深入研究自己。

2-是的,虽然我们不在使用sql 2012的系统上,但在我的环境中却定期看到此信息。您可能还需要检查http://blogs.msdn.com/b/psssql/archive/2013/02/13/breaking-down-18065.aspx,尽管状态46似乎与在其中具有特定的Database = xxx有关连接字符串,该数据库仍然存在吗?

我的网络设置方式我怀疑这是网络在闲置5分钟后自动关闭tcp会话的问题-数据库和客户端都没有关闭会话,因此连接池仍认为连接已打开并尝试使用只是发现它不再真正打开了。您没有提到如何配置Web服务器和数据库之间的网络,也许您的情况是类似的。

另一种可能是关于TCP烟囱卸载设置的问题(旧的,不确定是否真的可以解决,请参见http://support.microsoft.com/kb/942861)。

3-我的理解是池需要精确的字符串匹配,因此空格和不同参数顺序将导致不同的池。(如果我错了,请告诉我。)


4

社区Wiki答案最初由问题作者保留为评论

在我的情况下,结果证明它是一个失控的日志表,有人改成了冗长的表来解决问题,但忘记关闭了。最终每秒记录多达1000条记录。

另一个工作是尝试从表中删除旧记录。最终陷入困境,就像试图删除时被锁定一样,阻止了所有用尽连接池资源的插入。

我找到工作后,立即将滥用该服务器上权限的人打了个头,然后停止了工作,连接池的所有错误消息都停止了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.