加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:04:24 所属栏目:MsSql教程 来源:网络整理
导读:我们有一个似乎有连接泄漏的应用程序(SQL Server表示已达到最大池大小).我独自在我的开发机器上(很明显),只是通过导航应用程序,我触发了这个错误. SQL Server活动监视器使用我的数据库显示大量进程. 我想找到哪些文件打开连接但不使用它.我正在考虑使用像grep
我们有一个似乎有连接泄漏的应用程序(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读