sqlserver dmv 动态管理视图 ,
sys.dm_exec_query_profiles: 该视图监视sql运行的实时进度。监视sql运行的每一步的详细情况。可以理解为执行计划的每一步的详细信息。区别是执行计划是预估的,这个视图展示的真实的情况。这个视图是sql运行性能剖析的重要的视图。
sys.dm_exec_connections:该视图返回与数据库示例链接的相关信息。
sys.dm_exec_sessions:该视图返回会话信息。每个会话是一条数据
sys.dm_exec_requests:该视图返回请求信息。每个请求是一条数据。
sys.dm_exec_sql_text:该函数返回sql_handl标识的sql语句。
sys.dm_exec_session_wait_stats:该视图返回会话的等待信息。和sys.dm_os_session_wait_stats 视图返回的信息类似。并且在sys.dm_os_session_wait_stats视图的官方文档页面可以查询到等待类型的具体信息。
sys.dm_tran_locks:该视图返回锁资源管理器的相关信息
SELECT distinct [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), start_time,
[User] = nt_username, [Status] = er.status,
[Wait] = wait_type,
[Individual Query] = SUBSTRING(qt.text, er.statement_start_offset / 2, (CASE WHEN er.statement_end_offset = - 1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text))
* 2 ELSE er.statement_end_offset END - er.statement_start_offset) / 2),
[Parent Query] = qt.text,
Program = program_name, Hostname,
nt_domain
FROM
sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE session_Id > 50 /* Ignore system spids.*/ AND session_Id NOT IN (@@SPID);
常用的方法
--1查看否存在阻塞进程,blocked>0都是当前被阻塞的进程
SELECT * FROM sys.sysprocesses WHERE blocked >0 ORDER BY blocked;
declare @spid varchar(10)
SELECT @spid =spid FROM sys.sysprocesses WHERE blocked >0 ORDER BY blocked;
--2 找到被阻塞的线程后,想要继续查看进程被谁阻塞,分析导致阻塞的源头
SELECT * FROM sys.sysprocesses WHERE spid =@spid --这是你要分析的进程ID
--3查看此进程执行的SQL 语句
DBCC inputbuffer(@spid);
--4 如果想要结束当前进程,KILL 掉当前导致阻塞的SQL
KILL @spid