SQL SERVER 数据库中经常会出现锁表得情况
出现该情况得原因一般是:
1,字段不加索引:在执行事务的时候,如果表中没有索引,会执行全表扫描,如果这时候有其他的事务过来,就会发生锁表!
2,事务处理时间长:事务处理时间较长,当越来越多事务堆积的时候,会发生锁表!
3,关联操作太多:涉及到很多张表的修改等,在并发量大的时候,会造成大量表数据被锁!
解决该问题的方法有:
- 通过相关的sql语句可以查出是否被锁定,和被锁定的数据
- 为加锁进行时间限定,防止无限死锁
- 加索引,避免全表扫描
- 尽量顺序操作数据
- 根据引擎选择合理的锁粒度
- 事务中的处理时间尽量短
出现锁表后就需要相应的解锁操作
1.查询锁表的进程;
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type=‘OBJECT’文章来源:https://www.toymoban.com/news/detail-510724.html
2.解锁语句,需要将锁表进程 @spid换成查询出来的锁表进程;
declare @spid int
Set @spid = 65 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
文章来源地址https://www.toymoban.com/news/detail-510724.html
到了这里,关于SqlServe查看锁表和解锁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!