sqlserver数据库发生死锁处理
发布时间:2020-12-12 13:36:07 所属栏目:MsSql教程 来源:网络整理
导读:SQLSERVER数据库锁表1.?查看被锁的表???select?request_session_id???spid,OBJECT_NAME(resource_associated_entity_id)?tableName??????from?sys.dm_tran_locks?where?resource_type='OBJECT'2.?解除表的锁定???declare?@spid??int????Set?@spid??=?57?--锁
SQLSERVER数据库锁表 1.?查看被锁的表 ???select?request_session_id???spid,OBJECT_NAME(resource_associated_entity_id)?tableName??? ???from?sys.dm_tran_locks?where?resource_type='OBJECT' 2.?解除表的锁定 ???declare?@spid??int? ???Set?@spid??=?57?--锁表进程 ???declare?@sql?varchar(1000) ???set?@sql='kill?'+cast(@spid??as?varchar) ???exec(@sql) 3.?查询数据库死锁的信息 ??????CREATE?procedure?sp_who_lock??? as????? begin????? ???declare?@spid?int????? ???declare?@blk?int????? ???declare?@count?int????? ???declare?@index?int????? ???declare?@lock?tinyint?????? ???set?@lock=0?????? ???create?table?#temp_who_lock?????? ?(?????? ??id?int?identity(1,1),?????? ??spid?int,?????? ??blk?int????? ?)?????? ?if?@@error<>0?return?@@error?????? ?insert?into?#temp_who_lock(spid,blk)?????? ?select?0?,blocked??????? ?from?(select?*?from?master..sysprocesses?where?blocked>0)a?????? ?where?not?exists(select?*?from??master..sysprocesses?where?a.blocked?=spid?and?blocked>0)?????? ?union?select?spid,blocked?from??master..sysprocesses?where?blocked>0?????? ?if?@@error<>0?return?@@error?????? ?select?@count=count(*),@index=1?from?#temp_who_lock?????? ?if?@@error<>0?return?@@error?????? ?if?@count=0?????? ?begin????? ??select?'没有阻塞和死锁信息'????? ??return?0?????? ?end????? ?while?@index<=@count?????? ?begin????? ??if?exists(select?1?from?#temp_who_lock?a?where?id>@index?and?exists(select?1?from?#temp_who_lock?where?id<=@index?and?a.blk=spid))?????? ??begin????? ???set?@lock=1?????? ???select?@spid=spid,@blk=blk?from?#temp_who_lock?where?id=@index????? ???select?'引起数据库死锁的是:?'+?CAST(@spid?AS?VARCHAR(10))?+?'进程号,其执行的SQL语法如下'????? ???select??@spid,?@blk???? ???dbcc?inputbuffer(@spid)?????? ???dbcc?inputbuffer(@blk)?????? ??end????? ??set?@index=@index+1?????? ?end????? ?if?@lock=0??????? ?begin????? ??set?@index=1?????? ??while?@index<=@count?????? ??begin????? ???select?@spid=spid,@blk=blk?from?#temp_who_lock?where?id=@index????? ???if?@spid=0?????? ????select?'引起阻塞的是:'+cast(@blk?as?varchar(10))+?'进程号,其执行的SQL语法如下'????? ???else?????? ????select?'进程号SPID:'+?CAST(@spid?AS?VARCHAR(10))+?'被'?+?'进程号SPID:'+?CAST(@blk?AS?VARCHAR(10))?+'阻塞,其当前进程执行的SQL语法如下'????? ???dbcc?inputbuffer(@spid)???? ???dbcc?inputbuffer(@blk)?????? ???set?@index=@index+1?????? ??end????? ?end????? ?drop?table?#temp_who_lock?????? ?return?0?????? end??????????? ? ? GO 4.??设置数据库锁的级别 ????READ_COMMITTED_SNAPSHOT??ON ???? ????使用基于行版本控制的隔离级别?(SQL?Server?2005?支持?)?:开启下面的选项后,?SELECT?不会对请求的资源加?S?锁,不加锁或者加?Sch-S?锁, ????从而将读与写操作之间发生的死锁几率降至最低;而且不会发生脏读 ????ALTER?DATABASE?EBCMKS?SET?ALLOW_SNAPSHOT_ISOLATION?ON ????ALTER?DATABASE?EBCMKS?SET?READ_COMMITTED_SNAPSHOT?ON (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具
- SQL Server误区30日谈 第30天 有关备份的30个误区
- mssqlserver字符串日期互相转换
- 设计模式——简单工厂
- sql-server-2008 – SQL Server Express的任务调度程序
- 10台PC 2亿数据量任意查询不到0.3秒, 插入 650万条数据仅用
- 在PowerDesigner中设计概念模型
- sql – 从具有重试详细信息的表(id和重试计数)中检索失败的
- sql-server – SQL Server HW Config – 您更愿意拥有(磁盘
- sqlserver cpu,io性能指标