SQL Azure请求限制和可能的连接泄漏

时间:2015-09-29 07:28:35

标签: sql-server entity-framework azure connection-leaks

我有一个有趣的问题。我最近为客户端移动了两个SQL数据库到SQL Azure,一开始看起来一切顺利。上午我收到各种各样的错误电子邮件,但有一些常见的错误:

- 数据库的请求限制为90且已达到 -Timeout已过期。操作完成之前经过的超时时间或服务器没有响应 - 从服务器接收结果时发生传输级错误。

显然,一些与数据库相关的问题正在转移到Azure,或者一般的现有代码。似乎发生最多的错误是请求限制和超时。一旦他们开始,他们似乎永远不会停止。而且我认为今天有很多用户使用该网站。如果这有任何意义,似乎连接继续尝试连接在后台的不同线程上。这是参考"操作完成之前经过的超时时间或服务器没有响应。"我会收到一封错误邮件,我自己检查它引用的页面,它会立即加载。我检查了抛出错误的用户,他们报告一切都很好。奇怪。然而,我每隔几分钟就会继续收到相同的错误电子邮件。

我目前在S1 Tier上有它们,同时将请求限制为90。我做了一些挖掘,发现了以下SQL查询:

select * from sys.dm_exec_connections

我跑了这个,它显示我有超过90个活动连接,其中一些是在前一段时间打开的。这对我来说很奇怪,因为该网站目前尚未被使用(它真的很晚,我知道没有人在使用该网站)。我想结束所有连接,所以我想出了以下查询:

DECLARE @sessionId int
DECLARE @SQL nvarchar(1000)
DECLARE @clientIP nvarchar(50)

set @clientIP = 'XX.XX.XX.XX'

select @sessionId = min( session_id ) from sys.dm_exec_connections where   client_net_address = @clientIP

while @sessionId is not null
begin
    SET @SQL = 'KILL ' + CAST(@sessionId as varchar(4))
    EXEC (@SQL)
    select @sessionId = min( session_id ) from sys.dm_exec_connections where session_id > @sessionId and client_net_address = @clientIP
end

我尝试运行此命令,但连接正好回来了。我继续在Web服务器上手动停止IIS中的站点,再次运行KILL命令,但连接仍然存在。我提出了app_offline文件并将网站关闭了大约半小时,以查看是否有任何延迟连接会丢失,但他们没有。我仍然继续收到错误的电子邮件,因为我停止了网站和应用程序池,因此无法访问我无法访问的页面。我继续在服务器上手动停止w3wp进程并运行SQL KILL语句来终止连接。他们终于离开了!我把应用程序重新上线并打了一页。我一直运行上面的查询来查看活动连接,并且每次运行查询时都确定活动连接数不断增加。它现在停止在102左右。这就是我作为用户点击单个页面的原因。我猜这不正常吗?这是否表明连接在那里延伸并且没有被丢弃或关闭?

我刚刚在最近添加了Entity Framework时进行了代码更改。无论我在哪里通过EF抓取数据,我都会在上下文中使用using语句。该应用程序的其余部分有点旧,正在使用TableAdapters。我在某些地方看到它使用了使用语句的相同模式,其他地方正在调用Dispose。我还没有机会追查所有的用法。这是一个开始寻找的好地方吗?任何人都有任何关于如何跟踪这个'泄漏'下?我不熟悉SQL,所以任何帮助都会非常感激!

0 个答案:

没有答案