<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      日常Bug排查-MVCC和for update混用導致讀數據不一致

      日常Bug排查-MVCC和for update混用導致讀數據不一致

      前言

      日常Bug排查系列都是一些簡單Bug的排查。筆者將在這里介紹一些排查Bug的簡單技巧,同時順便積累素材。

      Bug現場

      又是喜聞樂見的讀數據不一致的問題。這次的問題是這樣,業務在一個事務中更新A和B兩個表的兩個數據。但是在另一個事務中只看到了A的更新,而B依舊是更新之前的值。說好的原子性感覺又被打破了。如下圖所示:

      思路

      在將這兩個請求的SQL按照時序畫出來的時候,筆者立馬就明白了相關問題所在。核心就在于數據庫是RR隔離級別的,同時業務在查詢A的時候使用的是Select for update,在查詢B的時候使用的是普通的Select。這么使用的原因可能是覺得所有的查詢都需要先查A再查B,那么只需要對A加鎖就行,減少了數據庫鎖的數量。
      但是,這里是有一個問題的,就是對B表的查詢用的是普通的Select,也就是使用了MySQL的MVCC機制。而MySQL MVCC的默認創建時刻就是事務的第一個不帶for update的普通Select(具體原理見筆者的博客https://my.oschina.net/alchemystar/blog/1927425)。那么我們就可以從上面的SQL順序可以看到,在事務1開始之前就已經創建了視圖,此時的視圖是A1和B1。那么由于RR,查詢B表的普通Select看到的自然是B1,而select for update不走MVCC,于是看到的是A2。如下圖所示:

      解決方案

      讓業務對B表的查詢也用Select for update即可,相比于不一致增加的一點非熱點行鎖的性能可以忽略不計。

      總結

      MVCC和數據庫鎖兩者采用了不同的機制,如果不清楚其中的原理可能會導致不一致的現象出現。同時,在這次的問題中業務對于B表不用鎖這樣的優化實際上是一個負優化。這再次提醒我們,不要過早優化!

      posted @ 2024-06-03 09:00  無毀的湖光-Al  閱讀(375)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 乐陵市| 亚洲国产精品国自拍av| 国内精品一区二区在线观看| 日韩高清亚洲日韩精品一区二区| 国产高颜值不卡一区二区| 欧美性猛交xxxx乱大交丰满| 亚洲综合精品第一页| 亚洲人成人无码网WWW电影首页| 少妇高潮喷水正在播放| 蜜桃av亚洲精品一区二区| 无码抽搐高潮喷水流白浆| 榆林市| 免费看黄色亚洲一区久久| 柳州市| 国产成人av电影在线观看第一页| 精品国产成人国产在线视| 52熟女露脸国语对白视频| 精品久久久久中文字幕日本| 国产精品无码不卡在线播放| 日韩亚av无码一区二区三区| 察雅县| 人妻少妇无码精品专区| 老色鬼在线精品视频在线观看| 日韩免费无码视频一区二区三区| 亚洲成人四虎在线播放| 99久久久无码国产精品免费| 亚洲男人天堂一级黄色片| 国产精品一码在线播放| 亚洲爆乳WWW无码专区| 亚洲精品成人无限看| 国产91精选在线观看| 日本夜爽爽一区二区三区| 成人性生交大片免费看r链接| 国产精品午夜福利资源| 欧美丰满熟妇xxxx性ppx人交| 精品少妇后入一区二区三区| 久久精品国产精品亚洲蜜月| 日本东京热一区二区三区| 中国女人内谢69xxxx| 国产欲女高潮正在播放| 性色av无码不卡中文字幕|