Azure SQL数据库连接问题 – 连接太多?

我有一个网站,这是我最近推出的白色标签(同一网站的多个版本)。 目前还没有大量的流量 – 主要是机器人,但每天可能有800个用户。 除了位于非azure服务器上的管理面板之外,它还在Azure上托管Azure数据库。 两个站点都连接到同一个Azure数据库。 还有一些工作人员角色正在运行以处理数据 – 99%的时间他们没有做任何事情,但他们会定期检查。

我总是经历随机错误,持续几秒钟,然后再次确定,例如:

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

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

System.ComponentModel.Win32Exception:远程主机强制关闭现有连接

这是在机器人(Google,百度,AhrefsBot和Wiseguys.nl)为该网站编制索引时发生的。 我从这些中得到了一个或多个错误。 然后我得到了:

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

这是在ExecuteReader阶段。

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

System.ComponentModel.Win32Exception:等待操作超时

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

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

这发生在最后一小时的开关 – 主要是工人角色。 然后我试图找出占用所有这些请求的内容,我找到了这个命令:

SELECT * FROM sys.dm_exec_requests

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

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

提前致谢。

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

Azure的定价级别在性能方面存在巨大差异。 为了实现这一目标,他们扼杀了许多性能指标,例如CPU功率,每分钟请求数等。

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

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

Azure门户中有一些很棒的工具允许您调试数据库的运行情况,例如CPU图,索引顾问和查询性能洞察。

看起来这个dm_exec_requests DMV听起来好像你在正确的轨道上。 我怀疑你已经看过这个了,但是关于180节流限制的信息还有很多, 这里有一些关键的原因。

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

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

System.ComponentModel.Win32Exception:远程主机强制关闭现有连接

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

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