--sp_who 可以指定数据库名,查询指定数据库的连接情况
sp_who
go
select DB_NAME(database_id) dbname, login_name, t1.session_id, t1.request_id, t2.status, t1.start_time, host_name
from sys.dm_exec_requests t1inner join sys.dm_exec_sessions t2 on t1.session_id = t2.session_id
go
--包含正在 Microsoft SQL Server 实例上运行的进程的相关信息。这些进程可以是客户端进程或系统进程。若要访问 sysprocesses,您必须位于 master 数据库上下文中,或者必须使用由三部分构成的名称 master.dbo.sysprocesses。
select * from sys.sysprocesses--查询指定数据库的连接情况
select *
from [Master].[dbo].[SYSPROCESSES]
where [DBID] in ( select [DBID]from [Master].[dbo].[SYSDATABASES]where name='bpm')
go---数据库系统所有请求情况
select s.session_id, s.status, db_name(r.database_id) as database_name, s.login_name, s.login_time, s.host_name,c.client_net_address, c.client_tcp_port, s.program_name, r.cpu_time, r.reads, r.writes, c.num_reads,c.num_writes, s.client_interface_name, s.last_request_start_time, s.last_request_end_time, c.connect_time,c.net_transport, c.net_packet_size, r.start_time, r.status, r.command, r.blocking_session_id, r.wait_type,r.wait_time, r.last_wait_type, r.wait_resource, r.open_transaction_count, r.percent_complete,r.granted_query_memory
from Sys.dm_exec_requests r with ( nolock )right outer join Sys.dm_exec_sessions s with ( nolock ) on r.session_id = s.session_idright outer join Sys.dm_exec_connections c with ( nolock ) on s.session_id = c.session_id
--where s.session_id > 50
order by s.login_timego---哪个用户连接数最多:
select login_name, COUNT(0) user_count
from Sys.dm_exec_requests r with ( nolock )right outer join Sys.dm_exec_sessions s with ( nolock ) on r.session_id = s.session_idright outer join Sys.dm_exec_connections c with ( nolock ) on s.session_id = c.session_id
where s.session_id > 50
group by login_name
order by 2 descgo
---哪台机器发起到数据库的连接数最多:
select s.host_name, c.client_net_address, COUNT(0) host_count
from Sys.dm_exec_requests r with ( nolock )right outer join Sys.dm_exec_sessions s with ( nolock ) on r.session_id = s.session_idright outer join Sys.dm_exec_connections c with ( nolock ) on s.session_id = c.session_id
where s.session_id > 50
group by host_name, client_net_address go--进程状态
select s.status, COUNT(0) host_count
from Sys.dm_exec_requests r with ( nolock )right outer join Sys.dm_exec_sessions s with ( nolock ) on r.session_id = s.session_idright outer join Sys.dm_exec_connections c with ( nolock ) on s.session_id = c.session_id
where s.session_id > 50
group by s.status
order by 2 descgo--查看数据库阻塞情况
select t1.resource_type as [lock type], db_name(resource_database_id) as [database],t1.resource_associated_entity_id as [blk object], t1.request_mode as [lock req] -- lock requested , t1.request_session_id as [waiter sid] -- spid of waiter , t2.wait_duration_ms as [wait time],( select textfrom sys.dm_exec_requests as r with ( nolock ) --- get sql for waiter cross apply sys.dm_exec_sql_text(r.sql_handle)where r.session_id = t1.request_session_id) as waiter_batch,( select substring(qt.text, r.statement_start_offset / 2,( case when r.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2else r.statement_end_offsetend - r.statement_start_offset ) / 2 + 1)from sys.dm_exec_requests as r with ( nolock )cross apply sys.dm_exec_sql_text(r.sql_handle) as qtwhere r.session_id = t1.request_session_id) as waiter_stmt --- statement executing now , t2.blocking_session_id as [blocker sid] --- spid of blocker , ( select textfrom sys.sysprocesses as p with ( nolock ) --- get sql for blocker cross apply sys.dm_exec_sql_text(p.sql_handle)where p.spid = t2.blocking_session_id) as blocker_stmt, getdate() time
from sys.dm_tran_locks as t1 with ( nolock ) ,sys.dm_os_waiting_tasks as t2 with ( nolock )
where t1.lock_owner_address = t2.resource_addressgoselect db_name(r.database_id) as database_name, COUNT(0) host_count
from Sys.dm_exec_requests r with ( nolock )right outer join Sys.dm_exec_sessions s with ( nolock ) on r.session_id = s.session_idright outer join Sys.dm_exec_connections c with ( nolock ) on s.session_id = c.session_id
where s.session_id > 50
group by r.database_id
order by 2 descgo--查看阻塞其他进程的进程(阻塞源头)
select t2.blocking_session_id,COUNT(0) counts
from sys.dm_tran_locks as t1 with(nolock) , sys.dm_os_waiting_tasks as t2 with(nolock)
where t1.lock_owner_address = t2.resource_address
group by blocking_session_id
order by 2go
--被阻塞时间最长的进程
select top 10t1.resource_type as [lock type], db_name(resource_database_id) as [database],t1.resource_associated_entity_id as [blk object], t1.request_mode as [lock req] -- lock requested , t1.request_session_id as [waiter sid] -- spid of waiter , t2.wait_duration_ms as [wait time],( select textfrom sys.dm_exec_requests as r with ( nolock ) --- get sql for waiter cross apply sys.dm_exec_sql_text(r.sql_handle)where r.session_id = t1.request_session_id) as waiter_batch,( select substring(qt.text, r.statement_start_offset / 2,( case when r.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2else r.statement_end_offsetend - r.statement_start_offset ) / 2 + 1)from sys.dm_exec_requests as r with ( nolock )cross apply sys.dm_exec_sql_text(r.sql_handle) as qtwhere r.session_id = t1.request_session_id) as waiter_stmt --- statement executing now , t2.blocking_session_id as [blocker sid] --- spid of blocker , ( select textfrom sys.sysprocesses as p with ( nolock ) --- get sql for blocker cross apply sys.dm_exec_sql_text(p.sql_handle)where p.spid = t2.blocking_session_id) as blocker_stmt, getdate() time
from sys.dm_tran_locks as t1 with ( nolock ) ,sys.dm_os_waiting_tasks as t2 with ( nolock )
where t1.lock_owner_address = t2.resource_address
order by t2.wait_duration_ms desc