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

相关推荐
zxrhhm21 小时前
SQLServer限制特定数据库的CPU使用率,确保关键业务系统有足够的资源
数据库·sqlserver
VIV-1 天前
医院病房管理系统的数据库设计(SQL Server)
数据库·sql·sqlserver
APguantou3 天前
NCRE-三级数据库技术-第9章-安全管理
数据库·安全·sqlserver
APguantou6 天前
NCRE-三级数据库技术-第12章-备份与数据库恢复
数据库·sqlserver
WarPigs7 天前
SQL Server笔记
服务器·数据库·sqlserver
遇见你...7 天前
A02 Spring-IOC和DI注解开发
数据库·spring·sqlserver
无人机9018 天前
Delphi网络编程综合实战:多协议网络工具开发(TCP/UDP/HTTP三合一)
sqlserver·eureka·时序数据库·etcd
lifewange9 天前
Java 自动化测试参数化实现
java·数据库·sqlserver
-Da-9 天前
【ai应用开发日记】通用未注入Bean AI提示词
java·数据库·人工智能·spring boot·sqlserver
不愿透露姓名的大鹏9 天前
SQL Server数据库的LDF文件过大的清理方式
数据库·sqlserver