查询数据库中进程死锁情况脚本。
2012-04-26 11:17
423 查看
查询数据库中进程死锁情况,脚本。
其它查询正在执行进程信息
USE [master] GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 04/26/2012 11:13:51 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[sp_who_lock] AS BEGIN DECLARE @spid int, @bl int, @intTransactionCountOnEntry int, @intRowcount int, @intCountProperties int, @intCounter int DECLARE @tmp_lock_who TABLE ( id INT IDENTITY(1,1), spid SMALLINT, bl SMALLINT ) INSERT INTO @tmp_lock_who(spid,bl) SELECT 0, blocked FROM ( SELECT * FROM SysProcesses WHERE blocked > 0 ) a WHERE NOT EXISTS ( SELECT * FROM (SELECT * FROM SysProcesses WHERE blocked > 0 ) b WHERE a.blocked = spid ) UNION SELECT spid, blocked FROM SysProcesses WHERE blocked > 0 -- 找到临时表的记录数 SELECT @intCountProperties = Count(*),@intCounter = 1 FROM @tmp_lock_who IF @intCountProperties=0 SELECT '现在没有阻塞和死锁信息' AS [Message] -- 循环开始 WHILE @intCounter <= @intCountProperties BEGIN -- 取第一条记录 SELECT @spid = spid, @bl = bl FROM @tmp_lock_who WHERE Id = @intCounter BEGIN IF @spid =0 SELECT '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' ELSE SELECT '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' DBCC INPUTBUFFER (@bl ) END -- 循环指针下移 SET @intCounter = @intCounter + 1 END END
其它查询正在执行进程信息
WITH tb AS ( SELECT blocking_session_id,session_id,DB_NAME(database_id) as dbname, [text] FROM master.Sys.dm_exec_requests a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) ), tb1 as ( SELECT a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)', total_scheduled_time,reads,writes,logical_reads FROM tb a INNER JOIN master.sys.dm_exec_sessions b ON a.session_id=b.session_id ) SELECT a.*,connect_time,client_tcp_port,client_net_address FROM tb1 a INNER JOIN master.sys.dm_exec_connections b ON a.session_id=b.session_id GO -- 查出互相死锁的进程信息 USE MASTER GO SELECT a.* FROM sysprocesses a, sysprocesses b WHERE a.blocked > 0 and b.blocked > 0 and a.spid != b.spid and a.blocked = b.spid and b.blocked = a.spid GO
相关文章推荐
- db2监视表空间使用情况、中断数据库连接进程的脚本示例
- oracle死锁语句查询 以及杀掉死锁数据库进程
- 数据库 死锁查询和杀死死锁进程
- 查询数据库死锁进程
- 查看存储过程,查看死锁进程语句,查询表占的空间,数据库连接
- sqlserver 查询db死锁情况
- 查询数据库空间使用情况
- Shell脚本查看进程内存真实占用情况
- 通过plsql查询当前连接的数据库的配置情况,如查询oracle的安装地址,和oracle的tns配置
- Laravel大量数据库查询导致php进程内存耗尽
- oracle 中查询被锁的对象,并杀死死锁进程的方法
- 查询数据库的空间使用情况
- 如何在当前连接的数据库建立查询语句或编辑数据库脚本
- 通过VirtualQuery查询当前进程虚拟内存使用情况
- 查询内并行度导致服务器命令(进程 ID #66)死锁。请重新运行该查询,并在查询中用查询暗示选项 (maxdop 1) 去掉查询内并行度
- Linux下实现脚本监测特定进程占用内存情况
- 多个相同名称进程的情况下 python脚本监控某个进程
- [shell] 多进程脚本分析CVE数据库信息
- 一键获取数据库整体的运行情况--脚本
- 查询数据库当前连接数(session),进程数等操作