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

asp.net – 如何监视SQL Server中的活动连接池?

发布时间:2020-12-15 23:37:00 所属栏目:asp.Net 来源:网络整理
导读:我怀疑我的Web应用程序有连接泄漏(获取超时和最大连接达到错误).所以我想监视池中有多少数据库连接是活动的.我正在使用SQL Express,所以我没有在一些帮助指南中建议的用户连接性能计数器. 我发现我也可以使用Win 2008服务器的性能监视器,但我不知道如何做到
我怀疑我的Web应用程序有连接泄漏(获取超时和最大连接达到错误).所以我想监视池中有多少数据库连接是活动的.我正在使用SQL Express,所以我没有在一些帮助指南中建议的用户连接性能计数器.

我发现我也可以使用Win 2008服务器的性能监视器,但我不知道如何做到这一点.任何指导,将不胜感激.

解决方法

使用简单
SELECT * FROM sys.dm_exec_connections

要么

如果您需要其他数据,请尝试并采用此脚本

declare @now    datetime
set     @now    = getdate()
set nocount off
select  p.spid                      as  spid,rtrim(p.loginame)           as  SQLUser,rtrim(p.nt_username)        as  NTUser,rtrim(p.nt_domain)          as  NTDomain,rtrim(case
        when p.blocked <> 0 then 'BLOCKED'
        else p.status
        end)                        as status,case 
        when p.blocked is null or p.blocked = 0 then ''     
        else convert(varchar(10),p.blocked)
        end                         as  BlockedBySpid,rtrim(p.cmd)                as  CurrentCommand,case when p.dbid = 0 then '' else rtrim(db_name(p.dbid)) end    as  DBName,isnull(rtrim(p.program_name),'')        as  ProgramName,cast( cast(p.waittype as int) as nvarchar(10)) as  CurrentWaitType,p.waittime              as  CurrentWaitTime,p.lastwaittype              as  LastWaitType,rtrim(p.waitresource)       as  LastWaitResource,p.open_tran                 as  OpenTransactionCnt,p.cpu                       as  CPUTime,convert(bigint,p.physical_io) as   DiskIO,p.memusage                  as  MemoryUsage,p.hostprocess               as  HostProcess,rtrim(p.hostname)           as  HostName,p.login_time                as  LoginTime,p.last_batch                as  LastBatchTime,p.net_address               as  NetAddress,ltrim(rtrim(p.net_library)) as  NetLibrary,case 
        when    lower(p.status) not in ('sleeping','background','dormant','suspended') 
        or      p.open_tran > 0
        or      p.blocked   > 0
        or      upper(ltrim(rtrim(p.cmd))) like 'WAITFOR%'
        then    'Y'
        else    'N'
        end                         as  Active,case
        when    p.net_address <> '' --  Non system processes
        and     p.program_name not like 'SQLAgent - %'
        then 'N'
        else 'Y'
        end                         as  SystemProcess,case 
        when p.last_batch = '19000101'      then 'n/a'
        when datediff(day,p.last_batch,@now) >   2   then convert(varchar(10),datediff(day,@now)) + ' days'
        when datediff(hour,@now) >=  4   then convert(varchar(10),datediff(hour,@now)) + ' hrs'
        when datediff(minute,@now) >=  10  then convert(varchar(10),datediff(minute,@now)) + ' min'
        else convert(varchar(10),datediff(second,@now)) + ' sec'
        end                         as  TimeSinceLastBatch,p.kpid                      as  InternalKPID,case    
        when    (lower(p.status) in ('background','dormant') 
        and     p.open_tran <= 0
        and     p.blocked   <= 0
        and     upper(ltrim(rtrim(p.cmd))) not like 'WAITFOR%'
        ) or (
        lower(p.status) like '%sleeping%'
        )
        then    0
        else    p.kpid
        end                         as  kpid,(convert(nvarchar,p.spid) + '.' + case    
                                        when    (lower(p.status) in ('background','dormant') 
                                        and     p.open_tran <= 0
                                        and     p.blocked   <= 0
                                        and     upper(ltrim(rtrim(p.cmd))) not like 'WAITFOR%'
                                        ) or (
                                        lower(p.status) like '%sleeping%'
                                        )
                                        then    '0'
                                        else    convert(nvarchar,p.kpid)
                                        end) + '.' + convert(nvarchar,convert(float,p.login_time)) as SessionLifeTimeKey,p.login_time) as 'LoginTimeFloatDiff'
from    sys.sysprocesses            p   with (readpast)

(编辑:李大同)

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

    推荐文章
      热点阅读