亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Innodb關鍵特性一 insert buffer

2024-07-21 02:51:48
字體:
來源:轉載
供稿:網友

InnoDB關鍵特性之insert buffer insert buffer 是InnoDB存儲引擎所獨有的功能。通過insert buffer,InnoDB存儲引擎可以大幅度提高數據庫中非唯一輔助索引的插入性能。

數據庫對于自增主鍵值的插入是順序的,因此插入能有較高的性能。但是實際生產環境中,用戶表中主鍵僅有并且只能有1個,然而表中可能存在多個輔助索引。

為了闡述非聚集索引寫性能問題,我們先來看一個例子:

MySQL>create table t ( id int auto_increment, name varchar(30), PRimary key (id));

我們創建了一個表,表的主鍵是id,id列式自增長的,即當執行插入操作時,id列會自動增長,頁中行記錄按id順序存放,不需要隨機讀取其它頁的數據。因此,在這樣的情況下(即聚集索引),插入操作效率很高。

對于上一張表t,業務上還需要按非唯一的name字段查找,則表定義改為:

mysql>create table t ( id int auto_increment, name varchar(30), primary key (id), key (name));

這時,除了主鍵聚合索引外,還產生了一個name列的輔助索引,對于該非聚集索引來說,葉子節點的插入不再有序,這時就需要離散訪問非聚集索引頁,插入性能變低。

插入緩沖原理 為了解決這個問題,InnoDB設計出了插入緩沖技術,對于非聚集類索引的插入和更新操作,不是每一次都直接插入到索引頁中,而是先判斷插入的非聚集索引葉子是否在緩沖池中,若在,則直接插入;若不在,則先將插入的記錄放到insert buffer中,然后根據一些算法將insert buffer 緩存的記錄通過后臺線程慢慢的合并(merge)回輔助索引頁中。這樣做的好處是:(1)減少磁盤的離散讀取;(2)將多次插入合并為一次操作。

例如name字段的插入順序為:

(‘Maria’,10), (‘David’,7), (‘Tim’, 11), (‘Jim’, 7), (‘Monty’, 10), (‘Herry’, 7), (‘Heikki’, 7)

后面的數字表示原先插入的輔助索引的page_no,可以看到頁的訪問是完全無序的,然而當插入到insert buffer中時,上述記錄可能在一個頁中,因此減少了離散讀取。在insert buffer中,記錄根據應插入輔助索引的葉子節點page_no進行排序,故上述記錄在insert buffer中的狀態應為:

(‘David’,7), (‘Jim’, 7), (‘Herry’, 7), (‘Heikki’, 7) , (‘Maria’,10), (‘Monty’, 10), (‘Tim’, 11)

當要進行合并時,頁page_no為7的記錄有4條,可以一次性將這4條記錄插入到輔助索引中,從而提高數據庫的整體性能。

insert buffer的使用需要滿足以下兩個條件:

(1)索引是輔助索引(secondary index)

(2)索引是非唯一的

若是唯一索引,那么在插入時需要判斷插入的記錄是否是唯一,這需要讀取輔助索引頁,而insert buffer 的設計就是避免讀取insert buffer,這會導致失去insert buffer 的設計意義。

插入緩沖的內部實現 insert buffer的數據結構是一棵B+樹。在MySQL4.1之前的版本中每張表都有一棵insert buffer B+樹。而在現在的版本中,全局只有一棵insert buffer B+樹,負責對所有的表的輔助索引進行 insert buffer。這棵B+樹存放在共享表空間中,默認也就是ibdata1中。因此,試圖通過獨立表空間ibd文件恢復表中數據時,往往會導致check table 失敗。這是因為表的輔助索引中的數據可能還在insert buffer中,也就是共享表空間中。所以通過idb文件進行恢復后,還需要進行repair table 操作來重建表上所有的輔助索引。

insert buffer是一棵B+樹,因此其也由葉子節點和非葉子節點組成。非葉子節點存放的是查詢的search key(鍵值)。其構造包括三個字段:space | marker | offset。

search key一共占9字節,其中space占4字節,marker占1字節、offset占4字節。space表示待插入記錄所在的表空間id,在InnoDB存儲引擎中,每個表有一個唯一的space id,可以通過space id查詢得知是哪張表。marker是用來兼容老版本的insert buffer。offset表示頁所在的偏移量。

當一個輔助索引需要插入到頁(space, offset)時,如果這個頁不在緩沖池中,那么InnoDB存儲引擎首先根據上述規則構造一個search key,接下來查詢insert buffer這棵B+樹,然后再將這條記錄插入到insert buffer B+樹的葉子節點中。

對于插入到insert buffer B+樹葉子節點的記錄,需要根據如下規則進行構造:

space | marker | offset | metadata | secondary index record

啟用insert buffer索引后,輔助索引頁(space、page_no)中的記錄可能被插入到insert buffer B+樹中,所以為了保證每次merge insert buffer頁必須成功,還需要有一個特殊的頁來標記每個輔助索引頁(space、page_no)的可用空間。這個頁的類型為insert buffer bitmap。

概括的說,merge insert buffer的操作可能發生在以下幾種情況:

(1)輔助索引頁被讀取到緩沖池時;

(2)insert buffer bitmap頁追蹤到該輔助索引頁已無可用空間時;

(3)master thread。

插入緩沖帶來的問題 插入緩沖主要帶來如下兩個壞處:

(1)可能導致數據庫宕機后實例恢復時間變長。如果應用程序執行大量的插入和更新操作,且涉及非唯一的聚集索引,一旦出現宕機,這時就有大量內存中的插入緩沖區數據沒有合并至索引頁中,導致實例恢復時間會很長。

(2)在寫密集的情況下,插入緩沖會占用過多的緩沖池內存(innodb_buffer_pool),默認情況下最大可以占用1/2,這在實際應用中會帶來一定的問題。

插入緩沖的升級:change buffer InnoDB從1.0.x版本開始引入了change buffer,可以將其視為insert buffer的升級。從這個版本開始,InnoDB存儲引擎可以對DML操作——insert、delete、update都進行緩沖,它們分別是:insert buffer、delete buffer、purge buffer。

和insert buffer一樣,change buffer適用的對象依然是非唯一的輔助索引。

對一條記錄進行update操作可以分為兩個過程:

(1)將記錄標記為刪除;

(2)真正將記錄刪除。

因此delete buffer對應update操作的第一個過程,即將記錄標記為刪除。purge buffer對應update操作的第二個過程,即將記錄真正的刪除。同時InnoDB存儲引擎提供了參數innodb_change_buffering,用來開啟各種buffer選項。該參數的可選值為:inserts、deletes、purges、changes、all、none。inserts、deletes、purges就是前面討論過的三種情況。changes表示啟用inserts和deletes,all表示啟用所有,none表示都不啟用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品亚洲精品| www国产91| 欧美性猛交xxxx偷拍洗澡| 国产精品 欧美在线| 91av视频在线免费观看| 国产日韩欧美视频| 日韩精品视频中文在线观看| 亚洲视频axxx| 俺也去精品视频在线观看| 日韩欧美极品在线观看| 91精品在线观看视频| 亚洲成人亚洲激情| 欧美久久精品午夜青青大伊人| 亚洲国产成人一区| 久久久国产成人精品| 亚洲第一综合天堂另类专| 欧美国产日本高清在线| 成人激情在线观看| 国产成人精品电影久久久| 黑人巨大精品欧美一区二区三区| 欧美日韩中文字幕| 亚洲男人天堂古典| 色综合伊人色综合网| 日韩av电影手机在线| 国产成人精品亚洲精品| 亚洲欧美国产制服动漫| 亚洲精品suv精品一区二区| 精品视频在线观看日韩| 国产日韩在线亚洲字幕中文| 日本久久91av| 亚洲美腿欧美激情另类| 国产亚洲成精品久久| 欧美精品免费在线观看| 中文字幕欧美专区| 日韩视频第一页| 日韩视频在线观看免费| 日韩欧美成人精品| 日韩麻豆第一页| 国产精品丝袜白浆摸在线| 国产精品久在线观看| 国产精品主播视频| 欧美成人三级视频网站| 亚洲aⅴ男人的天堂在线观看| 亚洲人成网站777色婷婷| 亚洲韩国日本中文字幕| 亚洲一二在线观看| 日本高清不卡在线| 日韩亚洲在线观看| 日日狠狠久久偷偷四色综合免费| 亚洲一区二区三区乱码aⅴ| 亚洲第一偷拍网| 亚洲成人网久久久| 丝袜亚洲欧美日韩综合| 97精品伊人久久久大香线蕉| 国模精品系列视频| 麻豆国产va免费精品高清在线| 欧美激情国产日韩精品一区18| 亚洲第一页自拍| 国产区精品在线观看| 在线精品国产成人综合| 久久天天躁狠狠躁夜夜躁2014| 4p变态网欧美系列| 日韩在线观看网址| 国产精品中文字幕久久久| 日韩精品在线观| 亚洲香蕉成人av网站在线观看| 亚洲激情视频在线播放| 色噜噜亚洲精品中文字幕| 国产精品丝袜久久久久久高清| 亚洲精品欧美日韩专区| 久久亚洲精品成人| 国产精品久久在线观看| 欧美另类老女人| 久久久极品av| 538国产精品一区二区免费视频| 久久69精品久久久久久国产越南| 日韩精品一二三四区| 国内精品久久影院| 日本免费一区二区三区视频观看| 欧美黑人国产人伦爽爽爽| 成人激情视频在线| 中文字幕欧美日韩精品| 黄色成人在线播放| 国产精品av在线播放| 亚洲视频一区二区三区| 国产精品福利在线观看网址| 92福利视频午夜1000合集在线观看| 国产精品入口免费视频一| 国产欧美在线看| 搡老女人一区二区三区视频tv| 欧美电影在线观看完整版| 91精品国产综合久久香蕉922| 国产热re99久久6国产精品| 91久久在线播放| 精品无码久久久久久国产| 欧美在线视频a| 日韩中文字幕在线播放| 日韩av在线资源| 国产精品久久久亚洲| 久久精品国产亚洲7777| 久久久久亚洲精品成人网小说| 色综合91久久精品中文字幕| 亚洲国产97在线精品一区| 亚洲电影第1页| 欧美精品videosex极品1| 国产精品视频永久免费播放| 国产精品美女久久| 成人精品aaaa网站| 亚洲人成在线电影| 日韩在线激情视频| 亚洲а∨天堂久久精品9966| 国产精品国产三级国产aⅴ9色| 国产精品久久久久久一区二区| 久久久久久久久国产| 亚洲国产成人精品久久| 精品久久久久久久久久久久| 欧美综合国产精品久久丁香| 欧美孕妇性xx| 国产精品白丝jk喷水视频一区| 欧美一区二粉嫩精品国产一线天| 国产乱人伦真实精品视频| 视频在线观看一区二区| 欧美自拍视频在线| 国产精品久久久久久中文字| 日韩在线欧美在线| 日韩av电影院| 中文字幕日韩高清| 亚洲精品电影在线| 日本一区二区三区四区视频| 日韩在线激情视频| 国产日韩一区在线| 欧美性xxxx极品高清hd直播| 国产精品久久久久久久午夜| 91国偷自产一区二区三区的观看方式| 国产精品激情av在线播放| www.日韩不卡电影av| 欧洲亚洲免费在线| 成人国产精品色哟哟| 丝袜美腿精品国产二区| 欧美日韩另类字幕中文| 欧美激情亚洲一区| 日韩免费电影在线观看| 欧美日韩激情视频8区| 久久99精品国产99久久6尤物| 最近2019中文免费高清视频观看www99| 欧美激情亚洲综合一区| 精品少妇一区二区30p| 国模视频一区二区三区| 国产成人精品视频在线观看| 最近2019好看的中文字幕免费| 全亚洲最色的网站在线观看| 欧美激情乱人伦一区| 久久成人国产精品| 久久久久免费精品国产| 亚洲自拍欧美色图| 91sao在线观看国产| 久热精品在线视频| 亚洲一区二区三区sesese| 久久人人爽人人爽人人片亚洲| 亚洲色图综合久久| 91精品国产91久久久久久| 亚洲国语精品自产拍在线观看| 亚洲欧美另类中文字幕| 欧美日韩亚洲视频一区|