国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 存儲引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)

這篇具有很好參考價值的文章主要介紹了MySQL 存儲引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

更改緩沖區(qū)(Change Buffer)是一種特殊的數(shù)據(jù)結(jié)構(gòu),用于緩存不在緩沖池中的二級索引(secondary index)頁的更改??赡軄碜杂?code>INSERT、UPDATEDELETE操作(數(shù)據(jù)操作語言,DML)的緩沖更改,會在后續(xù)通過其他讀操作將這些頁加載到緩沖池時被合并。

MySQL 存儲引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)

與聚簇索引(clustered indexes)不同,二級索引通常是不唯一的,并且對二級索引的插入操作以相對隨機(jī)的 順序發(fā)生。同樣地,刪除和更新操作可能會影響索引樹中不相鄰的二級索引頁。隨后當(dāng)受影響的頁被其他操作讀入緩沖池時,合并緩存中的更改可以避免從磁盤讀取二級索引頁到緩沖池中所需的大量隨機(jī)訪問I/O。

在系統(tǒng)大部分處于空閑狀態(tài)或慢速關(guān)閉期間,會運行清理(purge)操作,定期將更新的索引頁寫入磁盤。與立即將每個值寫入磁盤相比,清理操作可以更高效地將索引值批量寫入磁盤。

當(dāng)有大量受影響的行和需要更新的二級索引時,變更緩沖區(qū)的合并過程可能需要幾個小時。在此期間,磁盤 I/O 會增加,這可能導(dǎo)致磁盤密集型查詢明顯減慢。提交事務(wù)之后,甚至在服務(wù)器關(guān)閉并重新啟動之后,變更緩沖區(qū)合并也可能會持續(xù)發(fā)生(請參閱“第 14.22.2 節(jié)“強(qiáng)制 InnoDB 恢復(fù)”了解更多信息)。

在內(nèi)存中,變更緩沖區(qū)占用了緩沖池的一部分空間。在磁盤上,變更緩沖區(qū)是系統(tǒng)表空間的一部分,當(dāng)數(shù)據(jù)庫服務(wù)器關(guān)閉時,索引更改將存儲在其中。

變更緩沖區(qū)中緩存的數(shù)據(jù)類型由innodb_change_buffering變量控制。要了解更多信息,請參閱下文的”配置變更緩沖區(qū)“。您還可以配置最大變更緩沖區(qū)大小。要了解更多信息,請參閱下文的”配置最大變更緩沖區(qū)的大小“。

如果二級索引包含降序索引列,或者主鍵包含降序索引列,那么變更緩沖區(qū)不支持對該二級索引進(jìn)行緩沖。

有關(guān)變更緩沖區(qū)的常見問題的解答,請參見第 A.16 節(jié)“ MySQL 5.7 FAQ: InnoDB 變更緩沖區(qū)”。

配置變更緩沖區(qū)

當(dāng)對表執(zhí)行INSERT、UPDATEDELETE操作時,索引列的值(尤其是二級鍵的值)通常是無序的,需要大量的 I/O 操作來更新二級索引。變更緩沖區(qū)會在相關(guān)頁面不在緩沖池中時緩存對二級索引條目的更改,從而通過不會立即從磁盤讀取頁面來避免昂貴的 I/O 操作。當(dāng)頁面被加載到緩沖池時,緩沖中的更改將合并,更新后的頁面隨后會刷新到磁盤。在服務(wù)器幾乎空閑或慢速關(guān)閉時,InnoDB主線程會合并緩沖中的更改。

由于變更緩沖區(qū)可以減少磁盤讀寫操作,因此它對于 I/O 密集型的工作負(fù)載最為有價值。例如,變更緩沖可以給頻繁進(jìn)行 DML 操作(如批量插入)的應(yīng)用程序帶來好處。

但是,變更緩沖區(qū)占用了緩沖池的一部分空間,從而減少了可用于緩存數(shù)據(jù)頁面的內(nèi)存。如果工作集幾乎完全適應(yīng)緩沖池,或者您的表具有相對較少的二級索引,禁用變更緩沖可能是有益的。如果工作數(shù)據(jù)集完全適合緩沖池,變更緩沖不會增加額外開銷,因為它僅適用于不在緩沖池中的頁面。

innodb_change_buffering變量控制著InnoDB執(zhí)行變更緩沖的程度。您可以啟用或禁用插入操作、刪除操作(最初將索引記錄標(biāo)記為刪除時)和清理操作(當(dāng)索引記錄被物理刪除時)的緩沖。更新操作是插入操作和刪除操作的組合。innodb_change_buffering的默認(rèn)值為all。

  • all

    默認(rèn)值:緩沖區(qū)插入,刪除標(biāo)記操作和清除。

  • none

    不緩沖任何操作。

  • inserts

    緩沖插入操作。

  • deletes

    緩沖刪除標(biāo)記操作。

  • changes

    緩沖插入和刪除標(biāo)記操作。

  • purges

    緩沖后臺發(fā)生的物理刪除操作。

您可以在 MySQL 選項文件(my.cnfmy.ini)中設(shè)置innodb_change_buffering參數(shù),或使用SET GLOBAL語句動態(tài)更改它,該語句需要足夠的權(quán)限來設(shè)置全局系統(tǒng)變量。參見第 5.1.8.1 節(jié)“系統(tǒng)變量特權(quán)”。更改設(shè)置會影響新操作的緩沖;現(xiàn)有緩沖條目的合并不受影響。

您可以在 MySQL 的選項文件(my.cnfmy.ini)中設(shè)置innodb_change_buffering參數(shù),或者使用SET GLOBAL語句動態(tài)更改它,該語句需要足夠的權(quán)限來設(shè)置全局系統(tǒng)變量。請參閱第 5.1.8.1 節(jié),“系統(tǒng)變量特權(quán)”。更改設(shè)置會影響新操作的緩沖,但不會影響現(xiàn)有緩沖條目的合并。

配置最大變更緩沖區(qū)的大小

innodb_change_buffer_max_size參數(shù)允許按照緩沖池總大小的百分比配置變更緩沖區(qū)的最大大小。默認(rèn)情況下,innodb_change_buffer_max_size設(shè)置為 25。最大設(shè)置值為 50。

在 MySQL 服務(wù)器上,如果存在大量的插入、更新和刪除活動,并且變更緩沖區(qū)合并無法跟上新的變更緩沖條目的速度,導(dǎo)致變更緩沖區(qū)達(dá)到了其最大大小限制,那么可以考慮增加innodb_change_buffer_max_size。

在 MySQL 服務(wù)器上,如果數(shù)據(jù)是用于報告目的而基本靜態(tài),或者如果變更緩沖區(qū)占用了與緩沖池共享的太多內(nèi)存空間,導(dǎo)致頁面過早地從緩沖池中淘汰,那么可以考慮減小innodb_change_buffer_max_size的值。

為了確定最佳配置,您可以使用一個代表性的工作負(fù)載來測試不同的設(shè)置。innodb_change_buffer_max_size參數(shù)是動態(tài)的,這意味著您可以在不重新啟動服務(wù)器的情況下修改該設(shè)置。

監(jiān)控變更緩沖區(qū)

以下選項可用于監(jiān)控變更緩沖區(qū):

  • InnoDB標(biāo)準(zhǔn)監(jiān)視器輸出包括變更緩沖區(qū)的狀態(tài)信息。要查看監(jiān)視器數(shù)據(jù),請執(zhí)行SHOW ENGINE INNODB STATUS語句。

    mysql> SHOW ENGINE INNODB STATUS\G
    

    變更緩沖區(qū)狀態(tài)信息位于INSERT BUFFER AND ADAPTIVE HASH INDEX標(biāo)題下方,并且顯示類似以下內(nèi)容:

    -------------------------------------
    INSERT BUFFER AND ADAPTIVE HASH INDEX
    -------------------------------------
    Ibuf: size 1, free list len 0, seg size 2, 0 merges
    merged operations:
     insert 0, delete mark 0, delete 0
    discarded operations:
     insert 0, delete mark 0, delete 0
    Hash table size 4425293, used cells 32, node heap has 1 buffer(s)
    13577.57 hash searches/s, 202.47 non-hash searches/s
    

    有關(guān)更多信息,請參閱第 14.18.3 節(jié) “InnoDB 標(biāo)準(zhǔn)監(jiān)視器和鎖監(jiān)視器輸出”。

  • Information SchemaINNODB_METRICS表提供了InnoDB標(biāo)準(zhǔn)監(jiān)視器輸出中的大部分?jǐn)?shù)據(jù)點以及其他數(shù)據(jù)點。要查看變更緩沖區(qū)指標(biāo)及其描述,請執(zhí)行以下查詢:

    mysql> SELECT NAME, COMMENT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME LIKE '%ibuf%'\G
    

    有關(guān)`INNODB_METRICS表用法情況的信息,請參見第 14.16.6 節(jié)“ InnoDB INFORMATION_SCHEMA Metrics Table”。

  • Information SchemaINNODB_BUFFER_PAGE表提供了關(guān)于緩沖池中每個頁面的元數(shù)據(jù),包括變更緩沖區(qū)索引和變更緩沖區(qū)位圖頁面。變更緩沖區(qū)頁面通過PAGE_TYPE進(jìn)行標(biāo)識。IBUF_INDEX是變更緩沖區(qū)索引頁的頁面類型,IBUF_BITMAP是變更緩沖區(qū)位圖頁的頁面類型。

    Waring:查詢INNODB_BUFFER_PAGE表可能會帶來顯著的性能開銷。為了避免影響性能,建議在測試實例上重現(xiàn)您要調(diào)查的問題,然后在測試實例上運行查詢。

    例如,您可以查詢INNODB_BUFFER_PAGE表,以確定IBUF_INDEXIBUF_BITMAP頁面在總緩沖池頁面中的近似比例。

    mysql> SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE
           WHERE PAGE_TYPE LIKE 'IBUF%') AS change_buffer_pages,
           (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE) AS total_pages,
           (SELECT ((change_buffer_pages/total_pages)*100))
           AS change_buffer_page_percentage;
    +---------------------+-------------+-------------------------------+
    | change_buffer_pages | total_pages | change_buffer_page_percentage |
    +---------------------+-------------+-------------------------------+
    |                  25 |        8192 |                        0.3052 |
    +---------------------+-------------+-------------------------------+
    

    有關(guān)INNODB_BUFFER_PAGE表提供的其他數(shù)據(jù)的信息,請參閱第 24.4.2 節(jié) “INFORMATION_SCHEMA INNODB_BUFFER_PAGE Table”。有關(guān)相關(guān)使用信息,請參閱第 14.16.5 節(jié) “InnoDB INFORMATION_SCHEMA緩沖池表”。

  • Performance Schema為高級性能監(jiān)控提供了變更緩沖區(qū)互斥鎖等待檢測。要查看變更緩沖區(qū)檢測,請執(zhí)行以下查詢:

    mysql> SELECT * FROM performance_schema.setup_instruments
           WHERE NAME LIKE '%wait/synch/mutex/innodb/ibuf%';
    +-------------------------------------------------------+---------+-------+
    | NAME                                                  | ENABLED | TIMED |
    +-------------------------------------------------------+---------+-------+
    | wait/synch/mutex/innodb/ibuf_bitmap_mutex             | YES     | YES   |
    | wait/synch/mutex/innodb/ibuf_mutex                    | YES     | YES   |
    | wait/synch/mutex/innodb/ibuf_pessimistic_insert_mutex | YES     | YES   |
    +-------------------------------------------------------+---------+-------+
    

    有關(guān)監(jiān)視InnoDB互斥鎖等待的信息,請參閱第 14.17.2 節(jié) “使用 Performance Schema 監(jiān)視 InnoDB 互斥等待”。

注:原文來自 MySQL 5.7 官方文檔,閱讀 MySQL 中文文檔時有些語句理解不順暢,便結(jié)合中文文檔使用 ChatGPT 進(jìn)行了翻譯,如有不正請指出。文章來源地址http://www.zghlxwxcb.cn/news/detail-499190.html

到了這里,關(guān)于MySQL 存儲引擎 InnoDB 內(nèi)存結(jié)構(gòu)之更改緩沖區(qū)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL—MySQL的存儲引擎之InnoDB

    MySQL—MySQL的存儲引擎之InnoDB

    存儲引擎 說明 MyISAM 高速引擎,擁有較高的插入,查詢速度,但不支持事務(wù) InnoDB 5.5版本后MySQL的默認(rèn)數(shù)據(jù)庫存儲引擎,支持事務(wù)和行級鎖,比MyISAM處理速度稍慢 ISAM MyISAM的前身,MySQL5.0以后不再默認(rèn)安裝 MRG_MyISAM 將多個表聯(lián)合成一個表使用,在超大規(guī)模數(shù)據(jù)存儲時很有用 Me

    2024年04月26日
    瀏覽(24)
  • MySQL 的 InnoDB 存儲引擎簡介

    MySQL 的 InnoDB 存儲引擎簡介

    MySQL 是世界上最流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,而其中的存儲引擎則是其關(guān)鍵組成部分之一。InnoDB 存儲引擎在 MySQL 中扮演了重要角色,提供了許多高級功能和性能優(yōu)化,適用于各種應(yīng)用程序和工作負(fù)載。本文將深入介紹 InnoDB 存儲引擎的各個方面,以幫助您更好地理

    2024年02月08日
    瀏覽(30)
  • 談?wù)凪ySQL的InnoDB存儲引擎

    談?wù)凪ySQL的InnoDB存儲引擎

    大家好,我是易安! 今天我們談一談MySQL中InnoDB存儲引擎。InnoDB存儲引擎作為我們最常用到的存儲引擎之一,充分熟悉它的的實現(xiàn)和運行原理,有助于我們更好地創(chuàng)建和維護(hù)數(shù)據(jù)庫表。 InnoDB主要包括了內(nèi)存池、后臺線程以及存儲文件。內(nèi)存池又是由多個內(nèi)存塊組成的,主要包

    2024年02月03日
    瀏覽(20)
  • mysql--InnoDB存儲引擎--架構(gòu)和事務(wù)

    mysql--InnoDB存儲引擎--架構(gòu)和事務(wù)

    MySQL進(jìn)階篇 InnoDB 邏輯存儲單元主層級關(guān)系圖: 1、表空間 表空間是InnoDB存儲引擎邏輯結(jié)構(gòu)的最高層, 如果用戶啟用了參數(shù) innodb_file_per_table(在 8.0版本中默認(rèn)開啟) ,則每張表都會有一個表空間(xxx.ibd),一個mysql實例可以對應(yīng)多個表空間,用于存儲記錄、索引等數(shù)據(jù)。 2、段

    2024年02月14日
    瀏覽(21)
  • MySQL高級10-InnoDB引擎存儲架構(gòu)

    MySQL高級10-InnoDB引擎存儲架構(gòu)

    表空間(Tablespace):一個mysql實例,及一個數(shù)據(jù)庫實例,可以對應(yīng)多個表空間(ibd文件),用于存儲記錄,索引等數(shù)據(jù)。 段(Segment):分為數(shù)據(jù)段(Leaf node segment)、索引段(Non-leaf node segment)、回滾段(Rollback segment),InnoDB是索引組織表,數(shù)據(jù)段就是B+樹的葉子節(jié)點(Leaf node segment),

    2024年02月08日
    瀏覽(23)
  • 【MYSQL】存儲引擎MyISAM和InnoDB

    【MYSQL】存儲引擎MyISAM和InnoDB

    查看MySQL提供所有的存儲引擎 mysql show engines; mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE 1、MYISAM:全表鎖,擁有較高的執(zhí)行速度,不支持事務(wù),不支持外鍵,并發(fā)性能差,占用空間相對較小,對事務(wù)完整性沒有要求,以select、insert為主的應(yīng)用基本上可以使用這引擎 2、Innod

    2024年01月18日
    瀏覽(23)
  • 【MySQL】 深入了解InnoDB存儲引擎的限制

    目錄 列數(shù)限制 索引數(shù)限制 InnoDB的行格式和索引限制 示例和注意事項 **頁大小對索引鍵前綴長度的影響 **對全列索引鍵的限制 多列索引限制 行大小限制 InnoDB?log限制 表空間大小限制 表數(shù)量限制 操作系統(tǒng)限制 文件大小和日志文件大小 文件層級限制 隨著數(shù)據(jù)庫技術(shù)的不斷發(fā)

    2024年01月24日
    瀏覽(24)
  • MySQL存儲引擎InnoDB和MyISAM的區(qū)別?

    InnoDB和MyISAM是MySQL數(shù)據(jù)庫兩種常見的存儲引擎,它們在性能、事務(wù)支持等方面有一些重要的區(qū)別。以下是它們的一些主要區(qū)別: 事務(wù)支持: InnoDB: 支持事務(wù),具有ACID(原子性、一致性、隔離性、持久性)特性,適用于需要事務(wù)支持的應(yīng)用,如銀行、電商等。 MyISAM: 不支持

    2024年02月03日
    瀏覽(29)
  • MySQL之深入InnoDB存儲引擎——Checkpoint機(jī)制

    MySQL之深入InnoDB存儲引擎——Checkpoint機(jī)制

    由于頁的操作首先都是在緩沖池中完成的,那么如果一條DML語句改變了頁中的記錄,那么此時頁就是臟的,即緩沖池中頁的版本要比磁盤的新。那么數(shù)據(jù)庫需要將新版本的頁刷新到磁盤。倘若每次一個頁發(fā)生變化就刷新,那么開銷會很大,若熱點數(shù)據(jù)集中在某幾個頁中,那么

    2024年02月15日
    瀏覽(20)
  • MySQL高級篇(存儲引擎InnoDB、MyISAM、Memory)

    MySQL高級篇(存儲引擎InnoDB、MyISAM、Memory)

    目錄 1、存儲引擎簡介 1.1、查詢建表語句,默認(rèn)存儲引擎:InnoDB 1.2、查看當(dāng)前數(shù)據(jù)庫支持的存儲引擎 1.3、創(chuàng)建表,并指定存儲引擎 2、?存儲引擎-InnoDB介紹 2.1、存儲引擎特點 ?3、MyISAM存儲引擎 ?4、Memory存儲引擎 ?5、InnoDB、MyISAM、Memory的區(qū)別 ?6、存儲引擎的選擇 介紹:In

    2024年04月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包