国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

mysql中的changebuffer是什么

發(fā)布時(shí)間:2021-09-14 18:07 來(lái)源:億速云 閱讀:0 作者:柒染 欄目: Mysql 歡迎投稿:712375056

中的change buffer是什么,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細講解,有這方面需求的人可以來(lái)學(xué)習下,希望你能有所收獲。

首先:正常insert的時(shí)候,也是首先要判斷哪個(gè)物理頁(yè)(包括數據頁(yè)和索引頁(yè))可以insert,然后把這個(gè)物理塊讀取到buffer pool,然后再在內存執行insert 操作,然后再刷新到磁盤(pán);

0)Change Buffer為何提高性能

它緩存的是一個(gè)索引頁(yè)的 dml的操作,而不是具體的數據頁(yè),具體的數據頁(yè)直接就修改了,對非聚集非唯一的索引頁(yè)修改的時(shí)候才可能用到change buffer。當 buffer pool中沒(méi)有某個(gè)索引頁(yè),并且需要dml操作這個(gè)索引頁(yè)的數據的時(shí)候,不需要先從磁盤(pán)讀取該索引頁(yè)到buffer pool,直接把該操作記錄到cahnge buffer 中,這里就減少了一次隨機io,然后等下次業(yè)務(wù)需要訪(fǎng)問(wèn)這個(gè)索引頁(yè)的時(shí)候,再把這個(gè)頁(yè)讀取到buffer poo中,然后change buffer記錄的操作和buffer pool中剛讀進(jìn)來(lái)的索引頁(yè)進(jìn)行merge 操作。

提高性能的地方還有一點(diǎn)是:對于非聚集非唯一索引的更新或者插入操作,不是每次插入或者更新操作完, 都直接插入到索引頁(yè)中,而是先判斷插入的非聚集索引頁(yè)是否在緩沖池中,如果在,則直接插入,不在則放到change buffer中,然后以一定的頻率和情況進(jìn)行change buffer和輔助索引葉子的merge(合并)操作,這時(shí)通??梢詫⒍鄠€(gè)索引葉子的dml操作合并到一個(gè)操作里(因為在一個(gè)索引頁(yè)中),這里也提高了性能

綜上所述 cahnge buffer 性能的提升在于兩點(diǎn):

一:當需要修改的索引頁(yè)不在buffer pool的時(shí)候,不需要先把索引頁(yè)讀取到buffer pool,這里減少了io

二:將多個(gè)索引葉子的dml操作合并到一個(gè)操作里(因為在一個(gè)索引頁(yè)中),批量merge,這里也提高了性能;

1)change buffer的內容

Change Buffer是一種特殊的數據結構,緩存對二級索引頁(yè)面的更改并且這些頁(yè)面不在Buffer Pool中(注意緩存的是對索引葉子的修改,而不是具體的索引葉子)。緩存的changes可能由 Insert 、Delete 和 Update的結果導致。稍后在頁(yè)面被其他讀取操作加載到Buffer Pool的時(shí)候合并,

簡(jiǎn)而言之:Change buffer的主要目的是將對二級索引的數據操作緩存下來(lái),以此減少二級索引的隨機IO,并達到操作合并的效果。

3)change buffer 只針對輔助索引而言

對主鍵索引無(wú)效;對輔助索引葉子節點(diǎn)的更改才可能借助change buffer ,如果該列上沒(méi)有索引,那么就不會(huì )借助change buffer了!

4)緩沖池有change buffer 信息固然不錯,但他不是單純是緩存池的一部分,change buffer 和數據頁(yè)一樣,change buffer 是一個(gè)B+樹(shù),放在共享表空間,默認也就是idbata1,向change buffer 寫(xiě)數據也是需要隨機io,但有change buffer后,當buffer 中沒(méi)有需要修改的葉子塊的時(shí)候,你不需要把葉子塊讀進(jìn)innodb_buffer_cahce中(減少的就是這里的io)只需要把改變寫(xiě)進(jìn)cahnge buffer即可,然后cahnge buffer中排序最后等待和真正的葉子節點(diǎn)數據合并!批量合并!所以如果更新操作不頻繁的時(shí)候,并且更新后立馬需要讀取該頁(yè)的時(shí)候,change buffer 的機制會(huì )增加部分io消耗! change buffer 減少了從內存讀取硬盤(pán)的隨機讀IO(數據頁(yè))操作,換做成批量順序merge,redo log減少了隨機寫(xiě)log操作

5).之所以需要滿(mǎn)足索引是輔助索引,并且是非唯一的

因為在插入緩沖時(shí),數據庫并不去查找索引頁(yè)來(lái)判斷插入的記錄的唯一性,如果去查找肯定又會(huì )有離散讀取的情況發(fā)生(隨機io),從而導致change buffer 失去意義!

6) change buffer的相關(guān)參數

1 innodb_change_buffering 默認是all支持所有DML操作

2 innodb_change_buffer_max_size,默認是25,即緩沖池的1/4。最大可設置為50,采用默認即可

7).合并的操作是在 buffer pool里面進(jìn)行的

當下一次需要加載這個(gè)頁(yè)面的時(shí)候,也就是這個(gè)頁(yè)面有需求的時(shí)候,會(huì )將Change Buffer內的更改合并到Buffer Pool,隨后當在空閑的時(shí)候,這個(gè)更改會(huì )刷到disk(磁盤(pán))上, 或者在不繁忙的時(shí)候進(jìn)行merge,這時(shí)候merger操作也是發(fā)生在buffer pool;

8).為什么change buffer 存的是 buffer pool中沒(méi)有的索引頁(yè)的操作?

因為如果在buffer pool中,那么就直接dml操作對應的索引頁(yè)了,change buffer 存在就是為了當需要操作的索引頁(yè)不在buffer pool中,然后不需要立馬去磁盤(pán)讀取該索引頁(yè),只有當buffer pool中不存在的時(shí)候才可能用到change buffer;

9) 除了數據頁(yè)被訪(fǎng)問(wèn),還有哪些場(chǎng)景會(huì )觸發(fā)刷寫(xiě)緩沖中的數據呢?

還有這么幾種情況,會(huì )刷寫(xiě)緩沖中的數據:

(1)有一個(gè)后臺線(xiàn)程,會(huì )認為數據庫空閑時(shí);

(2)數據庫緩沖池不夠用時(shí);

(3)數據庫正常關(guān)閉時(shí);

(4)redo log寫(xiě)滿(mǎn)時(shí);

畫(huà)外音:幾乎不會(huì )出現redo log寫(xiě)滿(mǎn),此時(shí)整個(gè)數據庫處于無(wú)法寫(xiě)入的不可用狀態(tài)。

10)什么業(yè)務(wù)場(chǎng)景,適合開(kāi)啟InnoDB的寫(xiě)緩沖機制?

先說(shuō)什么時(shí)候不適合,如上文分析,當:

(1)數據庫都是唯一索引;

(2)或者,寫(xiě)入一個(gè)數據后,會(huì )立刻讀取它;

這兩類(lèi)場(chǎng)景,在寫(xiě)操作進(jìn)行時(shí)(進(jìn)行后),本來(lái)就要進(jìn)行進(jìn)行頁(yè)讀取,本來(lái)相應頁(yè)面就要入緩沖池,此時(shí)寫(xiě)緩存反倒成了負擔,增加了復雜度。

什么時(shí)候適合使用寫(xiě)緩沖,如果:

(1)數據庫大部分是非唯一索引;

(2)業(yè)務(wù)是寫(xiě)多讀少,或者不是寫(xiě)后立刻讀取;

可以使用寫(xiě)緩沖,將原本每次寫(xiě)入都需要進(jìn)行磁盤(pán)IO的SQL,優(yōu)化定期批量寫(xiě)磁盤(pán)。

畫(huà)外音:例如,賬單流水業(yè)務(wù)。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

精品久久久久久久免费人妻 | 精品一区二区三区免费视频| 午夜天堂一区人妻| 天堂AV男人在线播放| 国产尤物在线视精品在亚洲| 无码高潮爽到爆的喷水视频APP|