[英]How to monitor active connection pool in SQL Server?
I'm suspecting that my web application has connection leaks (getting the timeout and max connection reached error). 我怀疑我的Web应用程序有连接泄漏(获得超时和最大连接到达错误)。 So I wanted to monitor how many database connections are active in the pool.
所以我想监视池中活动的数据库连接数。 I'm using the SQL Express so I don't have User Connections performance counter as suggested in some help guides.
我正在使用SQL Express,因此我没有一些帮助指南中建议的用户连接性能计数器。
I do found that I could also use Performance Monitor of Win 2008 server but I've no idea how to do so. 我发现我也可以使用Win 2008服务器的性能监视器,但我不知道该怎么做。 Any guide on that would be appreciated.
任何指南都将不胜感激。
Use simple 使用简单
SELECT * FROM sys.dm_exec_connections
OR 要么
Try and adopt this script in case if you need some other data 如果您需要其他数据,请尝试并采用此脚本
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)
This will give number of connections per database, per user: 这将为每个用户提供每个数据库的连接数:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
;
You can execute built-in stored procedure 您可以执行内置存储过程
exec sp_who
exec sp_who2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.