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

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

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

更改緩沖區(qū)(Change Buffer)是一種特殊的數(shù)據(jù)結(jié)構(gòu),用于緩存不在緩沖池中的二級(jí)索引(secondary index)頁(yè)的更改。可能來(lái)自于INSERT、UPDATEDELETE操作(數(shù)據(jù)操作語(yǔ)言,DML)的緩沖更改,會(huì)在后續(xù)通過(guò)其他讀操作將這些頁(yè)加載到緩沖池時(shí)被合并。

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

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

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

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

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

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

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

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

配置變更緩沖區(qū)

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

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

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

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

  • all

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

  • none

    不緩沖任何操作。

  • inserts

    緩沖插入操作。

  • deletes

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

  • changes

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

  • purges

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

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

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

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

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

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

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

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

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

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

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

    mysql> SHOW ENGINE INNODB STATUS\G
    

    變更緩沖區(qū)狀態(tài)信息位于INSERT BUFFER AND ADAPTIVE HASH INDEX標(biāo)題下方,并且顯示類(lèi)似以下內(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)更多信息,請(qǐng)參閱第 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ù)點(diǎn)以及其他數(shù)據(jù)點(diǎn)。要查看變更緩沖區(qū)指標(biāo)及其描述,請(qǐng)執(zhí)行以下查詢(xún):

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

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

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

    Waring:查詢(xún)INNODB_BUFFER_PAGE表可能會(huì)帶來(lái)顯著的性能開(kāi)銷(xiāo)。為了避免影響性能,建議在測(cè)試實(shí)例上重現(xiàn)您要調(diào)查的問(wèn)題,然后在測(cè)試實(shí)例上運(yùn)行查詢(xún)。

    例如,您可以查詢(xún)INNODB_BUFFER_PAGE表,以確定IBUF_INDEXIBUF_BITMAP頁(yè)面在總緩沖池頁(yè)面中的近似比例。

    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ù)的信息,請(qǐng)參閱第 24.4.2 節(jié) “INFORMATION_SCHEMA INNODB_BUFFER_PAGE Table”。有關(guān)相關(guān)使用信息,請(qǐng)參閱第 14.16.5 節(jié) “InnoDB INFORMATION_SCHEMA緩沖池表”。

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

    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互斥鎖等待的信息,請(qǐng)參閱第 14.17.2 節(jié) “使用 Performance Schema 監(jiān)視 InnoDB 互斥等待”。

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

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

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

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

相關(guān)文章

  • 網(wǎng)卡收發(fā)包系統(tǒng)結(jié)構(gòu)收發(fā)包流程,tcp/ip協(xié)議,socket套接字緩沖區(qū),滑動(dòng)窗口,mtu/mss

    網(wǎng)卡收發(fā)包系統(tǒng)結(jié)構(gòu)收發(fā)包流程,tcp/ip協(xié)議,socket套接字緩沖區(qū),滑動(dòng)窗口,mtu/mss

    MTU和MSS的區(qū)別 TCP 的 MTU MSS MTU是在數(shù)據(jù)鏈路層的載荷大小也就是傳給網(wǎng)絡(luò)層的大小,mss是在傳輸層的載荷大小也就是傳給應(yīng)用層的大小 mss是根據(jù)mtu得到的 1、MTU: Maximum Transmit Unit,最大傳輸單元,即物理接口(數(shù)據(jù)鏈路層)提供給其上層(通常是IP層)最大一次傳輸數(shù)據(jù)的大

    2024年02月08日
    瀏覽(19)
  • 理解緩沖區(qū)

    理解緩沖區(qū)

    對(duì)于這樣的代碼,首先可以肯定的是 printf 語(yǔ)句先于 sleep 執(zhí)行,既然如此那么就應(yīng)該是先打印語(yǔ)句然后進(jìn)行休眠,下面看看結(jié)果: 但這里卻是先休眠以后再打印語(yǔ)句,這是因?yàn)榇嬖谝粋€(gè)叫緩沖區(qū)的東西,當(dāng)我們要向外設(shè)寫(xiě)入數(shù)據(jù)(讓顯示器顯示就是向顯示器寫(xiě)入數(shù)據(jù))時(shí)會(huì)將

    2023年04月25日
    瀏覽(22)
  • 8.緩沖區(qū)管理

    8.緩沖區(qū)管理

    雙緩沖區(qū):TC+M 假設(shè)初始狀態(tài)緩沖區(qū)1滿(mǎn),緩沖區(qū)2空,工作區(qū)為空。 剛開(kāi)始緩沖區(qū)2為空,所以設(shè)備可以向緩沖區(qū)2中沖入數(shù)據(jù)耗時(shí)T,另一方面剛開(kāi)始緩沖區(qū)1中是滿(mǎn)的,所以剛開(kāi)始就可以把緩沖區(qū)1中的數(shù)據(jù)傳送到工作區(qū)中,M時(shí)刻工作區(qū)被充滿(mǎn),CPU就開(kāi)始處理數(shù)據(jù)耗時(shí)C,處理完

    2024年02月11日
    瀏覽(26)
  • 【Linux】文件緩沖區(qū)

    【Linux】文件緩沖區(qū)

    提到文件緩沖區(qū)這個(gè)概念我們好像并不陌生,但是我們對(duì)于這個(gè)概念好像又是模糊的存在腦海中,之間我們?cè)诮榻Bc語(yǔ)言文件操作已經(jīng)簡(jiǎn)單的提過(guò)這個(gè)概念,今天我們不妨深入理解什么是文件緩沖區(qū) 通過(guò)自己實(shí)現(xiàn)庫(kù)中的一些文件操作函數(shù)更加深入的理解文件緩沖區(qū) 自定義實(shí)現(xiàn)

    2024年02月10日
    瀏覽(25)
  • Redis 緩沖區(qū)

    Redis 緩沖區(qū)

    緩沖區(qū)的應(yīng)用場(chǎng)景 : 客戶(hù)端與服務(wù)器端的通信時(shí),暫存客戶(hù)端發(fā)送的命令數(shù)據(jù),或暫存服務(wù)器端返給客戶(hù)端的數(shù)據(jù)結(jié)果 主從節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)同步時(shí),暫存主節(jié)點(diǎn)接收的寫(xiě)命令和數(shù)據(jù) 緩沖區(qū) : 避免客戶(hù)端和服務(wù)器端的請(qǐng)求發(fā)送和處理速度不匹配 服務(wù)器給每個(gè)連接的客戶(hù)端都準(zhǔn)

    2024年02月07日
    瀏覽(22)
  • 【Linux】理解緩沖區(qū)

    【Linux】理解緩沖區(qū)

    我們發(fā)現(xiàn) printf 和 fwrite (庫(kù)函數(shù))都輸出了2次,而 write 只輸出了一次(系統(tǒng)調(diào)用)。為什么呢?肯定和fork有關(guān)! C接口的函數(shù)被打印了兩次系統(tǒng)接口前后只是打印了一次:和fork函數(shù)有關(guān),fork會(huì)創(chuàng)建子進(jìn)程。在創(chuàng)建子進(jìn)程的時(shí)候,數(shù)據(jù)會(huì)被處理成兩份,父子進(jìn)程發(fā)生寫(xiě)時(shí)拷

    2024年01月23日
    瀏覽(20)
  • C/C++緩沖區(qū)

    什么是緩沖區(qū)? 程序和磁盤(pán)文件之間不能直接交換數(shù)據(jù),必須通過(guò)內(nèi)存中一個(gè)被稱(chēng)為文件緩沖區(qū)的區(qū)域來(lái)中轉(zhuǎn)。ANSIC標(biāo)準(zhǔn)規(guī)定,系統(tǒng)會(huì)自動(dòng)為每個(gè)正在使用的文件在內(nèi)存中開(kāi)辟一個(gè)緩沖區(qū),緩沖區(qū)的大小隨機(jī)器而異。 緩沖區(qū)有什么作用? 假設(shè)我們?cè)诩抑行菹⒖措娨暢粤闶常?/p>

    2024年02月15日
    瀏覽(21)
  • SEED-緩沖區(qū)溢出攻擊

    SEED-緩沖區(qū)溢出攻擊

    實(shí)驗(yàn)環(huán)境:SEED-Ubuntu20.04虛擬機(jī) a) 緩沖區(qū)溢出原理 **緩沖區(qū)溢出攻擊原理:**利用溢出的數(shù)據(jù)改變?cè)闯绦虻目刂屏?,如覆蓋返回地址 b) 分析生成badfile文件的exploit.py程序 Shellcode部分 字節(jié)數(shù)組末尾處填入shellcode c) 編譯目標(biāo)服務(wù)器上具有緩沖區(qū)溢出漏洞的stack.c程序,并將其緩沖

    2024年02月07日
    瀏覽(26)
  • 【linux】重定向+緩沖區(qū)

    【linux】重定向+緩沖區(qū)

    自我名言 : 只有努力,才能追逐夢(mèng)想,只有努力,才不會(huì)欺騙自己。 喜歡的點(diǎn)贊,收藏,關(guān)注一下把! close(1),為什么沒(méi)有打印新建文件fd呢? printf(“%dn”,fd); printf會(huì)把內(nèi)容打印到stdout文件中。 但是close(1)關(guān)閉標(biāo)準(zhǔn)輸出stdout—顯示器,int fd=open();新打開(kāi)的文件fd是1。 st

    2024年02月08日
    瀏覽(22)
  • 【Linux】深入理解緩沖區(qū)

    【Linux】深入理解緩沖區(qū)

    目錄 什么是緩沖區(qū) 為什么要有緩沖區(qū) 緩沖區(qū)刷新策略 緩沖區(qū)在哪里 ?手動(dòng)設(shè)計(jì)一個(gè)用戶(hù)層緩沖區(qū) 緩沖區(qū)本質(zhì)上一塊內(nèi)存區(qū)域,用來(lái)保存臨時(shí)數(shù)據(jù)。 緩沖區(qū)在各種計(jì)算任務(wù)中都廣泛應(yīng)用,包括輸入/輸出操作、網(wǎng)絡(luò)通信、圖像處理、音頻處理等。 這塊內(nèi)存區(qū)域是由 誰(shuí)提供的

    2024年02月15日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包