日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql内存体系结构_Innodb存储引擎的体系架构之内存

發布時間:2025/3/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql内存体系结构_Innodb存储引擎的体系架构之内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Inndo中緩沖池存在的主要目的是,減少數據庫與磁盤的交互。進程通過內存讀寫數據的速度遠遠快于磁盤。

Innodb內存結構主要由兩部分組成redo_log_buffer和緩沖池,redo_log_buffer作用以后在事務的持久性部分進行展開,今天主要講緩沖池。

緩沖池

緩沖池的大小會直接影響Innodb數據庫的性能,一般生產級別的mysql服務器都會將緩沖池設置為操作系統總內存的3/4,緩沖池主要由四部分組成:

數據頁

索引頁

change buffer

自適應hash索引

數據頁

數據頁就是緩存真實數據的頁,在innodb中數據頁是主鍵所在聚集索引構成的B+Tree數據結構,所以這個數據頁既包含索引又包含數據。

索引頁

索引頁就是緩存數據索引的頁,這里的索引頁代表的是二級索引(非聚集索引)構成的B+Tree數據結構,這個索引包含索引的數據以及數據對一個的主鍵id

Change Buffer

通過詞義就可以知道Buffer是緩沖的意思,一般和Buffer有關的都在內存中。所以Change Buffer在緩沖池扮演的角色就是緩沖不在緩沖池數據的更新(Insert、Update、Delete)。

為什么需要Change Buffer:

如果修改的數據在緩沖池中,無論是查詢和更新都不需要產生隨機IO.

但是如果修改的數據不在緩沖池中,那么就需要將數據讀取到緩存池中然后再進行更新,這樣就會產生隨機IO

Change Buffer的作用就是,不在緩沖池的數據不直接讀取磁盤數據,而是將修改的數據保存在Change Buffer中,Master Thread定期同步臟頁,或者等到真正查詢的時候再產生磁盤IO

Change Buffer默認占用Innodb_buffer_pool1/4的容量,最大可以設置為1/2,通過innodb_change_buffer_max_size進行設置。

這里有幾個問題:

Change Buffer如何保證持久性

Change Buffer也會將數據寫入到redo log中,通過redo log保證數據的可靠性.

Change Buffer適用的索引類型

僅適用于非唯一索引,因為唯一索引需要有唯一性驗證,如果需要唯一性驗證就無法避免從磁盤中讀取數據,所以僅適用于非唯一索引。

Change Buffer適用的場景

非唯一性索引多

寫多讀少

寫完就讀的場景叫少的情況

自適應hash索引

Innodb本身不支持用戶自己設定索引為hash索引,但是會根據條件生成自適應hash索引

因為b+tree可以有效地支持范圍查詢,但是hash索引遇到范圍查詢因為本身無序的特征就無能為力了

Innodb默認開啟自適應hash索引,當數據訪問次數超過總行數的1/16后添加到hash索引中

hash索引的key是索引的前綴,如字段的前綴,value是索引鎖在頁的位置。

通過上圖可以明顯看的出來,hash索引查詢的層數更少一些。

通過參數innodb_adaptive_hash_index來設置參數,默認為on

名稱自適應哈希索引適合使用場景適合使用 = 和 IN 操作符的等值查詢

不合適場景不適合使用 like 和 % 的范圍查詢

優點提高了Innodb的內存使用率和一些情況下二級索引的查詢效率

缺點占用Innodb的內存緩存

引用

總結

以上是生活随笔為你收集整理的mysql内存体系结构_Innodb存储引擎的体系架构之内存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。