2

我的 C# 代码用于SqlConnection连接到 SQL Azure。有时我会面临以下情况:

System.InvalidOperationException
Timeout expired.  The timeout period elapsed prior to obtaining a connection
from the pool.  This may have occurred because all pooled connections were
in use and max pool size was reached.
 at System.Data.ProviderBase.DbConnectionFactory.GetConnection(
    DbConnection owningConnection)
 at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(
    DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
// my code calling SqlConnection.Open()

我想找出为什么我面临这个例外。异常可能是因为我已经用尽了连接池,但我不完全确定,如果我确定我想知道我是如何到达那里的。

我的代码是否可以获得最大池大小和当前池利用率(已使用和未使用的连接数)?

4

2 回答 2

3

SQL Azure 数据库的最大连接数为 180 个连接。这是一个硬限制。

http://msdn.microsoft.com/en-us/library/windowsazure/ff394114.aspx

-- 监控连接
选择
      e.connection_id,
      s.session_id,
      s.login_name,
      s.last_request_end_time,
      s.cpu_time
从
      sys.dm_exec_sessions
      INNER JOIN sys.dm_exec_connections e
      ON s.session_id = e.session_id
去

此查询将允许查看当前连接。上面的链接还有一些非常有用的查询,用于确定连接的来源。

我将此查询用作我们在 cron 作业中运行的诊断设置和报告的一部分,以确保我们不会出现中断。

正如已经指出的那样,最大池会有所帮助,但这取决于 SQL Azure 前面的计算数量。

当您遇到此类问题时,您需要确定是否在关闭方面存在连接问题,或者您需要开始考虑更高级的解决方案,例如分片。

嗯,詹姆斯

于 2013-05-13T21:38:20.607 回答
0

您可以查看此链接

尽管最大池大小(如果未指定)为 100。

于 2013-05-06T11:38:53.017 回答