我有一个azure中的数据库,它具有我的应用程序的standart s2 edition.In日志,我总是看到许多异常,比如格式:
1.
System.Data.SqlClient.SqlException:由于登录前连接初始化过程中出现错误,客户端无法建立连接。可能的原因包括:客户端试图连接到不支持的server版本;服务器太忙,无法接受新的连接;或者服务器上存在资源限制(内存不足或允许的最大连接)。(提供程序: TCP提供程序,错误:0-现有连接被远程主机强制关闭)--> System.ComponentModel.Win32Exception:现有连接被远程主机强制关闭
2.
System.Data.Entity.Core.EntityException:基础提供程序在打开时失败。-> System.InvalidOperationException:超时过期。从池获得连接之前经过的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。
3.
System.Data.SqlClient.SqlException (0x80131904):由于登录前连接初始化过程中出现错误,客户端无法建立连接。可能的原因包括:客户端试图连接到不支持的server版本;服务器太忙,无法接受新的连接;或者服务器上存在资源限制(内存不足或允许的最大连接)。(提供者: TCP提供程序,错误:0-现有连接被远程主机强制关闭)-> System.ComponentModel.Win32Exception (0x80004005):现有连接被远程主机强制关闭。
我使用SqlAzureExecutionStrategy,因此在进行多次重试后会引发此异常。
我在azure portla上看到了不同的性能指标,但它们似乎都很好。
我怎样才能识别问题呢?
发布于 2016-08-22 14:04:37
我认为您的数据库负载太重,或者您有一些查询仍然在运行,或者没有放弃连接。
我使用这个查询查看正在运行的是什么:
SELECT (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
s1.* FROM sys.dm_exec_requests s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
ORDER BY 1查看您是否仍然在这里运行查询,或者监视Azure门户中的CPU使用情况。
S2数据库不是特别好,它会限制您的请求,所以如果您正在处理大量的请求(即使是小的),它可能会拒绝它们。
您的重试策略也可能会使问题变得更糟,但是当问题已经被填充时,会向它抛出更多的请求。如果是这样的话,你可以尝试使用指数后退。
发布于 2016-08-31 00:32:53
这三者都可以通过连接池设计来解释。您是在重用您的连接,还是每次对数据库的调用都打开了它自己的连接?您是否在每个DBContext的末尾关闭连接?您是否实现了任何类型的缓存层以将往返数据库的次数减少到最低限度?
这里有一个方法,看看这是否是一个问题,你的池。从门户转到有问题的数据库,查看资源利用率图,然后点击编辑。

然后从“选择”列表中添加“会话百分比”和“员工百分比”,然后单击“确定”。

如果您的池是一个问题,您会发现您的会话和员工百分比很高,并可能是100%的期间。如果达到100%,则在当前会话和工作人员完成或被关闭之前,您可以被拒绝5分钟的新连接。
https://stackoverflow.com/questions/39081172
复制相似问题