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

15
我有一个网站,是一个白标(同一网站的多个版本),我最近刚刚发布了它。目前没有太多流量 - 主要是机器人,但可能有每天800个用户。它托管在Azure上,除了位于非Azure服务器上的管理面板外,还有一个Azure数据库。两个站点都连接到同一个Azure数据库。还有一些工作角色正在运行以处理数据 - 99%的时间它们什么也不做,但会定期检查。
我一直遇到随机错误,持续几秒钟,然后又恢复正常,例如:
“从服务器接收结果时发生传输级错误。(提供程序:TCP Provider,错误:0-远程主机强制关闭了现有的连接。)”
然而,今天早上,我们遇到了更严重的问题。它始于:
“System.ComponentModel.Win32Exception:远程主机强制关闭了现有的连接”
这发生在机器人(Google、Baidu、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个限制消息时,如何更好地调试对数据库的请求数量?

提前感谢。

3个回答

8
我几年前写了这个问题,并收到了标题的微小更改通知。由于有了更多的Azure SQL数据库经验,我现在知道了这个问题的答案。为了使其他人受益,答案很简单,您的数据库设置的等级太低了。
Azure拥有定价层,其性能差异非常大。为了实现这一点,他们限制了许多性能指标,例如CPU功率、每分钟请求次数等等。
这意味着如果你超过了你的层级,你的请求将开始排队,因为CPU功率/请求量太高而无法处理。这会导致超时,然后请求限制随着请求等待处理而增长。最终,它会到达数据库基本崩溃的地步。
我的经验是较低的数据库级别,如S0和S1,性能不足,除了开发或非常基本的站点之外,不应该用于其他任何目的。
Azure门户中有一些很棒的工具可以帮助您调试数据库,例如CPU图表、索引顾问和查询性能洞察。

0
从服务器接收结果时发生了传输级错误。(提供程序:TCP 提供程序,错误:0 - 远程主机强制关闭了现有的连接。)
还有
System.ComponentModel.Win32Exception: 远程主机强制关闭了现有的连接
两者都可以安全忽略。它们在外部中断连接时发生,如果用户在接收响应的过程中关闭浏览器或其他网络问题导致连接中断,则会发生这种情况。当检测到该条件时,可能由于不同的框架代码处于活动状态而引发其他类似的异常。抛出这些异常是为了停止请求的处理,因为调用方已经不再侦听。
如果您想跟踪活动请求的数量,应创建一个包装器,用于所有 SQL 连接,在连接正在使用时进行交替增量和减量(使用 IDisposable)并跟踪该值的最高水平标记。您可以在特殊的隐藏页面或管理员页面上报告它。这样,即使在问题发生时无法进入系统,您也可以看到最高活动连接数,以确保这不是您的问题。这也可以帮助您发现是否未处置所有连接。

0

看起来你在探索 dm_exec_requests DMV 方面的路上是正确的。 我猜你已经看到了这个,但是还有更多关于 180 限制的信息,它在这里有详细文档 并概述了一些主要原因。

如果你感兴趣,我们有一个名为Cotega的服务,可能对你的问题有所帮助。第一,我们可以运行所有关键的DMV 对你的数据库进行分析,以帮助你分析你的数据库,同时我们也会在接近限制时提醒你(通过电子邮件、短信)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接