我的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()
我想知道为什么我要面对这个例外。例外情况可能是因为我已经耗尽了连接池,但我不完全确定,如果我确定我想知道我是如何到达那里的。
我的代码是否可以获取最大池大小和当前池利用率(已使用和未使用的连接数)?
答案 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。