sql-server – 如何跟踪数据库连接泄漏

前端之家收集整理的这篇文章主要介绍了sql-server – 如何跟踪数据库连接泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个似乎有连接泄漏的应用程序(sql Server表示已达到最大池大小).我独自在我的开发机器上(很明显),只是通过导航应用程序,我触发了这个错误. sql Server活动监视器使用我的数据库显示大量进程.

我想找到哪些文件打开连接但不使用它.我正在考虑使用像grep这样的东西,为每个文件计算“.Open()”的数量和“.Close()”的数量,并获得数字不相等的文件.
这是现实的吗?

加分问题:sql Server活动监视器中找到的进程是否与连接相对应?如果没有,我如何找出我的数据库中打开了多少个连接?

该应用程序在asp.net(vb)3.5,与sql Server 2005.我们目前不使用LINQ(尚未)或类似的东西.

谢谢

解决方法

查看sql Server端的代码时,可以运行以下查询获取上次在休眠连接上运行查询的视图. (打开连接什么都不做)
SELECT ec.session_id,last_read,last_write,text,client_net_address,program_name,host_process_id,login_name
FROM sys.dm_exec_connections  ec
JOIN sys.dm_exec_sessions es
  ON ec.session_id = es.session_id
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS dest
where es.status = 'sleeping'

从应用程序端,您可以使用sos.dll进行调试,如以下文章中所述:

> How to troubleshoot leaked SqlConnection Objects Part 1
> How to troubleshoot leaked SqlConnection Objects Part 2

如果您需要有关如何使用windbg的更多信息,这些文章是一个很好的介绍:

> Getting Started with WinDBG Part 1
> Getting Started with WinDBG Part 2

原文链接:https://www.f2er.com/mssql/77089.html

猜你在找的MsSQL相关文章