SQLServer+.net 事务锁表问题
时间:2021-07-01 10:21:17
帮助过:3人阅读
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks
where resource_type=
‘OBJECT‘
--
spid 锁表进程
--
tableName 被锁表名
解锁:
declare @spid int
Set @spid =
57 --
锁表进程
declare @sql varchar(1000)
set @sql=
‘kill ‘+cast(@spid
as varchar)
exec(@sql)
--
查询出死锁的SPID
select 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)
--
输出引起死锁的操作
DBCC INPUTBUFFER (@spid)
--
查询当前进程数
select count(-
1)
from sysprocesses
where dbid
in (
select dbid
from sysdatabases
where name like
‘%telcount%‘);
3:最后发现原因,原因在于,delete操作时如果是删除指定一条记录,SQLServer就会对该条记录进行了行锁定,这时如果再查询该条记录,就会造成死锁。
同样的SQL语句和操作。我在Oracle中从来没有发现过,所以造成这个问题找了半天。
4:最后修改程序。对于锁定的记录不再进行查询操作。
SQLServer+.net 事务锁表问题
标签:过程 查看 style strong 启动 ast 被锁 spi sts