Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SQL Server连接池_Asp.net_Sql Server_Connection Pooling - Fatal编程技术网

Asp.net SQL Server连接池

Asp.net SQL Server连接池,asp.net,sql-server,connection-pooling,Asp.net,Sql Server,Connection Pooling,晚上好 我仍然怀疑asp.net连接池。我使用的应用程序有时会抛出异常“已达到最大池大小” 我的团队一遍又一遍地寻找泄漏的代码,但什么也没找到 但是,现在我开始怀疑了。当它说“已达到最大池大小”时,是否意味着数据库或服务器已达到最大池大小 如果SQL Server为多个不同的asp.net应用程序托管多个数据库,这些其他数据库是否会干扰我的数据库(我的数据库位于同一SQL Server中)。例如,如果存在某个应用程序泄漏连接,该泄漏是否会在我的应用程序中生成“最大池大小” 谢谢 ADO.NET为

晚上好

我仍然怀疑asp.net连接池。我使用的应用程序有时会抛出异常“已达到最大池大小”

我的团队一遍又一遍地寻找泄漏的代码,但什么也没找到

但是,现在我开始怀疑了。当它说“已达到最大池大小”时,是否意味着数据库或服务器已达到最大池大小

如果SQL Server为多个不同的asp.net应用程序托管多个数据库,这些其他数据库是否会干扰我的数据库(我的数据库位于同一SQL Server中)。例如,如果存在某个应用程序泄漏连接,该泄漏是否会在我的应用程序中生成“最大池大小”


谢谢

ADO.NET为每个连接字符串维护单独的连接池组。因此,如果您有多个数据库,它们应该有自己的池,并且这些池不应该相互干扰

是否可能有些请求需要很长时间?如果对单个数据库一次执行足够多的请求,并且请求被延迟,那么可能仅仅因为打开了连接,连接池就真的被访问了

要验证情况并非如此,您可以通过执行
sp_who
或运行SQL Server来检查数据库上正在运行的内容

您还可以查询数据库中的DMV,查看数据库中各种程序打开的连接数:

select
    NULL as [Connections by Database],
    [host_name] as [Client Machine],
    DB.name as [Database],
    [program_name] as [Client Program],
    COUNT(*) as [Open Connections]
from sys.dm_exec_sessions s (nolock)
    left join sys.dm_exec_requests r (nolock)
        on r.session_id = s.session_id
    left join sys.databases DB (nolock)
        on DB.database_id = r.database_id
where s.session_id >= 50 -- Ignore SQL Server processes
group by [host_name], DB.name, [program_name]
order by [Client Machine], [Database], [Client Program]
如果发现只需要更多连接,可以通过将属性Max Pool Size设置为100以外的值来调整连接字符串中的限制。这是

如果您想查看导致问题的池,可以在调试堆中挖掘.NET对象。您必须捕获w3wp.exe进程的内存转储,并使用WinDbg(或可能的话)等工具对其进行分析。我过去也这样做过。这并不一定容易,但它可以帮助很多

编辑

有一个可用于监视泄漏连接的。在Performance Monitor中,为SqlServer提供cxpand.NET数据提供程序,并添加ReclainedConnections的计数器编号。根据文件,该计数器表示:

通过垃圾回收的连接数 应用程序未调用Close或Dispose的集合。 不明确关闭或处理连接会影响性能


我们已使用此计数器验证应用程序是否存在连接泄漏。

hmmmm。。。谢谢“因此,如果您有多个数据库,它们应该有自己的池,并且这些池不应该相互干扰。”这正是我要查找的内容:-)听起来是时候通过运行这些测试来验证是否存在泄漏了。至少,我建议在出现此消息时检查数据库,看看是否真的有那么多打开的连接。