C# 如何知道SQL Server客户端连接池的实际利用率?
我的C代码使用SqlConnection连接到SQLAzure。有时我会面对以下问题:C# 如何知道SQL Server客户端连接池的实际利用率?,c#,.net,sql-server,azure-sql-database,C#,.net,Sql Server,Azure Sql Database,我的C代码使用SqlConnection连接到SQLAzure。有时我会面对以下问题: 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 s
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()
我想知道为什么我要面对这个例外。例外情况可能是因为我已经耗尽了连接池,但我不能完全确定,如果我确定,我想知道我是如何到达那里的
我的代码是否可以获得已使用和未使用连接的最大池大小和当前池利用率?您可以对此进行检查
尽管最大池大小(如果未指定)为100。但SQL Azure数据库的最大连接数为180个连接。这是一个硬限制 此查询将允许查看当前连接。上面的链接还有一些非常有用的查询,用于确定连接来自何处 我使用此查询作为诊断设置和报告的一部分,我们在cron作业中运行该设置和报告,以确保我们不会走向停机 如前所述,Max pool将有所帮助,但这取决于sqlazure前面的计算数量 当您遇到此类问题时,您需要确定在关闭方面是否存在连接问题,或者是否需要开始寻找更高级的解决方案,如分片
hths,James@Habib:这是每个连接的问题,它没有说明我已经有多少个连接。这没有说明正在使用的连接数。只是提供了链接,以获取有关异常的一些信息,以便您可以解决问题。是的,这并没有指定如何通过代码检测池大小。我不想解决我的问题,我想知道利用率。 -- 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