校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > MySQL Innodb關鍵特性之插入緩沖(insert buffer)

MySQL Innodb關鍵特性之插入緩沖(insert buffer)

熱門標簽:武漢電銷機器人電話 大豐地圖標注app 400電話辦理服務價格最實惠 北京金倫外呼系統(tǒng) html地圖標注并導航 400電話變更申請 呂梁外呼系統(tǒng) 催天下外呼系統(tǒng) 南太平洋地圖標注

什么是insert buffer?

   插入緩沖,也稱之為insert buffer,它是innodb存儲引擎的關鍵特性之一,我們經常會理解插入緩沖時緩沖池的一個部分,這樣的理解是片面的,insert buffer的信息一部分在內存中,另外一部分像數(shù)據(jù)頁一樣,存在于物理頁中。

    在innodb中,我們知道,如果一個表有自增主鍵,那么對于這個表的默認插入是非常快的,注意,這里的主鍵是自增的,如果不是自增的,那么這個插入將會變成隨機的,就可能帶來數(shù)據(jù)頁分裂的開銷,這樣,插入就不是順序的,就會變慢。還有一種情況,就是如果我們插入的id不是順序的,而是隨機的,那么即使有自增主鍵,那么插入的速度也不會特別快。

    如果我們定義了一個表,包含一個主鍵和一個非聚集索引,如下:

create table t(

a int auto_increment,

b varchar(30),

primary key(a),

key (b)

);

當我們按照主鍵a進行插入的時候,對于非聚集索引,也就是常說的二級索引b,它的插入不是順序的,插入性能必然會下降。

  Innodb存儲引擎針對這種情況,設計了Insert Buffer,對于非聚集索引的插入或者更新操作,不是每一次插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩沖池中,如果在,則直接插入,如果不在,則先放入一個insert buffer中,告訴數(shù)據(jù)庫這個非聚集的索引已經插入到了葉子節(jié)點,實際上并沒有插入,只是存放在另外一個位置,然后再以一定的頻率和情況進行Insert buffer和輔助索引葉子節(jié)點合并操作。這種時候,經常能將多條記錄的插入合并到一個操作中,這樣就大大提高了非聚集索引離散插入的性能。

insert buffer的觸發(fā)條件?

    insert buffer需要滿足兩個條件才能被使用,第一,索引是輔助索引,也就是二級索引,第二,索引不是唯一的。當滿足上述兩個條件的時候,就可以使用insert buffer,從而提高數(shù)據(jù)庫的插入操作性能。

    這里需要注意,如果在程序進行了大量操作的時候發(fā)生了MySQL數(shù)據(jù)庫的宕機,那么肯定有大量的insert buffer沒有合并到實際的非聚集索引中去,恢復可能會造成很長的時間。

為什么不能是唯一索引?

    之所以不支持唯一索引,是因為如果輔助索引是唯一索引,那么在插入時需要校驗唯一性,校驗唯一性的時候就會發(fā)生離散讀取,從而又增加了開銷,那么insert buffer得不償失。

    我們可以通過show engine innodb status來查看insert buffer的使用情況,如下:

mysql--root@localhost:dms_alimetadata 20:35:24>>show engine innodb status\G
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0

  其中size代表了已經合并記錄頁的數(shù)量,free list len代表了空閑列表的長度,seg size顯示了當前insert buffer的大小為2*16KB

引入Change Buffer的概念

    最新的MySQL5.7已經支持change buffer,事實上,它在innodb 1.0.x版本已經引入,這個change buffer 可以理解為insert buffer的升級,也就是對常見的DML語言都可以進行緩沖,包含insert delete以及update,對應的分別是insert buffer,delete buffer以及purge buffer。

   當然,change buffer的使用對象仍然是非唯一的輔助索引。

    這里我們以update操作為例,update的過程可以拆分為兩個部分:

第一個部分是將記錄的delete_mask標記為刪除,如果你不了解delete_mask,可以在4月9號的文章中去看。第二個部分是真正的將記錄刪除。

而delete buffer對應的是update的第一個過程,purge buffer對應的是第二個部分。

    在innodb中,我們可以通過參數(shù)innodb_change_buffering來開啟buffer的各種選項,該參數(shù)可選的值為inserts,deletes,purges,changes,all,none等,其中inserts,deletes和purges就是前面討論過的情況,changes表示開啟inserts和deletes,all表示開啟所有,默認的參數(shù)如下:

mysql--root@localhost:dms_alimetadata 21:13:37>>show variables like '%buffering%';        
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_change_buffering | all   |
+-------------------------+-------+
1 row in set (0.01 sec)

我們還可以通過innodb_change_buffer_max_size來控制change_buffer的最大使用內存數(shù)量,該參數(shù)的默認值是25,也就是1/4,示例如下:

mysql--root@localhost:dms_alimetadata 21:20:52>>show variables like '%innodb_change_buffer_max_size%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_change_buffer_max_size | 25    |
+-------------------------------+-------+
1 row in set (0.00 sec)

    在上面的show engine innodb status命令的輸出結果中,顯示了merged operation和discarded operation,其中insert 表示insert buffer的操作次數(shù),delete mark表示delete buffer的操作次數(shù),而delete表示purge buffer的操作次數(shù),discarded operation表示當change buffer發(fā)生merge時,表已經被刪除,此時就無需進行合并。

Insert Buffer的實現(xiàn)?

   insert buffer的數(shù)據(jù)結構是一棵B+樹,類似聚集索引一樣,全局只有一棵insert buffer B+樹,它負責對所有的表進行insert buffer,而這棵B+樹放在共享表空間中,也就是ibdata1文件中,因此,試圖通過ibd文件恢復表數(shù)據(jù)的時候可能會出現(xiàn)check table失敗,原因是表的輔助索引中的數(shù)據(jù)可能還在insert buffer中,所以通過ibd文件恢復文件之后,還需要進行repair table操作來重建表上的輔助索引。

   insert buffer既然是一棵樹,那么必定有葉子節(jié)點和非葉子節(jié)點,非葉子節(jié)點存放的是查詢的search key值,它的構造如下:

+---------+------------+-------+
| space   |   marker   | Value |
+---------+------------+-------+

這個結構一共占用9個字節(jié),其中,space表示待插入的記錄所在的表的表空間id,這個id是每個表都要有的唯一的id,其中space占用4個字節(jié),marker占用1個字節(jié),用來兼容老版本的insert buffer,offset占用4個字節(jié),表示頁所在的偏移量。

輔助索引的插入過程?

    當一個輔助索引要插入到數(shù)據(jù)頁的時候,如果這個數(shù)據(jù)頁不在緩沖池中,那么innodb會根據(jù)規(guī)則構造一個search key,接下來將這個記錄插入到insert buffer的B+樹里面去,插入的過程中,需要對這個記錄進行一些構造,最終插入的結果是類似下面這樣的一條記錄:

+---------+------------+-------+------------+------+-------+------+-------+
| space   |   marker   | Value | metadata   |      |       |      |       |
+---------+------------+-------+------------+------+-------+------+-------+

可以發(fā)現(xiàn),最后面多了一個metadata的字段和4個其他的字段,先來說說metadata的字段,它占用4個字節(jié),它用來排序每個記錄進入insert buffer的順序,從第5列開始,就是實際插入記錄的各個字段的值了,因此和單純的數(shù)據(jù)記錄相比,insert buffer需要額外13個字節(jié)的開銷。

   為了保證每次merge insert buffer成功,需要設置一個特殊的數(shù)據(jù)頁來標記每個輔助索引頁的可用空間,這個數(shù)據(jù)頁的類型為insert buffer bitmap,這個頁可以追蹤很多輔助索引頁的可用空間。這里簡單了解一下,下面會解釋它的用法。

Merged Insert Buffer的時機?

   我們前面已經知道,當插入記錄的輔助索引頁不在緩沖池中的時候,需要將輔助索引記錄插入到這棵B+樹中,后續(xù)會從insert buffer中往真正的輔助索引中進行合并,那么什么時候進行合并呢?

1、輔助索引頁被讀取到緩沖池的時候

2、insert buffer Bitmap追蹤到該輔助索引頁已經沒有足夠的可用空間時,一般的閾值是輔助索引頁空間的1/32

3、master thread每秒執(zhí)行一次merge insert buffer的操作

以上就是MySQL Innodb關鍵特性之插入緩沖(insert buffer)的詳細內容,更多關于Innodb特性之插入緩沖的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL InnoDB架構的相關總結
  • MySQL InnoDB ReplicaSet(副本集)簡單介紹
  • 詳解MySQL InnoDB存儲引擎的內存管理
  • MySQL InnoDB 鎖的相關總結
  • 如何區(qū)分MySQL的innodb_flush_log_at_trx_commit和sync_binlog
  • Mysql InnoDB的鎖定機制實例詳解
  • Mysql技術內幕之InnoDB鎖的深入講解
  • 修改MySQL數(shù)據(jù)庫引擎為InnoDB的操作
  • 簡述MySQL InnoDB存儲引擎
  • MySQL InnoDB表空間加密示例詳解
  • MySQL InnoDB 事務鎖源碼分析

標簽:徐州 西寧 麗水 龍巖 迪慶 南充 自貢 無錫

巨人網絡通訊聲明:本文標題《MySQL Innodb關鍵特性之插入緩沖(insert buffer)》,本文關鍵詞  MySQL,Innodb,關鍵,特性,之,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL Innodb關鍵特性之插入緩沖(insert buffer)》相關的同類信息!
  • 本頁收集關于MySQL Innodb關鍵特性之插入緩沖(insert buffer)的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产成人午夜高潮毛片| 日韩久久一区二区| 国产午夜亚洲精品不卡| 中文字幕一区免费在线观看| 亚洲成人在线免费| 韩国精品免费视频| 91国偷自产一区二区三区观看| 欧美久久久久久久久久| 久久久久久久久久久电影| 亚洲欧美韩国综合色| 日产国产高清一区二区三区| 大陆成人av片| 欧美美女bb生活片| 国产欧美精品在线观看| 亚洲一区二区三区激情| 国产精品一二三在| 精品视频全国免费看| 国产三级久久久| 午夜不卡av免费| 成人av网站在线观看| 制服丝袜激情欧洲亚洲| 中文字幕欧美区| 视频一区二区中文字幕| 成人免费视频播放| 欧美一级理论片| 亚洲精品视频观看| 国产成人精品在线看| 欧美日韩在线免费视频| 中文字幕+乱码+中文字幕一区| 亚洲国产成人高清精品| 国产69精品久久99不卡| 91精品久久久久久久99蜜桃| 亚洲欧洲av一区二区三区久久| 青青国产91久久久久久| 色噜噜狠狠色综合中国| 国产日产欧产精品推荐色 | 丰满少妇在线播放bd日韩电影| 欧美日韩精品一区视频| 亚洲欧洲日韩一区二区三区| 激情综合色播激情啊| 欧美日韩高清在线播放| 亚洲欧美激情视频在线观看一区二区三区| 麻豆精品新av中文字幕| 欧美日韩国产经典色站一区二区三区| 国产精品视频一二三区| 久久国产尿小便嘘嘘| 欧美日韩一区高清| 亚洲嫩草精品久久| 成人激情动漫在线观看| 国产亚洲精久久久久久| 久久99精品久久久久久| 欧美一二三区在线观看| 亚洲第一久久影院| 91国模大尺度私拍在线视频| 国产精品美女久久久久久 | 欧美韩国日本综合| 奇米亚洲午夜久久精品| 欧美日韩高清一区| 亚洲韩国精品一区| 91老师片黄在线观看| 亚洲国产精华液网站w | 国产精品美女久久久久aⅴ| 国内外精品视频| 日韩美女主播在线视频一区二区三区| 无码av免费一区二区三区试看 | 一区二区三区四区不卡在线 | 一区二区三区.www| 一道本成人在线| 亚洲精品视频一区二区| 91麻豆精品秘密| 亚洲色图视频网| 91浏览器打开| 洋洋成人永久网站入口| 在线观看亚洲一区| 亚洲va在线va天堂| 欧美日韩一区在线| 全部av―极品视觉盛宴亚洲| 欧美一级淫片007| 另类人妖一区二区av| 日韩欧美一级二级三级久久久| 蜜臀av一区二区三区| 日韩欧美中文字幕公布| 狂野欧美性猛交blacked| 日韩亚洲国产中文字幕欧美| 另类小说一区二区三区| 精品国产青草久久久久福利| 国内外成人在线| 久久蜜桃一区二区| 成人免费观看男女羞羞视频| 中文字幕一区二区日韩精品绯色| 91亚洲午夜精品久久久久久| 亚洲一区二区三区小说| 欧美精选一区二区| 激情综合网最新| 亚洲国产精品成人综合| 色综合天天综合网国产成人综合天 | 国产精品美女久久久久久| 9l国产精品久久久久麻豆| 亚洲免费观看高清完整版在线观看熊| 欧美性受极品xxxx喷水| 青娱乐精品视频在线| 久久久久久久久久久久久女国产乱| 成人免费看黄yyy456| 亚洲一区免费视频| 欧美一区午夜视频在线观看| 国产乱对白刺激视频不卡| 中文字幕制服丝袜一区二区三区| 色老汉av一区二区三区| 日本成人在线看| 久久久精品天堂| 91国产福利在线| 久久狠狠亚洲综合| 中文字幕在线免费不卡| 欧美天堂一区二区三区| 激情综合网最新| 亚洲免费大片在线观看| 欧美一三区三区四区免费在线看 | 欧美高清在线精品一区| 欧美唯美清纯偷拍| 韩国理伦片一区二区三区在线播放 | 精品一区二区三区在线视频| 国产精品乱人伦一区二区| 欧美日韩在线三级| 国产精品77777| 一二三区精品视频| 国产亚洲1区2区3区| 欧美体内she精高潮| 国产不卡视频一区| 亚洲国产色一区| 国产日韩欧美精品电影三级在线 | 天天色综合天天| 日本一区二区免费在线| 在线成人免费视频| 99久久精品免费看国产| 久久se精品一区精品二区| 亚洲精品一卡二卡| 久久久久久久免费视频了| 欧美最新大片在线看| 国产成人精品影院| 日本午夜精品一区二区三区电影| 国产精品久久久久9999吃药| 日韩一区二区三区电影在线观看| 99re亚洲国产精品| 国产精品91一区二区| 日韩国产精品大片| 亚洲欧美日韩在线播放| 久久综合狠狠综合久久激情 | 亚洲尤物视频在线| 国产精品视频线看| 日韩欧美国产一二三区| 91福利社在线观看| 丁香婷婷深情五月亚洲| 久久99国产精品久久99果冻传媒| 亚洲一卡二卡三卡四卡| 亚洲天天做日日做天天谢日日欢| 久久精品日产第一区二区三区高清版 | 2021国产精品久久精品| 欧美日韩国产大片| 91久久一区二区| 成人动漫一区二区三区| 国产一区免费电影| 免费看黄色91| 日韩电影一二三区| 天天色图综合网| 亚洲成人在线观看视频| 亚洲精品欧美激情| 亚洲欧洲精品天堂一级| 亚洲国产精品t66y| 国产日韩精品一区| 国产日产亚洲精品系列| 国产日韩高清在线| 国产日韩精品视频一区| 久久久久久久久久看片| 久久噜噜亚洲综合| 久久这里只有精品6| 精品99一区二区| 欧美精品一区二| 久久嫩草精品久久久精品| 久久女同精品一区二区| 久久久99精品免费观看不卡| 久久色在线观看| 国产天堂亚洲国产碰碰| 久久这里只精品最新地址| 久久久夜色精品亚洲| 久久久精品免费观看| 国产视频不卡一区| 国产精品无码永久免费888| 国产片一区二区| 国产精品不卡一区二区三区| 中文字幕在线不卡一区| 亚洲欧洲另类国产综合| 国产精品福利一区| 一区二区三区中文在线观看| 亚洲在线视频一区| 青青草国产成人av片免费| 日日夜夜精品视频免费| 麻豆视频观看网址久久| 激情成人午夜视频| 国产成人精品www牛牛影视| 99久久精品国产观看|