中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么配置Change Buffer

發布時間:2021-12-08 09:28:07 來源:億速云 閱讀:226 作者:小新 欄目:數據庫

小編給大家分享一下怎么配置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”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

弋阳县| 社旗县| 闵行区| 峡江县| 磐安县| 汽车| 镶黄旗| 葵青区| 民和| 南江县| 仪征市| 九龙城区| 会泽县| 绍兴县| 蒲江县| 永登县| 枞阳县| 石台县| 龙岩市| 铅山县| 鄄城县| 宜章县| 洪江市| 濮阳县| 新巴尔虎左旗| 盐津县| 松溪县| 苏尼特左旗| 佛冈县| 常山县| 萍乡市| 尖扎县| 湖南省| 行唐县| 安仁县| 土默特右旗| 塔城市| 安陆市| 威宁| 翼城县| 宁阳县|