精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳細了解 InnoDB 內存結構及其原理

存儲 存儲軟件
聊了一下MySQL和InnoDB的日志,和兩次寫,總的來說算是一個入門級別的介紹,這篇文章就來詳細介紹一下InnoDB的內存結構。

 [[392749]]

之前寫過一篇文章「簡單了解InnoDB原理」,現在回過頭看,其實里面只是把緩沖池(Buffer Pool),重做日志緩沖(Redo Log Buffer)、插入緩沖(Insert Buffer)和自適應哈希索引(Adaptive Hash Index)等概念簡單的介紹了一下。

除此之外還聊了一下MySQL和InnoDB的日志,和兩次寫,總的來說算是一個入門級別的介紹,這篇文章就來詳細介紹一下InnoDB的內存結構。

InnoDB內存結構

其大致結構如下圖。

InnoDB內存的兩個主要區域分別為Buffer Pool和Log Buffer,此處的Log Buffer目前是用于緩存Redo Log。而Buffer Pool則是MySQL或者說InnoDB中,十分重要、核心的一部分,位于主存。這也是為什么其訪問數據的效率高,你可以暫時把它理解成Redis那樣的內存數據庫,因為我們更新和新增當然它不是,只是這樣會更加方便我們理解。

Buffer Pool

通常來說,宿主機80%的內存都應該分配給Buffer Pool,因為Buffer Pool越大,其能緩存的數據就更多,更多的操作都會發生在內存,從而達到提升效率的目的。

由于其存儲的數據類型和數據量非常多,Buffer Pool存儲的時候一定會按照某些結構去存儲,并且做了某些處理。否則獲取的時候除了遍歷所有數據之外,沒有其他的捷徑,這樣的低效率操作肯定是無法支撐MySQL的高性能的。

因此,Buffer Pool被分成了很多頁,這在之前的文章中也有講過,這里不再贅述。每頁可以存放很多數據,剛剛也提到了,InnoDB一定是對數據做了某些操作。

InnoDB使用了鏈表來組織頁和頁中存儲的數據,頁與頁之間形成了雙向鏈表,這樣可以方便的從當前頁跳到下一頁,同時使用LRU(Least Recently Used)算法去淘汰那些不經常使用的數據。

同時,每頁中的數據也通過單向鏈表進行鏈接。因為這些數據是分散到Buffer Pool中的,單向鏈表將這些分散的內存給連接了起來。

Log Buffer

Log Buffer用來存儲那些即將被刷入到磁盤文件中的日志,例如Redo Log,該區域也是InnoDB內存的重要組成部分。Log Buffer的默認值為16M,如果我們需要進行調整的話,可以通過配置參數innodb_log_buffer_size來進行調整。

當Log Buffer如果較大,就可以存儲更多的Redo Log,這樣一來在事務提交之前我們就不需要將Redo Log刷入磁盤,只需要丟到Log Buffer中去即可。因此較大的Log Buffer就可以更好的支持較大的事務運行;同理,如果有事務會大量的更新、插入或者刪除行,那么適當的增大Log Buffer的大小,也可以有效的減少部分磁盤I/O操作。

至于Log Buffer中的數據刷入到磁盤的頻率,則可以通過參數innodb_flush_log_at_trx_commit來決定。

Buffer Pool的LRU算法

了解完了InnoDB的內存結構之后,我們來仔細看看Buffer Pool的LRU算法是如何實現將最近沒有使用過的數據給過期的。

原生LRU

首先明確一點,此處的LRU算法和我們傳統的LRU算法有一定的區別。為什么呢?因為實際生產環境中會存在全表掃描的情況,如果數據量較大,可能會將Buffer Pool中存下來的熱點數據給全部替換出去,而這樣就會導致該段時間MySQL性能斷崖式下跌。

對于這種情況,MySQL有一個專用名詞叫緩沖池污染。所以MySQL對LRU算法做了優化。

優化后的LRU

優化之后的鏈表被分成了兩個部分,分別是 New Sublist 和 Old Sublist,其分別占用了 Buffer Pool 的3/4和1/4。

鏈表的前3/4,也就是 New Sublist 存放的是訪問較為頻繁的頁,而后1/4也就是 Old Sublist 則是反問的不那么頻繁的頁。Old Sublist中的數據,會在后續Buffer Pool剩余空間不足、或者有新的頁加入時被移除掉。

了解了鏈表的整體構造和組成之后,我們就以新頁被加入到鏈表為起點,把整體流程走一遍。首先,一個新頁被放入到Buffer Pool之后,會被插入到鏈表中 New Sublist 和 Old Sublist 相交的位置,該位置叫MidPoint。

該鏈表存儲的數據來源有兩部分,分別是:

  • MySQL的預讀線程預先加載的數據
  • 用戶的操作,例如Query查詢

默認情況下,由用戶操作影響而進入到Buffer Pool中的數據,會被立即放到鏈表的最前端,也就是 New Sublist 的 Head 部分。但如果是MySQL啟動時預加載的數據,則會放入MidPoint中,如果這部分數據被用戶訪問過之后,才會放到鏈表的最前端。

這樣一來,雖然這些頁數據在鏈表中了,但是由于沒有被訪問過,就會被移動到后1/4的 Old Sublist中去,直到被清理掉。

優化Buffer Pool的配置

在實際的生產環境中,我們可以通過變更某些設置,來提升Buffer Pool運行的性能。

  • 例如,我們可以分配盡量多的內存給Buffer Pool,如此就可以緩存更多的數據在內存中
  • 當前有足夠的內存時,就可以搞多個Buffer Pool實例,減少并發操作所帶來的數據競爭
  • 當我們可以預測到即將到來的大量請求時,我們可以手動的執行這部分數據的預讀請求
  • 我們還可以控制Buffer Pool刷數據到磁盤的頻率,以根據當前MySQL的負載動態調整

那我們怎么知道當前運行的 MySQL 中 Buffer Pool 的狀態呢?我們可以通過命令show engine innodb status來查看。這個命令是看 InnoDB 整體的狀態的, Buffer Pool 相關的監控指標包含在了其中,在Buffer Pool And Memory模塊中。

樣例如下。

  1. ---------------------- 
  2. BUFFER POOL AND MEMORY 
  3. ---------------------- 
  4. Total large memory allocated 137428992 
  5. Dictionary memory allocated 972752 
  6. Buffer pool size   8191 
  7. Free buffers       4596 
  8. Database pages     3585 
  9. Old database pages 1303 
  10. Modified db pages  0 
  11. Pending reads      0 
  12. Pending writes: LRU 0, flush list 0, single page 0 
  13. Pages made young 1171, not young 0 
  14. 0.00 youngs/s, 0.00 non-youngs/s 
  15. Pages read 655, created 7139, written 173255 
  16. 0.00 reads/s, 0.00 creates/s, 0.00 writes/s 
  17. No buffer pool page gets since the last printout 
  18. Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s 
  19. LRU len: 3585, unzip_LRU len: 0 
  20. I/O sum[0]:cur[0], unzip sum[0]:cur[0] 

解釋一些關鍵的指標所代表的含義:

  • Total memory allocated:分配給 Buffer Pool 的總內存
  • Dictionary memory allocated:分配給 InnoDB 數據字典的總內存
  • Buffer pool size:分配給 Buffer Pool 中頁的內存大小
  • Free buffers:分配給 Buffer Pool 中 Free List 的內存大小
  • Database pages:分配給 LRU 鏈表的內存大小
  • Old database pages:分配給 LRU 子鏈表的內存大小
  • Modified db pages:當前Buffer Pook中被更新的頁的數量
  • Pending reads:當前等待讀入 Buffer Pool 的頁的數量
  • Pending writes LRU:當前在 LRU 鏈表中等待被刷入磁盤的臟頁數量

都是些很常規的配置項,你可能會比較好奇什么是 Free List。

Free List 中存放的都是未被使用的頁。因為MySQL啟動的時候,InnoDB 會預先申請一部分頁。如果當前頁還未被使用,就會被保存在 Free List 中。

知道了 Free List,那么你也應該知道 Flush List,里面保存的是所有的臟頁,都是被更改后需要刷入到磁盤的。

自適應哈希索引

自適應哈希索引(Adaptive Hash Index)是配合Buffer Pool工作的一個功能。自適應哈希索引使得MySQL的性能更加接近于內存服務器。

如果要啟用自適應哈希索引,可以通過更改配置innodb_adaptive_hash_index來開啟。如果不想啟用,也可以在啟動的時候,通過命令行參數--skip-innodb-adaptive-hash-index來關閉。

自適應哈希索引是根據索引Key的前綴來構建的,InnoDB 有自己的監控索引的機制,當其檢測到為當前某個索引頁建立哈希索引能夠提升效率時,就會創建對應的哈希索引。如果某張表數據量很少,其數據全部都在Buffer Pool中,那么此時自適應哈希索引就會變成我們所熟悉的指針這樣一個角色。

當然,創建、維護自適應哈希索引是會帶來一定的開銷的,但是比起其帶來的性能上的提升,這點開銷可以直接忽略不計。但是,是否要開啟自適應哈希索引還是需要看具體的業務情況的,例如當我們的業務特征是有大量的并發Join查詢,此時訪問自適應哈希索引被產生競爭。并且如果業務還使用了LIKE或者%等通配符,根本就不會用到哈希索引,那么此時自適應哈希索引反而變成了系統的負擔。

所以,為了盡可能的減少并發情況下帶來的競爭,InnoDB對自適應哈希索引進行了分區,每個索引都被綁定到了一個特定的分區,而每個分區都由單獨的鎖進行保護。其實通俗點理解,就是降低了鎖的粒度。分區的數量我們可以通過配置innodb_adaptive_hash_index_parts來改變,其可配置的區間范圍為[8, 512]。

Change Buffer

聊完了 Buffer Pool 中索引相關,剩下的就是 Change Buffer 了。Change Buffer是一塊比較特殊的區域,其作用是用于存儲那些當前不在 Buffer Pool 中的但是又被修改過的二級索引。

用流程來描述一下就是,當我們更新了非聚簇索引(二級索引)的數據時,此時應該是直接將其在Buffer Pool中的對應數據更新了即可,但是不湊巧的是,當前二級索引不在 Buffer Pool 中,此時將其從磁盤拉取到 Buffer Pool 中的話,并不是最優的解,因為該二級索引可能之后根本就不會被用到,那么剛剛昂貴的磁盤I/O操作就白費了。

所以,我們需要這么一個地方,來暫存對這些二級索引所做的改動。當被緩存的二級索引頁被其他的請求加載到了Buffer Pool 中之后,就會將 Change Buffer 中緩存的數據合并到 Buffer Pool 中去。

當然,Change Buffer也不是沒有缺點。當 Change Buffer 中有很多的數據時,全部合并到Buffer Pool可能會花上幾個小時的時間,并且在合并的期間,磁盤的I/O操作會比較頻繁,從而導致部分的CPU資源被占用。

那你可能會問,難道只有被緩存的頁加載到了 Buffer Pool 才會觸發合并操作嗎?那要是它一直沒有被加載進來,Change Buffer 不就被撐爆了?很顯然,InnoDB在設計的時候考慮到了這個點。除了對應的頁加載,提交事務、服務停機、服務重啟都會觸發合并。

責任編輯:武曉燕 來源: SH的全棧筆記
相關推薦

2022-03-08 08:44:13

偏向鎖Java內置鎖

2009-07-06 16:05:50

JSP特點

2010-04-16 11:08:23

2010-11-16 09:55:12

Oracle分區索引

2021-07-22 06:08:43

SQL.js關系數據庫數據庫

2011-06-07 11:21:04

JSP隱含對象

2011-07-28 10:40:40

Cocoa KVO

2011-08-25 15:10:49

LUAWindows環境配置

2011-07-01 14:34:02

Thread Affinity 信號

2010-10-25 11:51:05

Oracle單行字符串

2010-10-21 15:26:35

SQL Server字

2010-11-12 14:29:46

Sql Server創

2018-11-27 15:55:21

TCP通訊協議

2010-09-27 09:31:42

JVM內存結構

2023-10-30 13:31:22

Springboot工具Java

2021-06-12 07:38:21

Linkerd 2.Service Mes微服務

2022-09-21 18:06:10

Python內存管理

2019-09-18 08:31:47

數據結構設計

2009-04-28 13:48:09

2019-11-04 12:51:48

mysql數據庫nnodb
點贊
收藏

51CTO技術棧公眾號

在线看片福利| 黄色在线网站| 亚洲国产日韩欧美一区二区三区| 亚洲精品电影网站| 嫩草av久久伊人妇女超级a| 一广人看www在线观看免费视频| 韩国理伦片一区二区三区在线播放 | a v视频在线观看| 成人精品中文字幕| 精品久久久三级丝袜| 黄色一级一级片| 性xxxxfjsxxxxx欧美| 久久久噜噜噜久噜久久综合| 91精品视频免费看| 国产一区二区视频网站| 欧美aa国产视频| 一区二区亚洲精品国产| 人妻互换一二三区激情视频| 天然素人一区二区视频| 亚洲午夜一二三区视频| 一区二区在线观| 天天射天天操天天干| 美女视频一区二区| 7777免费精品视频| 四虎影院中文字幕| 国产一区二区三区四区| 亚洲国产精品va在看黑人| 精品亚洲视频在线| 99热播精品免费| 日韩欧美精品中文字幕| 久久青草精品视频免费观看| 国产精品欧美久久久| 久久久视频6r| 青青草这里只有精品| 日韩欧美国产一区在线观看| www.日本xxxx| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲自拍偷拍麻豆| 中国黄色录像片| 欧美日韩在线资源| 欧美国产日韩一二三区| 免费影院在线观看一区| 日韩在线视频第一页| 国产电影一区二区三区| 成人激情在线播放| 97精品人妻一区二区三区香蕉| 久久久蜜桃一区二区人| 日本国产欧美一区二区三区| 国产性xxxx高清| 日韩午夜黄色| 久久男人的天堂| 国产真实夫妇交换视频| 国产在线一二区| 亚洲+变态+欧美+另类+精品| 欧美精品一区二区三区四区| 成人在线观看一区二区| **爰片久久毛片| 亚洲成色777777女色窝| 岛国精品一区二区三区| 草草视频在线一区二区| 精品国一区二区三区| 五月天丁香社区| 国产亚洲精品美女久久| 亚洲福利在线播放| 欧洲一级黄色片| 久久最新网址| 一区国产精品视频| 成年人二级毛片| 自拍日韩欧美| 97在线日本国产| 成人免费视频国产免费| 免费观看在线综合色| 国产精品一区在线| 青青草一区二区| 欧美成人精品网站| 精品制服美女丁香| 亚洲一区二区三区视频| 丰满人妻av一区二区三区| 成人激情午夜影院| 欧美午夜精品理论片a级大开眼界| 蜜桃视频在线入口www| 中文字幕av不卡| 国产精品一二三在线观看| 蜜臀av在线| 色婷婷久久久综合中文字幕| 污视频网站观看| 4438全国亚洲精品观看视频| 亚洲精品一区二区久| 九九热久久免费视频| 好吊日精品视频| 欧美中文在线观看| 国产又粗又猛又爽又黄的| 国产成人免费视| 欧洲av一区| 青青草原av在线| 一本大道久久a久久精二百| 91 在线视频观看| 99久久伊人精品| 欧美激情视频网| 亚洲日本视频在线观看| 久久爱www久久做| 国产一区二区三区色淫影院| 成a人v在线播放| 亚洲国产视频一区二区| 精品久久久久久中文字幕2017| 亚洲欧洲一二区| 日韩精品在线影院| 久久国产美女视频| 日韩黄色免费电影| 国产精品一区而去| 性欧美xxxx视频在线观看| 精品国产乱码久久久久久1区二区| 精品一区二区男人吃奶| 日韩亚洲第一页| 一区二区三区人妻| 亚洲国产综合一区| 国产成人免费av在线| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲高清123| caoporn视频在线观看| 欧美日韩亚洲高清一区二区| 在线黄色免费网站| 中文字幕午夜精品一区二区三区 | 伊人精品在线观看| 成年免费在线观看| 国产a久久麻豆| 中文字幕一区二区三区有限公司 | 成人福利影视| 在线不卡中文字幕| 久久久久久国产免费a片| 夜夜嗨网站十八久久 | 国产视频第二页| 国产日韩欧美a| 国产成人无码精品久久久性色| 亚洲成av人片在线观看www| 精品国产一区二区三区久久久狼| 亚洲 国产 日韩 欧美| 99re8在线精品视频免费播放| 久久久久久久久影视| 亚洲成a人片777777久久| 在线日韩日本国产亚洲| 男操女视频网站| 亚洲国产成人一区二区三区| 国产精品第12页| 免费短视频成人日韩| 性欧美亚洲xxxx乳在线观看| 丁香六月色婷婷| 亚洲一区免费在线观看| 91人人澡人人爽| 激情文学一区| 精品视频导航| 日韩性xxx| 亚洲午夜久久久久久久| 精品乱码一区内射人妻无码 | 欧亚一区二区| 一区二区三区国产视频| 中文精品久久久久人妻不卡| 欧美激情一区二区在线| 一级黄色特级片| 国产精品x453.com| 99精彩视频| 高清毛片在线观看| 亚洲欧洲成视频免费观看| 国产美女www| 1024亚洲合集| 亚洲av熟女高潮一区二区| 亚洲区欧美区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 欧美xx视频| 色999日韩欧美国产| 精品国产黄色片| 午夜精品一区在线观看| 午夜时刻免费入口| 韩国成人福利片在线播放| 日韩一区二区高清视频| 亚洲ab电影| 国产精品一区二区三区毛片淫片| 影音先锋男人在线资源| 日韩av有码在线| 亚洲专区第一页| 亚洲图片第一页| 国产成人高清在线| 青青在线视频观看| 五月久久久综合一区二区小说| 99国产在线观看| 久久99久久99精品免观看软件| 日韩视频在线一区| 亚洲毛片欧洲毛片国产一品色| 色老汉av一区二区三区| 日韩在线观看视频一区二区| 91在线视频播放| 亚洲在线观看网站| 亚洲欧美日韩精品一区二区| 中国一区二区三区| 成人高潮视频| 国产精品直播网红| 川上优av中文字幕一区二区| 色青青草原桃花久久综合| 黄色片一区二区| 欧美日韩www| 久久久久久久久影院| 亚洲欧美日韩系列| 中文幕无线码中文字蜜桃| 国产精品综合久久| 亚洲成人av免费看| 亚洲国产日韩在线| 久久99国产精品一区| 精品国产中文字幕第一页| 99国产超薄肉色丝袜交足的后果| 香蕉成人影院| 69影院欧美专区视频| 色呦呦在线看| 久久精品视频网站| 国产对白叫床清晰在线播放| 亚洲国语精品自产拍在线观看| 91麻豆国产视频| 欧洲一区二区三区在线| 五月婷婷激情网| 亚洲一区在线观看网站| 小早川怜子一区二区的演员表| 久久综合av免费| 波多野结衣视频播放| 国产一二精品视频| 成人不卡免费视频| 日本大胆欧美人术艺术动态| 国产极品美女高潮无套久久久| 亚洲国产专区| 欧美一区二区视频在线播放| 香蕉视频官网在线观看日本一区二区| 日韩福利二区| 小说区图片区色综合区| 国产亚洲欧美一区二区| 成人爽a毛片免费啪啪红桃视频| 成人网址在线观看| 亚州欧美在线| 成人激情视频免费在线| 欧美美女福利视频| 国产精品天天狠天天看 | 亚洲自拍中文字幕| 北岛玲精品视频在线观看| 国产精品视频公开费视频| 日韩精品影片| 国产精品电影观看| 桃子视频成人app| 国产精品69久久| av在线不卡精品| 国产精品爽爽爽| 欧美一级免费| 97久久夜色精品国产九色| 日韩免费成人| 国产精品久久久久久久免费大片 | 久久国产综合精品| 日本中文字幕观看| 狠狠网亚洲精品| 中国老熟女重囗味hdxx| 成人午夜视频在线观看| 国产一级二级视频| 久久久久综合网| 亚洲欧美va天堂人熟伦| 国产精品乱子久久久久| 亚洲天堂一级片| 亚洲国产精品尤物yw在线观看| 国产精品18p| 欧美性猛交丰臀xxxxx网站| 天天爽夜夜爽人人爽| 欧美日韩国产精品自在自线| 国产一区二区三区成人| 日韩欧美三级在线| 亚州av在线播放| 亚洲最新av网址| 91麻豆免费在线视频| 性视频1819p久久| 亚洲www啪成人一区二区| 国产视频999| 红杏视频成人| 亚洲黄色成人久久久| 欧美在线国产| 99爱视频在线| 久久成人久久爱| 国产精品久久久久久亚洲色 | 欧美日韩精品一区| 久久精品国产亚洲夜色av网站 | 秋霞在线视频| 日本欧美在线视频| 国产免费av国片精品草莓男男| 成人欧美一区二区| 国产欧美日韩精品一区二区三区| 一区二区免费电影| 国产欧美一区二区色老头| 免费一级特黄录像| 丁香天五香天堂综合| 小早川怜子久久精品中文字幕| 亚洲欧美aⅴ...| 亚洲精品男人的天堂| 欧美精品久久99| 欧美日韩在线精品一区二区三区激情综| 日韩在线视频网| 英国三级经典在线观看| 成人在线一区二区| 亚洲三级性片| 国产美女永久无遮挡| 麻豆高清免费国产一区| 欧美成人午夜精品免费| 一区二区三区欧美久久| 性色av一区二区三区四区| 亚洲激情视频网站| 成人a在线视频免费观看| 国产精品91久久久| 国产精品玖玖玖在线资源| 中文字幕欧美日韩一区二区| 欧美一级一区| 日本一级片在线播放| 亚洲欧美另类图片小说| 中文在线观看av| 精品一区二区电影| 黄色羞羞视频在线观看| 91在线色戒在线| 日韩免费高清| 国产一区二区视频免费在线观看 | 国产一区二区三区黄| 欧美freesex交免费视频| 在线看的黄色网址| 久久久久久免费网| 久久久久久久久影院| 亚洲成人黄色在线观看| 性欧美videoshd高清| 成人午夜小视频| 国产二区精品| 国模私拍视频在线观看| 中文字幕成人网| 中文在线a天堂| 在线播放精品一区二区三区 | 99re视频| 欧美国产高潮xxxx1819| 免费网站在线观看黄| 国产精品伦一区二区三级视频| 免费在线不卡av| 视频一区二区国产| 我要看一级黄色大片| 国产亚洲成av人在线观看导航| 国产亚洲欧美在线精品| 亚洲女人天堂视频| 欧美电影免费观看| 日本午夜精品一区二区| 日韩精品一二三区| 欧美黄色一级生活片| 欧美日韩在线三区| 香蕉视频网站在线观看| 成人av番号网| 欧美黄色aaaa| av在线天堂网| 婷婷成人激情在线网| 欧美在线观看在线观看| 日本精品免费一区二区三区| 精品freesex老太交| 手机版av在线| 亚洲激情网站免费观看| 欧美视频久久久| 情事1991在线| 日韩欧美精品综合| 手机在线播放av| 亚洲国产美女搞黄色| 麻豆导航在线观看| 国产精品丝袜一区二区三区| 伊人成综合网| 手机在线成人av| 欧美自拍偷拍一区| av激情在线| 久久久久久久久久久一区| 日韩成人一级片| 青青草原免费观看| 亚洲精品美女视频| 久久人体av| 91国在线高清视频| 久久综合精品国产一区二区三区| 中文字幕在线日亚洲9| 九九精品视频在线观看| 欧美美女啪啪| 污网站免费在线| 91黄页在线观看| 99电影网电视剧在线观看| 一区二区久久| 99热99这里只有精品| 日韩欧美一级特黄在线播放| 激情都市亚洲| 影音先锋男人的网站| 91在线精品一区二区三区| 伊人网免费视频| 欧美精品福利在线| 精品免费在线| 97人妻精品一区二区三区免费 | 综合电影一区二区三区| 熟妇人妻中文av无码| 国产精品色婷婷视频| 亚洲高清自拍| 啪啪一区二区三区| 日韩成人在线视频观看| 成人豆花视频| 国产综合免费视频| 亚洲国产另类av|