Azure SQL 数据库连接问题 - 连接过多

本文关键字:连接 问题 SQL 数据库连接 Azure | 更新日期: 2023-09-27 18:30:34

我有一个网站,它是我最近启动的白标(同一网站的多个版本)。目前还没有大量的流量 - 主要是机器人,但每天可能有800个用户。它托管在 Azure 上,除了位于非 Azure 服务器上的管理面板外,还具有 Azure 数据库。这两个站点连接到同一个 Azure 数据库。还有一些辅助角色运行来处理数据 - 99% 的时间他们什么都不做,但他们会定期检查。

我总是遇到持续几秒钟然后又没事的随机错误,例如:

从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 远程主机强制关闭了现有连接。

然而,今天早上,我们遇到了一个更严重的问题。它开始于:

系统组件模型.Win32异常:远程主机强行关闭了现有连接

这发生在机器人(谷歌,百度,AhrefsBot和 Wiseguys.nl)索引网站时。我从中得到了一个或多个错误。然后我得到了:

System.Data.SqlClient.SqlException:服务在处理您的请求时遇到错误。请重试。错误代码 40143。当前命令上发生严重错误。结果(如果有的话)应丢弃。

这是在ExecuteReader阶段。

10 分钟后,真正的问题来了 - 这意味着没有人可以登录管理界面,但当我测试它时,Azure 托管的网站看起来不错,尽管机器人仍然出现错误。问题是:

系统.组件模型.Win32异常: 等待操作超时

这继续随机连接断断续续地工作了大约一个小时。然后我遇到了另一个问题:

System.Data.SqlClient.SqlException: 资源 ID : 1。数据库的请求限制为 180,并且已达到。有关帮助,请参阅"http://go.microsoft.com/fwlink/?LinkId=267637"。

这在最后一个小时内断断续续地发生 - 主要是针对辅助角色。然后,我试图找出正在处理所有这些请求的原因,我找到了以下命令:

从sys.dm_exec_requests中选择 *

当我一遍又一遍地运行它时,它只返回 1 或 2 个请求。

所以我的问题是:1) 是否有其他人遇到相对定期(一次,也许每天两次)与 Azure 上托管的服务器的临时断开连接?2) 上面的事件列表是否表明存在特定问题?当许多管理员同时登录时,这一切都可能发生。3) 当我收到 180 limit 消息时,如何更好地调试对数据库的请求数?

提前谢谢。

Azure SQL 数据库连接问题 - 连接过多

几年前我写了这个问题,并收到了标题微小更改的通知。在体验了更多的 Azure SQL 数据库之后,我现在知道了这个问题的答案。为了其他人的利益,只是将您的数据库设置为太低的层。

Azure 的定价层在性能方面存在相当大的差异。为了实现这一目标,他们限制了许多性能指标,例如 CPU 功率、每分钟请求数等。

这意味着,如果您正在推动您的层,您的请求将开始排队,因为 CPU 功率/请求量太高而无法处理。这会导致超时,然后请求限制随着请求等待处理而增加。最终,它到了数据库基本上崩溃的地步。

我的经验是,较低的数据库级别(例如 S0 和 S1)确实功能不足,除了开发或非常基本的站点之外,不应该用于任何其他内容。

Azure 门户中有一些很棒的工具可用于调试数据库的情况,例如 CPU 关系图、索引顾问和查询性能见解。

听起来您在查看此dm_exec_requests DMV时确实走在正确的轨道上。 我怀疑你已经看到了这一点,但是这里有更多关于 180 节油门限制的信息,并概述了它的一些关键原因。

如果您感兴趣,我们有一个名为Cotega的服务,可能对您的两个问题都有帮助。 首先,我们可以针对您的数据库运行所有关键 DMV,以向您展示正在发生的事情以帮助您分析数据库,并且当您开始接近限制时,我们还可以通知您(电子邮件、短信)。

从服务器接收结果时发生传输级错误。(提供程序:TCP 提供程序,错误:0 - 远程主机强制关闭了现有连接。

系统组件模型.Win32异常:远程主机强行关闭了现有连接

两者都可以安全地忽略。 每当外部连接中断时,就会发生它们,如果用户在接收响应的过程中关闭浏览器,或者其他网络问题中断连接,就会发生这种情况。还有其他类似的异常可能是由于检测到该条件时不同的框架代码处于活动状态。引发这些异常以停止处理请求,因为调用方无论如何都不再侦听。

如果要跟踪活动请求数,则应创建一个用于所有 SQL 连接的包装器,在使用连接时执行互锁递增和递减(使用 IDisposable),并跟踪该值的高水位标记。您可以在特殊的隐藏或管理页面中报告它。这样,即使您在出现问题时无法进入系统,您也可以看到活动连接的最大数量,以确保这不是您的问题。这也可以帮助您发现是否没有处理所有连接。