精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL:Innodb 唯一索引出現重復值的場景分析

數據庫
當我們進行數據插入的時候,對于唯一索引,實際上大概會經歷數據查找,唯一性檢查、數據插入三個階段。

最近遇到類似案例,這里將可能出現這種情況的2個場景描述一下,其中一種情況在翻看老葉的公眾號有類似文章,如下,

故障案例:MySQL唯一索引有重復值,官方卻說This is not a bug

我們分別描述。

場景1 unique_checks = 0

1.原理

當我們進行數據插入的時候,對于唯一索引,實際上大概會經歷數據查找,唯一性檢查、數據插入 3個階段。而對于普通索引來講如果page不在buffer pool中則可能在數據查找階段就會寫入到ibuff,這種情況就等待后續的ibuff合并即可。

但是我們一旦設置了unique_checks=0,對于唯一索引(非主鍵)而言也可能走普通索引的方式,我們大概看看是如何改變的,首先根據設置,事務檢查唯一索引的標記會設置為如下,

  trx->check_unique_secondary =
      !thd_test_options(thd, OPTION_RELAXED_UNIQUE_CHECKS);

然后在插入階段,row_ins_sec_index_entry_low函數首先會根據是否檢查唯一性將search_mode 設置上BTR_IGNORE_SEC_UNIQUE標記,search_mode 的值很多,主要包含2類,A:讀寫鎖模式/B:操作方式,他們各自占用不同的bit位。

if (!thr_get_trx(thr)->check_unique_secondary) {search_mode |= BTR_IGNORE_SEC_UNIQUE;}

接下來就是查找數據調用btr_cur_search_to_nth_level上層函數,進行數據定位,然后在其中判定,

case BTR_INSERT:
      btr_op = (latch_mode & BTR_IGNORE_SEC_UNIQUE)
                   ? BTR_INSERT_IGNORE_UNIQUE_OP
                   : BTR_INSERT_OP;
      break;

如果為insert且latch_mode帶有BTR_IGNORE_SEC_UNIQUE,設置btr_op為BTR_INSERT_IGNORE_UNIQUE_OP。

最后在判定是否能夠使用ibuf上,我們看到如下,

    if (btr_op != BTR_NO_OP && 
        ibuf_should_try(index, btr_op != BTR_INSERT_OP)) { //是否進入 ibuf
      /* Try to buffer the operation if the leaf
      page is not in the buffer pool. */

      fetch = btr_op == BTR_DELETE_OP ? Page_fetch::IF_IN_POOL_OR_WATCH //這里和 WATCH和purge線程有光
                                      : Page_fetch::IF_IN_POOL; //bug page get gen 只看是否在buffer中
    }

而函數ibuf_should_try就是判定是否使用ibuf,一旦使用ibuf,當然修改的相關page就不一定非要在buffer pool中,因此對于insert操作定義為Page_fetch::IF_IN_POOL,而函數ibuf_should_try主要包含如下判定:

  • A:開啟了change buffer
  • B:不等于系統表空間
  • C:不能是聚集索引
  • D:不能處于export狀態下
  • E:insert操作不能是唯一索引
  • F:其他操作,唯一索引也可以使用ibuf,這里實際上就只剩下delete和ignore唯一性的insert了

而在底層修改操作實際上只有insert和delete操作,而這里滿足的是F條件因此insert操作的查找page動作被標記為Page_fetch::IF_IN_POOL,接下來buf_page_get_gen函數就不會再去訪問物理磁盤了,這個時候可能返回的page為NULL,那就要走這個邏輯了:

  if (block == nullptr) { //如果block沒有在innodb buffer中進行操作
...
    switch (btr_op) {
      case BTR_INSERT_OP:
      case BTR_INSERT_IGNORE_UNIQUE_OP: //注意這里
...
        if (ibuf_insert(IBUF_OP_INSERT, tuple, index, page_id, page_size,
                        cursor->thr)) {
          cursor->flag = BTR_CUR_INSERT_TO_IBUF;
          goto func_exit;
        }

也就是插入到ibuf中,那么我們可以想象,如果設置了unique_checks=0,這個時候如果重復的數據在磁盤上(因為innodb buffer查詢不到page返回NULL),則會將接下來的數據本該重復的數據插入到ibuf,而不會去檢測重復值。然后等到需要讀取這個page到buffer pool的時候比如select,那就需要做ibuf的合并,合并后重復的數據就出現了。

2.測試

測試可以根據老葉公眾號的方式測試,主體思想就是做一個大一點的表,然后重啟數據庫,并且不要開啟啟動時加載page到buffer pool,下面是我測試的結果:

這里b列是一個唯一索引,我們看到了第二查詢出現了2個相同的值。

3.其他和總結

當出現這種情況的時候可以看到,第一個查詢只出現了一行,這看起來好像是對的,但是實際上索引上有2行不同的值,對于唯一索引來講如果訪問到一行值,訪問就會停止,因此出現了這種情況,看起來也是比較奇特。 因此我們在考慮使用unique_checks=0加速導入數據的時候需要特別注意一下這個問題,除非能夠保證數據都是唯一的否則不建議設置,現在我們知道實際上加速就是讓唯一索引也能夠使用ibuf這個特性,這里我們再來會看一下官方的這句話

For big tables, this saves a lot of disk I/O because InnoDB can use its change buffer to write secondary index records in a batch. Be certain that the data contains no duplicate keys.

很顯然和我們分析一致。

場景2 RR隔離級別相關

這個地方主要和隔離級別有關了,雖然提出這個BUG的時間有點久了,但是這不是BUG,并且8.0也能重現,如下, https://bugs.mysql.com/bug.php?id=69979

重現如下:

建表和插入數據
create table testuniq(id int primary key,a int unique key);
 insert into testuniq values (10, 100), (20, 200);
mysql> select * from testuniq;
+----+------+
| id | a    |
+----+------+
| 10 |  100 |
| 20 |  200 |
+----+------+

TRX1

TRX2

1.begin;


2.select * from testuniq;



3.update testuniq set a=300 where id=10;

4.update testuniq set a=100 where id=20;


5.select * from testuniq;


完成第四步的時候數據就是:

mysql> select * from testuniq;
+----+------+
| id | a    |
+----+------+
| 10 |  100 |
| 20 |  100 |
+----+------+

可以看到唯一索引出現了重復值,對于這個問題,只要不阻止第4步的update testuniq set a=100 where id=20操作按照原理上來講就會出現重復值,因為RR有一個read view在begin開始后第一個select語句后一直存在,而update屬于當前讀訪問的當前記錄已經被修改了,因此第4步并沒有訪問歷史記錄,因此update通過,最終出現這種現象。同時在BUG中也詳細描述了這是符合設計的PG也是類似的結果,可以自行參考。

責任編輯:趙寧寧 來源: MySQL學習
相關推薦

2023-02-26 00:00:06

MySQL索引故障

2016-08-05 14:33:19

MySQL索引數據庫

2024-08-19 09:43:00

2024-05-24 09:29:28

2022-08-04 08:22:49

MySQL索引

2025-07-04 07:59:55

2018-09-16 23:14:18

MySQL索引約束主鍵

2018-09-14 09:12:00

數據庫MySQL索引約束

2011-08-18 11:18:25

Oracle唯一約束唯一索引

2023-01-03 07:44:53

MySQL查詢重復

2021-04-12 10:52:10

InnoDB索引數據庫

2015-05-20 13:48:26

MySQL索引

2010-10-12 14:40:03

mysql索引

2022-01-27 11:02:04

索引數據存儲

2021-09-01 08:58:15

項目 UTFailed

2010-11-25 14:40:27

MySQL查詢

2023-02-10 10:14:59

普通索引唯一索引

2024-04-19 13:57:30

索引數據庫查詢

2011-06-15 18:59:16

算法SEO

2010-03-02 16:50:34

WCF返回值
點贊
收藏

51CTO技術棧公眾號

亚洲天堂精品一区| 一区二区免费在线视频| 欧美一级高潮片| 秋霞蜜臀av久久电影网免费| 久久一区二区三区四区五区 | 美女的奶胸大爽爽大片| 豆花视频一区二区| 国产精品国产三级国产三级人妇| 成人性生交大片免费观看嘿嘿视频| www.色小姐com| 午夜精品影视国产一区在线麻豆| 91麻豆精品91久久久久同性| 青娱乐自拍偷拍| 在线观看a视频| 成人看片黄a免费看在线| 国产精品草莓在线免费观看 | 欧美日韩在线免费| 国产精品免费观看在线| 欧美精品一区二区成人| 精品国产不卡| 337p日本欧洲亚洲大胆精品 | 国产91露脸合集magnet| 国产精品流白浆视频| 精品一区二区三区人妻| 国产精品国产三级国产在线观看| 亚洲第一视频网| 国产精品igao网网址不卡| 一区二区三区电影大全| 亚洲一区二区三区中文字幕在线| 亚洲精品乱码久久久久久蜜桃91| 香蕉av在线播放| 国产成a人无v码亚洲福利| 国产一区二区色| 亚洲第一视频区| 国产精品网在线观看| 7777精品伊人久久久大香线蕉的| 黄色国产精品视频| av最新在线| 99久久99久久久精品齐齐| 91人成网站www| 日日骚一区二区三区| 欧美一二区在线观看| 日韩电影中文字幕在线观看| www.黄色网| 日韩一二三区| 欧美一区二区三区色| 超碰在线公开97| 国产韩日精品| 欧洲国产伦久久久久久久| 免费无码国产v片在线观看| 91超碰在线| 午夜精品在线视频一区| 免费拍拍拍网站| 黄色av网站在线播放| 亚洲国产精品99久久久久久久久| 秋霞在线观看一区二区三区| 高清福利在线观看| 国产欧美视频在线观看| 天堂精品视频| 欧洲不卡视频| 成人午夜精品在线| 国产91亚洲精品一区二区三区| 国产乱淫av片免费| 国产成人精品免费| 国产成人av一区二区三区| 免费的黄色av| 日日摸夜夜添夜夜添亚洲女人| 欧美在线观看网站| 国产在线一级片| 久久99久久99| 亚洲一区二区三区成人在线视频精品| 国产视频在线观看免费| 国产传媒欧美日韩成人| 国产一区二区在线网站| 男女视频在线观看免费| 国产精品天干天干在观线| 亚洲天堂电影网| 午夜激情在线| 欧美日韩免费在线观看| 精品久久久久久中文字幕2017| 免费**毛片在线| 一区二区三区在线播放| 青青青国产在线观看| 在线观看欧美日韩电影| 在线观看欧美黄色| 国产黄色一区二区三区| 美女一区2区| 在线观看国产精品淫| 国产稀缺精品盗摄盗拍| 99精品国产在热久久| 国产激情视频一区| 国产99久一区二区三区a片 | 国产精品外国| 国产色视频一区| 天堂中文在线观看视频| 国产精品美女久久久久久久网站| 中文字幕色呦呦| 日韩不卡免费高清视频| 4438成人网| 国产呦小j女精品视频| 久久精品青草| 清纯唯美亚洲综合| 北条麻妃一二三区| 国产欧美日韩卡一| 国产精品裸体瑜伽视频| 日日夜夜亚洲精品| 亚洲伦理中文字幕| 古装做爰无遮挡三级聊斋艳谭| 中文无码日韩欧| 国产一区二区三区免费视频| 精品国产一区在线| 伊人精品久久| 在线日韩中文字幕| 日韩黄色a级片| 国产专区欧美精品| 日本一区视频在线观看| 久久香蕉av| 777奇米四色成人影色区| 蜜桃精品一区二区| 国自产拍偷拍福利精品免费一| 国产精品99久久久久久人| 成人爽a毛片一区二区| 国产精品国产精品国产专区不蜜| 色综合久久久久无码专区| 日本在线一区二区三区| 日韩中文字幕在线免费观看| 狠狠狠狠狠狠狠| 日韩 欧美一区二区三区| 国产99在线免费| 国产黄色在线网站| 欧美精品丝袜久久久中文字幕| 青青草福利视频| 999在线观看精品免费不卡网站| 91日本在线观看| 五月婷婷在线视频| 欧美最猛黑人xxxxx猛交| 可以直接看的无码av| 亚洲久久成人| 精品国产中文字幕| а√天堂资源官网在线资源| 日韩欧美激情在线| 午夜精品福利在线视频| 国内不卡的二区三区中文字幕| 亚洲精品电影在线一区| 久久婷婷五月综合色丁香| 亚洲最新中文字幕| 少妇又紧又色又爽又刺激视频 | 欧美高清性xxxxhd| 国产粉嫩在线观看| 日韩精品免费在线| 久草视频一区二区| 久久久国产精品不卡| 中文字幕乱码人妻综合二区三区| 亚洲va久久久噜噜噜久久| 欧美在线影院在线视频| 无码精品视频一区二区三区 | 国产日韩欧美激情| 五月婷婷深爱五月| 久久最新网址| 国产精品扒开腿爽爽爽视频| 爱爱爱免费视频在线观看| 欧美性猛交xxxx乱大交退制版| 亚洲а∨天堂久久精品2021| 久久国产精品无码网站| 中国 免费 av| www.成人网| 日本精品久久中文字幕佐佐木| 九一国产在线| 在线播放91灌醉迷j高跟美女 | 色一区在线观看| 99精品欧美一区二区| 麻豆中文一区二区| 99re99热| 欧美wwwsss9999| 国产97免费视| 国产二区三区在线| 精品国产一区久久| 久久国产视频一区| 亚洲同性gay激情无套| 免费特级黄色片| 日韩av影院| 国产精品久久久久久久av电影 | 中文字幕一区二区在线观看视频| 日韩啪啪网站| 国产精品精品视频| 人妖欧美1区| 亚洲视频在线观看| 99视频国产精品免费观看a| 午夜视频在线观看一区二区三区| caopeng视频| 亚洲国产婷婷| 亚洲高清视频在线观看| 在线视频亚洲欧美中文| 国产精品精品久久久| 牛牛精品在线| 在线精品高清中文字幕| 亚洲精品久久久久久动漫器材一区 | 麻豆成人在线播放| 成人综合日日夜夜| 日韩av手机在线看| 女同一区二区免费aⅴ| 在线看欧美日韩| 色窝窝无码一区二区三区| 欧美日韩国产综合草草| 91久久国产视频| 综合久久国产九一剧情麻豆| 亚洲精品成人无码熟妇在线| 国产精品一区二区91| 日本男人操女人| 亚洲精品人人| 成人黄色片免费| 欧美大人香蕉在线| 日本精品一区二区三区视频| 一区二区亚洲视频| 成人免费视频97| 99久久久国产精品免费调教网站 | 中国一级大黄大黄大色毛片| 日韩精品导航| 国产传媒一区二区| 国产乱码精品一区二区三区亚洲人| 欧美一级淫片aaaaaaa视频| 手机在线免费观看av| 色yeye香蕉凹凸一区二区av| 日韩电影在线观看完整版| 精品女同一区二区| 99久久久无码国产精品免费| 欧洲精品在线观看| 天天干,天天干| 欧美午夜女人视频在线| 国产在线拍揄自揄拍| 亚洲伦理在线精品| 992在线观看| 中文字幕免费一区| 亚洲av无码一区二区三区人| 久久综合资源网| 国产第一页视频| 亚洲精品一级| 日韩在线综合网| 中文一区在线| 国产成人黄色片| 香蕉久久夜色精品国产| 国产精品网站免费| 一区二区国产在线观看| 91视频 -- 69xx| 一区二区三区国产盗摄| 午夜精品久久久久久久无码| 亚洲作爱视频| 99re在线视频免费观看| 久久男女视频| 91人人澡人人爽人人精品| 日韩—二三区免费观看av| 亚洲高清在线免费观看| 欧美96一区二区免费视频| 韩国日本美国免费毛片| 男人的天堂久久精品| 污视频网址在线观看| 国产精品综合在线视频| 国产成人精品综合久久久久99| 成人天堂资源www在线| 天天躁日日躁狠狠躁免费麻豆| www.日本不卡| 免费黄色片网站| 中文字幕一区视频| 校园春色 亚洲| 亚洲 欧美综合在线网络| 国产成人无码一区二区在线播放| 色婷婷激情综合| 97成人免费视频| 精品精品国产高清一毛片一天堂| 天天av天天翘| 在线观看精品国产视频| 超碰公开在线| 97视频在线观看免费高清完整版在线观看 | 久久中文资源| 免费国产一区二区| 成人在线免费观看网站| 日韩精品久久一区二区| 一区二区三区导航| 亚洲综合婷婷久久| heyzo一本久久综合| 91激情视频在线观看| 最新国产の精品合集bt伙计| 久草免费新视频| 在线观看91精品国产入口| 国产精品伦一区二区三区| 精品日韩av一区二区| 黄色毛片在线看| 不卡中文字幕av| 亚洲风情在线资源| 成人av在线亚洲| 久久久久影视| 亚洲国产一区二区三区在线播| 女生裸体视频一区二区三区 | 欧美日韩中字| 妞干网视频在线观看| 老司机午夜精品视频| 丰满人妻一区二区三区大胸| 国产日韩三级在线| 欧美日韩亚洲国产另类| 欧美亚洲综合另类| 人妻精品无码一区二区| 日韩中文字幕在线精品| 中文在线а√天堂| 91青青草免费在线看| 成人羞羞在线观看网站| 日本中文字幕亚洲| 亚洲有吗中文字幕| 中文字幕久精品免| 国产精品日韩| 女同性αv亚洲女同志| 中文字幕av一区二区三区免费看| 久久精品这里有| 在线播放亚洲一区| 99riav在线| 人人爽久久涩噜噜噜网站| 99ri日韩精品视频| 亚洲美女自拍偷拍| 蜜桃视频在线一区| 色哟哟精品观看| 欧美日韩国产中文精品字幕自在自线| 国产欧美综合视频| 中文字幕亚洲欧美一区二区三区| 成人免费黄色网页| 欧美在线观看网站| 日韩成人午夜| 男女啪啪免费视频网站| 国产精品一区二区你懂的| 亚洲色图日韩精品| 日本乱人伦一区| 日本韩国精品一区二区| 海角国产乱辈乱精品视频| 一区二区三区在线免费看 | 国产一区二区免费在线| 午夜精品一区二区三区四区| 欧美ab在线视频| 中文字幕国产高清| 亚洲欧洲av一区二区三区久久| 中文字幕人妻色偷偷久久| 亚洲一级一级97网| 中文字幕日本一区二区| 日韩欧美视频第二区| 六月丁香综合| 亚洲精品视频网址| 欧美视频中文字幕| 亚洲成人三级| 成人精品网站在线观看| 天天揉久久久久亚洲精品| 国产精品探花在线播放| 亚洲精品免费在线播放| www.色视频| 国内伊人久久久久久网站视频 | 欧美不卡激情三级在线观看| 成人在线直播| yy111111少妇影院日韩夜片| 韩国精品一区二区三区| 精品国产av色一区二区深夜久久| 午夜激情久久久| 免费观看成年在线视频网站| 国产成人啪精品视频免费网| 欧美一区二区性| 天天操精品视频| 亚洲成年人影院| 国产三区四区在线观看| 国产美女直播视频一区| 亚洲国产精品91| 中国极品少妇xxxx| 欧美午夜视频一区二区| av成人手机在线| 5g影院天天爽成人免费下载| 亚洲韩日在线| 手机看片福利视频| 日韩欧美亚洲国产另类| 精品三级久久| 亚洲成色www久久网站| 国产一区二区网址| 国产网址在线观看| 亚洲三级黄色在线观看| 精品三级国产| 国产精品-区区久久久狼| 国产精品不卡视频| 蜜桃av噜噜一区二区三区麻豆| 欧美在线激情网| 亚洲精品午夜av福利久久蜜桃| 污网站免费观看| 欧美日韩视频在线一区二区| 蜜臀av在线| 亚洲精品国产一区| av不卡在线观看| 91精品在线视频观看| 国内精品久久久久久久久| 成人高清电影网站| 国产女主播在线播放| 欧美亚洲国产一区二区三区 | 免费黄色在线视频网站| 97人人模人人爽人人喊38tv| 久久精品系列| 久久久久久久九九九九| 中文字幕在线亚洲| 美女视频亚洲色图| 免费不卡av网站|