针对脚本进行分析,发现引起该问题的原因是,在UNION ALL子查询时,只对部分子查询进行了WHERE过滤,导致查询大量冗余数据引起的。经过对其他子查询增加过滤后,问题得以解决。
SQLServer数据库定位以及解决锁表问题问题背景解决方法查询锁表记录定位锁表脚本原因分析问题背景系统中个别功能操作时,出现偶发卡顿的情况。经查询数据库锁表记录,发现与该业务相关的一张数据表频繁被锁表。如何根据锁表记录,来定位具体sql或者存储过程?解决方法查询锁表记录首先通过以下脚本来获取所有的锁表进程id以及被锁表名,根据卡顿业务涉及到的数据表,来筛选相关的锁表进程id。SELECT request_session_id AS 锁表进程, OBJECT_NAME(resource_asso
查询被锁住的表
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
查询结果,前面是锁的进程id,后面是被锁的表名
解除表锁定:将spid的值改为要杀死的进程...
某些情况下,sqlserver的表会被锁住,比如某个会话窗口有数据一直没提交,窗口又没关闭,这时表就会被锁住
其他任何连接查询表数据时都不会返回
这时需要手工杀掉产生死锁的会话ID,才能恢复正常
查看被锁表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from ...
https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-showcontig-transact-sql?view=sql-server-ver15
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-db-index-physical-stats-transact-s
查看被锁表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
spid 锁表进程
在SqlServer中,项目中需要写到存储过程,但是有些刚接触的小伙伴,可能会出现写了begin,没有end的情况,这种SQL语句可以保存到存储过程中,但是在执行存储过程的时候会出现锁的情况,这个时候就需要我们去进行解锁;
解锁语句如下:
先运行下方的select语句,查询出 锁的进程;
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran..