当前位置:首页 > 网络编程 > 数据库 > Mysql > 锁的问题

锁的问题

点击次数:32 次 发布日期:2008-11-22 16:57:12 作者:源代码网
源代码网推荐

在老是出现这样的错误提示!

-2147467259 Your transaction(process ID #30) was deadlocked with another process and has been chosen as the deadlock victim.Return your transaction.


use master
go
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500),@temp varchar(1000)
declare @spid int
set @sql="declare getspid cursor for
select spid from sysprocesses where dbid=db_id("""+@dbname+""")"
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
set @temp="kill "+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
--用法
use master
exec killspid "数据库名"

死锁可以查一下:
1:sp_who 或 sp_who2
2: Select * from sysprocesses where blocked <> 0
3: 企业管理器->服务器->管理工具->活动->当前活动 然后把他kill掉。。。
4:SQL事件探查器,监控一下,看主要是那些处理引起的死锁.然后做相应的处理.
用事件探查器new一个trace,监视一下造成你sqlserver停顿的情况。。。
最好的办法还是检查一下引起锁的原因,一般是由你的代码引起的。


SQL事件探查器用法
开始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建
--设置跟踪的项目...
--然后数据库的调用情况就会显示出

--查看锁信息
select 进程id=req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then "NULL 资源(未使用)"
when 2 then "数据库"
when 3 then "文件"
when 4 then "索引"
when 5 then "表"
when 6 then "页"
when 7 then "键"
when 8 then "扩展盘区"
when 9 then "RID(行 ID)"
when 10 then "应用程序"
end
,rsc_objid,rsc_indid
from master..syslockinfo

 

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华