sql server 表被另外一张表锁

今天在sql server 锁报表中,查到表A,被表B的进程阻塞,很是怀疑是不是有问题,在测试环境自己测试如下:

sql 复制代码
<blocked-process-report monitorLoop="15930">
 <blocked-process>
  <process id="process2a76206f088" taskpriority="0" logused="0" waitresource="KEY: 7:72057594042712064 (8194443284a0)" waittime="31677" ownerId=" ver Management Studio - 查询" hostname="xx" hostpid="16952" loginname="xx" isolationlevel="read committed (2)" xactid="57 
   <executionStack>
    <frame line="2" stmtstart="70" stmtend="158" sqlhandle="0x02000000c7fda51c492cd5728447ae24bb54967afddb674300000000000000000000000000000000000 
    <frame line="2" stmtstart="4" stmtend="92" sqlhandle="0x02000000e9e5811cb0c129bc2a0e0e16f93f315c7289ff0e0000000000000000000000000000000000000 
   </executionStack>
   <inputbuf>

update [dbo].[t01] 
set a='a02'
where c='b'   </inputbuf>
  </process>
 </blocked-process>
 <blocking-process>
  <process status="suspended"  《生产环境中的status 是sleeping》 waittime="34349" spid="57" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2026-01-29T09:30:36.197"  
   <executionStack>
    <frame line="10" stmtstart="228" stmtend="288" sqlhandle="0x020000003cf18f030ea3e7bcae65b7f0824a363107a1382e0000000000000000000000000000000000000000" />
   </executionStack>
   <inputbuf>
begin tran 

update [dbo].[t01] 
set a='a01'
where  c is null  


select * from [dbo].[t01] 
where id=1 
WAITFOR DELAY '00:00:50';


commit;


select * from [dbo].[t01]   </inputbuf>
  </process>
 </blocking-process>
</blocked-process-report>

dbo\].\[t01\] 表的更新在where 条件中的字段是没有索引的,如果更新,无论走哪个索引的执行计划,都会有FULL表的锁,这个时候再执行其他语句,不提交事务,就会一直处于等待状态,( 《生产环境中的status 是sleeping》我这里的是 suspended ,有可能需要用应用的客户端程序才可以复现出来) 而另外一个事务要更新表 \[dbo\].\[t01\] ,就会一直等待,就会出现锁的情况。 分析应该是如下情况: 第一个进程修改数据没有提交,一直在等待,在阻塞的进程报表里看看就会出现表A,被表B的进程阻塞的情况,有可能该进程的前一条的更新语句是更新语句, 并且where条件是没有索引的,会锁全表。 解决方案: 建议在where条件增加索引,即使where条件是相同的列,不修改相同的记录,是不会出现U(更新)锁的

相关推荐
2501_927993535 小时前
SQL Server 2022安装详细教程(图文详解,非常详细)
数据库·sqlserver
山岚的运维笔记7 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
山岚的运维笔记1 天前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
Traced back2 天前
SQL Server 核心语法+进阶知识点大全(小白版)
数据库·sqlserver
山岚的运维笔记2 天前
SQL Server笔记 -- 第14章:CASE语句
数据库·笔记·sql·microsoft·sqlserver
松涛和鸣2 天前
70、IMX6ULL LED驱动实战
linux·数据库·驱动开发·postgresql·sqlserver
UpYoung!3 天前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
运维·数据库·sqlserver·运维开发·数据库管理·开发工具·sqlserver2019
知识分享小能手3 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 数据表的操作 —语法详解与实战案例(3)
数据库·学习·sqlserver
知识分享小能手3 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
山岚的运维笔记3 天前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver