我有一个在 Azure 中运行的 Web 应用程序,它运行了几年。它一直连接到在 VM 上运行的 MS SQL Server 实例,主要是因为它的一部分是需要 Azure SQL 不支持的功能的遗留应用程序。我们已经删除了一些旧的依赖项,Azure 现在有了 SQL Server 托管实例,所以我决定试一试。
但由于某种原因,现在许多需要访问数据库的 Web 请求在跟踪中都有一个或多个 14 秒的暂停。例如:
这些 SQL 行中的每一个都代表对 db 的另一个 SQL 调用。对于其中一些跟踪,整个过程大约需要 250 毫秒,并且 SQL 调用都是背靠背的。对于像这样的一些,您在 14 秒内什么都看不到,然后是一个 SQL 调用,然后是另一个 14 秒的间隙,其余的会快速连续发生。有时是 14 秒,然后他们都被快速调用。有时是 14 秒,然后是第一个呼叫,然后是另一个 14 秒,然后是第二个呼叫,然后是另一个 14 秒,然后是背靠背的其余呼叫。
时间的直方图非常奇怪:
我裁剪了低于 300 毫秒的响应,约占总数的一半。其余的显示在这里。图表没有完全对齐,但第一个高条是 14.3 秒,第二个是 28.7 秒,第三个是 43.2 秒。
当然,如果我将连接字符串切换回 VM,一切都会很快恢复运行。然后我回到 SQL 托管实例。代码根本没有改变。另一件奇怪的事情是,该时序图中的第一条 SQL 行是一个完全不同的数据库,没有被更改,所以不知何故让主数据库使用托管实例也会弄乱与 Azure SQL 的连接?我不认为它是严格缓存或任何东西,因为我可以连续多次刷新页面,有时它很快,有时是 14-28 秒。我还尝试使用私有和公共主机名将 conn 字符串更改为 MI。
底线——是否有某些原因导致对 SQL Server 的一次或多次调用会有 14 秒的间隔?