码迷,mamicode.com
首页 > 其他好文 > 详细

select 时进行update的操作,在高并发下引起死锁

时间:2018-06-08 15:59:25      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:查看   其他   出现   pos   并发   加锁   date   xxxx   阅读   

场景:当用户查看帖子详情时,把帖子的阅读量:ReadCount+1

select title,content,readcount from post where id=‘xxxx‘   --根据主键查询帖子

update post set readcount=readcount+1 where id=‘xxxx‘

 

------------------------------为什么会出现死锁呢?---------------------------------

在网上找到一种说法:

就是说,某个query使用非聚集索引来select数据,那么它会在非聚集索引上持有一个S锁。当有一些select的列不在该索引上,它需要根据rowid找到对应的聚集索引的那行,然后找到其他数据。而此时,第二个的查询中,update正在聚集索引上忙乎:定位、加锁、修改等。但因为正在修改的某个列,是另外一个非聚集索引的某个列,所以此时,它需要同时更改那个非聚集索引的信息,这就需要在那个非聚集索引上,加第二个X锁。select开始等待update的X锁,update开始等待select的S锁,死锁,就这样发生鸟。

select 时进行update的操作,在高并发下引起死锁

标签:查看   其他   出现   pos   并发   加锁   date   xxxx   阅读   

原文地址:https://www.cnblogs.com/25miao/p/9155694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!