当前位置:网站首页>Deadlock caused by non clustered index in SQL Server
Deadlock caused by non clustered index in SQL Server
2022-07-07 10:05:00 【knight_ hf】
Recently, a message sending function encountered a deadlock problem caused by non clustered indexes during the test , The following is what my partner summarized afterwards , Now share it .
( Because some content involves company information , So I only shared some of them , But it should not affect the overall reading )
Situation introduction
Table name is Receiver, Field has id( Primary key , Clustered index ),msgId( Nonclustered indexes ),receiver( Nonclustered indexes ),createTime,updateTime
The statements executed concurrently are
1、insert into Receiver select msgId,receiver,createTime,updateTime from tempTable 2、update Receiver set updateTime=#{} where msgId=#{} and receiver in (#{})Occurrence scenario
1、 Multithreading (100 individual ) perform Receiver Insert statement of
2、 Multithreading (8 Threads ) perform Receiver UPDATE statement of
Lock analysis
1、insert Statement execution time , First apply for the line where the record is inserted ( Or page 、 surface ) Of X lock ( Exclusive lock ), After record insertion , Applying for non clustered indexes X lock , Finish updating the index , When it's all done , Release what is held X lock
2、update Statement execution time , apply msgId In a nonclustered index U lock , adopt msgId The non clustered index gets the location of the record that needs to be updated , Then apply for the clustered index of the corresponding record U lock ( Update lock ), Because it does not involve the update of nonclustered indexes , So after the data update , all U The lock is released
Deadlock analysis
Let's first assume insert priority ,insert Successfully apply to the row with inserted data X lock , Because multiple records are inserted at one time , So the actual application is to aggregate index pages pagelock. After record insertion ,insert The process will apply msgId、updateTime Nonclustered index X lock . Suppose this time insert The process is suspended , The right of execution is given to update process .update Priority application msgId Nonclustered index U Lock to query the set of records that need to be updated , After finding the corresponding record , I will apply for these records U lock ( The same is pagelock). But because this data page has been insert The process adds X lock , So we can't add U lock , therefore update The process enters a waiting state . meanwhile ,insert The process also needs to apply for indexing X lock , But it has been update The process holds U lock . Last , The two processes enter the state of waiting for each other , A deadlock occurs .
What happened
1、 In the case of high concurrency update And insert
2、update Of where The non clustered index of the table is used in the condition
terms of settlement
modify update sentence
The original statement is
update Receiver set updateTime=#{
} where msgId=#{
} and receiver in (#{
})1、 Add row level lock
update Receiver with(rowlock) set updateTime=#{
} where msgId=#{
} and receiver in (#{
}) After changing to row level lock , Can significantly reduce insert Requested lock and update The requested lock coincides
Inferiority : When updating multiple records, multiple row level locks will be held , Previously, it was possible to hold only one page lock
2、where Add with(nolock)
update Receiver set updateTime=#{} where id in (select r.id from Receiver r with(nolock) where r.msgId=#{} and r.receiver in (#{}))边栏推荐
- The new activity of "the arrival of twelve constellations and goddesses" was launched
- In addition to the objective reasons for overtime, what else is worth thinking about?
- “十二星座女神降临”全新活动推出
- ViewPager2和VIewPager的區別以及ViewPager2實現輪播圖
- 【无标题】
- JS reverse tutorial second issue - Ape anthropology first question
- phpcms实现PC网站接入微信Native支付
- First issue of JS reverse tutorial
- 反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释
- Elaborate on MySQL mvcc multi version control
猜你喜欢

AI moves from perception to intelligent cognition

官媒关注!国内数字藏品平台百强榜发布,行业加速合规健康发展

First issue of JS reverse tutorial

The Himalaya web version will pop up after each pause. It is recommended to download the client solution

Pit encountered by vs2015 under win7 (successful)

Qualifying 3

基础篇:带你从头到尾玩转注解

农牧业未来发展蓝图--垂直农业+人造肉

“十二星座女神降临”全新活动推出

Official media attention! The list of top 100 domestic digital collection platforms was released, and the industry accelerated the healthy development of compliance
随机推荐
Internship log - day07
How to become a senior digital IC Design Engineer (5-3) theory: ULP low power design technology (Part 2)
Gym - 102219j kitchen plates (violent or topological sequence)
官媒关注!国内数字藏品平台百强榜发布,行业加速合规健康发展
Flinkcdc failed to collect Oracle in the snapshot stage. How do you adjust this?
CodeForces - 1324D Pair of Topics(二分或双指针)
Diffusion模型详解
Basic chapter: take you through notes
网上可以开炒股账户吗安全吗
为什么安装mysql时starting service报错?(操作系统-windows)
Application of C # XML
The combination of over clause and aggregate function in SQL Server
Agile course training
Do you have a boss to help look at this error report and what troubleshooting ideas are there? Oracle CDC 2.2.1 flick 1.14.4
The industrial chain of consumer Internet is actually very short. It only undertakes the role of docking and matchmaking between upstream and downstream platforms
小程序实现页面多级来回切换支持滑动和点击操作
中国首款电音音频类“山野电音”数藏发售来了!
How to become a senior digital IC Design Engineer (5-2) theory: ULP low power design technology (Part 1)
phpcms实现PC网站接入微信Native支付
First issue of JS reverse tutorial