亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中的changebuffer是什么

發布時間:2021-09-13 16:46:26 來源:億速云 閱讀:166 作者:柒染 欄目:MySQL數據庫

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

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

0)Change Buffer為何提高性能

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

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

綜上所述 cahnge buffer 性能的提升在于兩點:

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

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

1)change buffer的內容

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

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

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

對主鍵索引無效;對輔助索引葉子節點的更改才可能借助change buffer ,如果該列上沒有索引,那么就不會借助change buffer了!

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

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

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

6) change buffer的相關參數

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

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

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

當下一次需要加載這個頁面的時候,也就是這個頁面有需求的時候,會將Change Buffer內的更改合并到Buffer Pool,隨后當服務器在空閑的時候,這個更改會刷到disk(磁盤)上, 或者在不繁忙的時候進行merge,這時候merger操作也是發生在buffer pool;

8).為什么change buffer 存的是 buffer pool中沒有的索引頁的操作?

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

9) 除了數據頁被訪問,還有哪些場景會觸發刷寫緩沖中的數據呢?

還有這么幾種情況,會刷寫緩沖中的數據:

(1)有一個后臺線程,會認為數據庫空閑時;

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

(3)數據庫正常關閉時;

(4)redo log寫滿時;

畫外音:幾乎不會出現redo log寫滿,此時整個數據庫處于無法寫入的不可用狀態。

10)什么業務場景,適合開啟InnoDB的寫緩沖機制?

先說什么時候不適合,如上文分析,當:

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

(2)或者,寫入一個數據后,會立刻讀取它;

這兩類場景,在寫操作進行時(進行后),本來就要進行進行頁讀取,本來相應頁面就要入緩沖池,此時寫緩存反倒成了負擔,增加了復雜度。

什么時候適合使用寫緩沖,如果:

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

(2)業務是寫多讀少,或者不是寫后立刻讀取;

可以使用寫緩沖,將原本每次寫入都需要進行磁盤IO的SQL,優化定期批量寫磁盤。

畫外音:例如,賬單流水業務。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定西市| 阿巴嘎旗| 治多县| 绥中县| 安吉县| 乌拉特后旗| 宜昌市| 潢川县| 东辽县| 华亭县| 富民县| 凤城市| 林口县| 德江县| 桃园市| 红原县| 卓资县| 栖霞市| 门头沟区| 郯城县| 个旧市| 逊克县| 伊川县| 永昌县| 台前县| 茌平县| 莆田市| 利辛县| 南雄市| 上犹县| 徐闻县| 内黄县| 东乡县| 德化县| 房产| 富宁县| 洛阳市| 乌兰察布市| 湘西| 阿瓦提县| 丁青县|