gpt4 book ai didi

asp.net - 如何监控 SQL Server 中的事件连接池?

转载 作者:行者123 更新时间:2023-12-03 11:35:37 26 4
gpt4 key购买 nike

我怀疑我的 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, p.last_batch, @now)) + ' days'
when datediff(hour, p.last_batch, @now) >= 4 then convert(varchar(10),datediff(hour, p.last_batch, @now)) + ' hrs'
when datediff(minute, p.last_batch, @now) >= 10 then convert(varchar(10),datediff(minute, p.last_batch, @now)) + ' min'
else convert(varchar(10),datediff(second, p.last_batch, @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
, convert(float, p.login_time) as 'LoginTimeFloatDiff'
from sys.sysprocesses p with (readpast)

关于asp.net - 如何监控 SQL Server 中的事件连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com