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(更新)锁的

相关推荐
姜太小白1 天前
【SQLServer】SQL Server 2022 连接证书错误解决
网络·数据库·sqlserver
gaozhiyong08132 天前
SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)
spring boot·mysql·sqlserver
源远流长jerry5 天前
dpdk19.08编译问题解决方案
数据库·postgresql·sqlserver
全栈小55 天前
【数据库】Sql Server 安装教程,一键到底,沉浸式下载安装MSSQL和SSMS
数据库·sqlserver
Msshu1238 天前
多协议快充取电芯片 支持与主板MCU共用D+D-网络可取电可与电脑传输数据
elasticsearch·sqlserver·flink·rabbitmq·storm
夏光芒8 天前
SQLSERVER数据库常用语句
数据库·sqlserver
北京_小杰子22 天前
Windows10本地安装SQLserver数据库连接的过程
数据库·windows·sqlserver·php
山岚的运维笔记23 天前
SQL Server笔记 -- 第86章:查询存储
笔记·python·sql·microsoft·sqlserver·flask
汇智信科23 天前
汇智信科网络考试系统:以技术赋能,重构在线测评新范式
linux·数据库·mysql·oracle·sqlserver·java技术
山岚的运维笔记24 天前
SQL Server笔记 -- 第85章:查询提示
数据库·笔记·sql·microsoft·sqlserver