我如何知道实际的SQL Server客户端连接池利用率?

时间:2013-05-06 11:05:26

标签: c# .net sql-server azure-sql-database

我的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()

我想知道为什么我要面对这个例外。例外情况可能是因为我已经耗尽了连接池,但我不完全确定,如果我确定我想知道我是如何到达那里的。

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

2 个答案:

答案 0 :(得分:3)

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

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

-- monitor connections
SELECT
      e.connection_id,
      s.session_id,
      s.login_name,
      s.last_request_end_time,
      s.cpu_time
FROM
      sys.dm_exec_sessions s
      INNER JOIN sys.dm_exec_connections e
      ON s.session_id = e.session_id
GO

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

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

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

当您遇到此类问题时,如果您在关闭方面存在连接问题,或者需要开始查看更高级的解决方案(例如分片),则需要确定问题。

hths,詹姆斯

答案 1 :(得分:0)

您可以查看此link

虽然最大池大小(如果未指定)为100。