mysql内存体系结构_Innodb存储引擎的体系架构之内存
Inndo中緩沖池存在的主要目的是,減少數(shù)據(jù)庫(kù)與磁盤的交互。進(jìn)程通過(guò)內(nèi)存讀寫數(shù)據(jù)的速度遠(yuǎn)遠(yuǎn)快于磁盤。
Innodb內(nèi)存結(jié)構(gòu)主要由兩部分組成redo_log_buffer和緩沖池,redo_log_buffer作用以后在事務(wù)的持久性部分進(jìn)行展開,今天主要講緩沖池。
緩沖池
緩沖池的大小會(huì)直接影響Innodb數(shù)據(jù)庫(kù)的性能,一般生產(chǎn)級(jí)別的mysql服務(wù)器都會(huì)將緩沖池設(shè)置為操作系統(tǒng)總內(nèi)存的3/4,緩沖池主要由四部分組成:
數(shù)據(jù)頁(yè)
索引頁(yè)
change buffer
自適應(yīng)hash索引
數(shù)據(jù)頁(yè)
數(shù)據(jù)頁(yè)就是緩存真實(shí)數(shù)據(jù)的頁(yè),在innodb中數(shù)據(jù)頁(yè)是主鍵所在聚集索引構(gòu)成的B+Tree數(shù)據(jù)結(jié)構(gòu),所以這個(gè)數(shù)據(jù)頁(yè)既包含索引又包含數(shù)據(jù)。
索引頁(yè)
索引頁(yè)就是緩存數(shù)據(jù)索引的頁(yè),這里的索引頁(yè)代表的是二級(jí)索引(非聚集索引)構(gòu)成的B+Tree數(shù)據(jù)結(jié)構(gòu),這個(gè)索引包含索引的數(shù)據(jù)以及數(shù)據(jù)對(duì)一個(gè)的主鍵id
Change Buffer
通過(guò)詞義就可以知道Buffer是緩沖的意思,一般和Buffer有關(guān)的都在內(nèi)存中。所以Change Buffer在緩沖池扮演的角色就是緩沖不在緩沖池?cái)?shù)據(jù)的更新(Insert、Update、Delete)。
為什么需要Change Buffer:
如果修改的數(shù)據(jù)在緩沖池中,無(wú)論是查詢和更新都不需要產(chǎn)生隨機(jī)IO.
但是如果修改的數(shù)據(jù)不在緩沖池中,那么就需要將數(shù)據(jù)讀取到緩存池中然后再進(jìn)行更新,這樣就會(huì)產(chǎn)生隨機(jī)IO
Change Buffer的作用就是,不在緩沖池的數(shù)據(jù)不直接讀取磁盤數(shù)據(jù),而是將修改的數(shù)據(jù)保存在Change Buffer中,Master Thread定期同步臟頁(yè),或者等到真正查詢的時(shí)候再產(chǎn)生磁盤IO
Change Buffer默認(rèn)占用Innodb_buffer_pool1/4的容量,最大可以設(shè)置為1/2,通過(guò)innodb_change_buffer_max_size進(jìn)行設(shè)置。
這里有幾個(gè)問(wèn)題:
Change Buffer如何保證持久性
Change Buffer也會(huì)將數(shù)據(jù)寫入到redo log中,通過(guò)redo log保證數(shù)據(jù)的可靠性.
Change Buffer適用的索引類型
僅適用于非唯一索引,因?yàn)槲ㄒ凰饕枰形ㄒ恍则?yàn)證,如果需要唯一性驗(yàn)證就無(wú)法避免從磁盤中讀取數(shù)據(jù),所以僅適用于非唯一索引。
Change Buffer適用的場(chǎng)景
非唯一性索引多
寫多讀少
寫完就讀的場(chǎng)景叫少的情況
自適應(yīng)hash索引
Innodb本身不支持用戶自己設(shè)定索引為hash索引,但是會(huì)根據(jù)條件生成自適應(yīng)hash索引
因?yàn)閎+tree可以有效地支持范圍查詢,但是hash索引遇到范圍查詢因?yàn)楸旧頍o(wú)序的特征就無(wú)能為力了
Innodb默認(rèn)開啟自適應(yīng)hash索引,當(dāng)數(shù)據(jù)訪問(wèn)次數(shù)超過(guò)總行數(shù)的1/16后添加到hash索引中
hash索引的key是索引的前綴,如字段的前綴,value是索引鎖在頁(yè)的位置。
通過(guò)上圖可以明顯看的出來(lái),hash索引查詢的層數(shù)更少一些。
通過(guò)參數(shù)innodb_adaptive_hash_index來(lái)設(shè)置參數(shù),默認(rèn)為on
名稱自適應(yīng)哈希索引適合使用場(chǎng)景適合使用 = 和 IN 操作符的等值查詢
不合適場(chǎng)景不適合使用 like 和 % 的范圍查詢
優(yōu)點(diǎn)提高了Innodb的內(nèi)存使用率和一些情況下二級(jí)索引的查詢效率
缺點(diǎn)占用Innodb的內(nèi)存緩存
引用
總結(jié)
以上是生活随笔為你收集整理的mysql内存体系结构_Innodb存储引擎的体系架构之内存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql中标记某条数据库_一个关系数据
- 下一篇: mysql 事务关联_MySQL 关联、