Dam*_*ods 21 sql-server sql-server-2012 connection-pooling
我们使用 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) Microsoft Corporation
Enterprise Edition(64 位)在 Windows NT 6.1(Build 7601:Service Pack 1)上
我们使用大约 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 数据库,db 名称在连接字符串中指定。
我想检查连接字符串池的数量等,并检查 Perfmon 中的所有计数器.Net Data Provider for SqlServer
。它只给了我defaultdomain9675
实例的选项,所以我选择了它,假设这是我们数据中心网络的系统生成的 ID 名称。不幸的是,所有计数器的读数都为零。在我们的另一台主服务器上,连接池徘徊在 10 左右,这是我期望在具有这种负载的健康服务器上看到的。
我的问题是 3 折
谁能建议为什么 Windows 2008 R2 Server 没有显示.Net Data Provider for SqlServer
?
有没有人经历过这种情况,因为我显然认为没有权限的登录是一种红鲱鱼?
如果不同的 Web 服务器组具有相同的连接字符串语法但空格略有不同,这是否会导致服务器使用另一个连接池?
最小和最大内存设置分别为 20GB 和 58GB。该服务器是具有 64GB RAM 的专用数据库服务器。我不认为内存是问题,因为盒子似乎有一个不错的页面寿命预期。未启用自动关闭。服务器始终处于运行状态:这是一个 24x7 全天候使用的网站。
小智 5
1 - 不能肯定,我必须去找一个服务器来深入了解自己。
2 - 是的,我会定期在我的环境中看到这一点,尽管我们还没有在 sql 2012 上看到这一点。您可能还想查看这篇文章,尽管状态 46 似乎与在连接字符串中具有特定的 Database=xxx 相关,该数据库是否仍然存在?
我的网络设置方式我怀疑是网络在空闲 5 分钟后自动关闭了 tcp 会话,这就是问题 - 数据库和客户端都没有关闭会话,因此连接池仍然认为连接是打开的并尝试使用它只是发现它不再真正开放了。您没有提到您的Web服务器和数据库之间的网络是如何配置的,也许您的情况类似。
另一种可能性可能是(旧的,不确定是否真的解决了,请参阅http://support.microsoft.com/kb/942861)有关 TCP 烟囱卸载设置的问题。
3 - 我的理解是池化需要精确的字符串匹配,所以空格和不同的参数顺序会导致不同的池。(如果我错了,请告诉我。)
归档时间: |
|
查看次数: |
34805 次 |
最近记录: |