久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么配置Change Buffer

153次閱讀
沒有評論

共計 2706 個字符,預計需要花費 7 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下怎么配置 Change Buffer,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

與聚簇索引 (ps:默認是 InnoDB 里的主鍵,主鍵是聚集存儲的) 不同,二級索引通常不是唯一的,并且插入二級索引的順序相對隨機。刪除和更新可能會影響不在索引樹中相鄰的二級索引頁。當受影響的頁面被其他操作讀入緩沖池時,合并緩存的更改,避免了從磁盤讀取二級索引頁到緩沖池所需的大量隨機訪問 I / O。

在 MySQL5.5 之前的版本中,由于只支持緩存 insert 操作,所以最初叫做 insert buffer,只是后來的版本中支持了更多的操作類型緩存,才改叫 change buffer,所以本文是基于 MySQL5.5 之后的版本。

(Secondary Index(二級索引)

1、也可以稱為 非聚集索引

2、葉子節點存儲的是索引和主鍵信息

3、在找到索引后,得到對應的主鍵,再回到聚集索引 中找主鍵對應的記錄(row data))

放出二級索引的解釋可能還是懵,什么時候算作二級索引,所有主鍵以外的索引都是二級索引(innodb 默認)。

所以說根據主鍵訪問數據(永遠是效果最好的方式),原因看上方括號內二級索引介紹

為何需要 Change Buffer

表的索引存于該表的 ibd 文件中,數據也存于此文件。表數據更新的同時也會更新對應的表的索引數據,所以:例如對表進行 insert 時,很可能會產生大量的物理讀(物理讀索引數據頁),insert 一個表,對應的表上面的索引會變動,索引不常使用,產生物理讀,索引順序和表不一致耗時。

(物理讀(Physical Reads):從磁盤讀取數據塊到內存的操作叫物理讀,當緩存不存在這些數據塊的時候就會產生物理讀,物理讀過大表現為磁盤 I/O 較高)

所以將對索引的更新記錄存入 Change Buffer 中,而不是直接調入索引頁進行更新; 選擇時機進行 merge insert buffer 的操作,將 insert buffer 中的記錄合并 (merge) 到真正的輔助索引中。

系統大部分空閑時或在慢速關閉期間運行的清除 (purge) 操作會定期將更新的索引頁寫入磁盤。與每個值立即寫入磁盤相比,purge 操作可以更有效地為一系列索引值寫入磁盤塊。

當有許多受影響的行和許多要更新的二級索引時,Change Buffer 合并可能需要幾個小時。在此期間,磁盤 I / O 會增加,這會導致磁盤綁定查詢顯著減慢。在提交事務之后,甚至在服務器關閉并重新啟動之后,更改緩沖區合并也可能繼續發生

在內存中,Change Buffer 占用 Buffer Pool 的一部分。在磁盤上,Change Buffer 是系統表空間的一部分,其中的索引會在關閉數據庫服務器時更改。

配置 Change Buffer

對表執行 INSERT,UPDATE 和 DELETE 操作時,索引列的值 (尤其是 secondary keys 的值) 通常按未排序順序排列,需要大量 I / O 才能使二級索引更新。Change Buffer 會緩存這個更新當相關頁面不在 Buffer Pool 中,從而磁盤上的相關頁面不會立即被讀避免了昂貴的 I / O 操作。當頁面加載到緩沖池中時,將合并緩沖的更改,稍后將更新的頁面刷新到磁盤。該 InnoDB 主線程在服務器幾乎空閑時以及在慢速關閉期間合并緩沖的更改。

為方便理解:來了一個關于二級索引頁面的 DML 操作,并且這個頁面沒有在 Buffer Pool 內,那么把這個操作存入 Change Buffer(MySQL5.5 之前的版本叫 Insert Buffer),ok,那么下一次需要加載這個頁面的時候,也就是這個頁面有需求的時候,會將 Change Buffer 內的更改合并到 Buffer Pool,隨后當服務器在空閑的時候,這個更改會刷到 disk(磁盤)上。所以一開始那張很難讀的圖的流程就清晰了:(黃色箭頭這樣的走勢)

因為它可以減少磁盤讀取和寫入,所以更改緩沖區功能對于 I / O 綁定的工作負載最有價值,例如具有大量 DML 操作的應用程序(如批量插入)。

但是,Change Buffer 占用 Buffer Pool 的一部分,從而減少了可用于緩存數據頁的內存。如果工作集幾乎適合 Buffer Pool,或者您的表具有相對較少的二級索引,則禁用 Change Buffer 可能很有用。

畢竟 Change Buffer 只適用于 Buffer Pool 外的頁面嘛。

可以使用 innodb_change_buffering 配置參數

允許的 innodb_change_buffering 值包括:

all

默認值:所有操作

none

不要緩沖任何操作。

inserts

緩沖插入操作。

deletes

緩沖區刪除標記操作。

changes

緩沖插入和刪除標記操作。

purges

緩沖在后臺發生的物理刪除操作。

Change Pool 內部結構

ibuf 代表 Insert Buffer,可以直接將其看成 Change Buffer,為 MySQL 5.5 之前 Change Buffer 就叫 Insert Buffer

ibuf btree 最大默認為 buffer pool size 的 25%,當超過 25% 時,可能觸發用戶線程同步縮減 ibuf btree。為何要將 ibuf btree 的大小和 buffer pool 大小相關聯呢 ? 一個比較重要的原因是防止 ibuf 本身占用過多的 buffer pool 資源。

配置 Change Pool 最大大小

該 innodb_change_buffer_max_size 變量允許將 Change Buffer 的最大大小配置為緩沖池總大小的百分比。默認情況下,innodb_change_buffer_max_size 設置為 25. 最大設置為 50。

使用測試不同的設置的業務性能以確定最佳配置。該 innodb_change_buffer_max_size 設置是動態的,允許在不重新啟動服務器的情況下修改設置。類似 innodb_buffer_pool_size 也可以在線更改那種。

以上是“怎么配置 Change Buffer”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計2706字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 通化县| 江西省| 南平市| 阳西县| 邵东县| 永平县| 谢通门县| 临洮县| 阳城县| 岚皋县| 宽甸| 剑河县| 青川县| 景德镇市| 镇江市| 景洪市| 杨浦区| 桃园市| 芦溪县| 南投市| 寿阳县| 齐河县| 丽江市| 大石桥市| 两当县| 鄂温| 同江市| 色达县| 哈尔滨市| 光泽县| 厦门市| 五指山市| 山丹县| 中西区| 新竹市| 甘泉县| 冷水江市| 福贡县| 东海县| 望奎县| 息烽县|