新聞中心
這篇文章主要介紹“innodb新特性之怎么使用buffer pool動(dòng)態(tài)調(diào)整大小”,在日常操作中,相信很多人在innodb新特性之怎么使用buffer pool動(dòng)態(tài)調(diào)整大小問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”innodb新特性之怎么使用buffer pool動(dòng)態(tài)調(diào)整大小”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
5.7 開始支持buffer pool 動(dòng)態(tài)調(diào)整大小,每個(gè)buffer_pool_instance
都由同樣個(gè)數(shù)的chunk組成(chunks數(shù)組), 每個(gè)chunk內(nèi)存大小為innodb_buffer_pool_chunk_size
(實(shí)際會(huì)偏大5%,用于存放chuck中的block信息)。buffer pool以innodb_buffer_pool_chunk_size
為單位進(jìn)行動(dòng)態(tài)增大和縮小。調(diào)整前后innodb_buffer_pool_size
應(yīng)一直保持是innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
的倍數(shù)。
同樣的buffer pool動(dòng)態(tài)調(diào)整大小由后臺(tái)線程buf_resize_thread
,set命令會(huì)立即返回。通過InnoDB_buffer_pool_resize_status
可以查看調(diào)整的運(yùn)行狀態(tài)。
resize流程
如果開啟了AHI,需禁用AHI
如果是收縮內(nèi)存
開始resize
如果禁用了AHI,此時(shí)開啟
鎖住所有instance的buffer_pool,page_hash
收縮pool:以chunk為單位釋放要收縮的內(nèi)存
清空withdraw列表buf_pool->withdraw
增大pool:分配新的chunk
重新分配buf_pool->chunks
如果改變/縮小超過2倍,會(huì)重置page hash,改變桶大小
釋放buffer_pool,page_hash鎖
如果改變/縮小超過2倍,會(huì)重啟和buffer pool大小相關(guān)的內(nèi)存結(jié)構(gòu),如鎖系統(tǒng)(lock_sys_resize),AHI(btr_search_sys_resize), 數(shù)據(jù)字段(dict_resize)等
計(jì)算需收縮的chunk數(shù), 從chunks開始尾部刪除指定個(gè)數(shù)的chunk.
鎖buf_pool
從free_list中摘除待刪chunk的page放入待刪鏈表buf_pool->withdraw
如果待刪chunk的page為臟頁,則刷臟
重新加載LRU中要?jiǎng)h除的頁,從LRU中摘除,重新從free列表獲取page老的page放入待刪鏈表buf_pool->withdraw
釋放buffer pool鎖
如果需收縮的chunk pages沒有收集全,重復(fù)2-6
由上可以看出,擴(kuò)大內(nèi)存比縮小內(nèi)存相對(duì)容易些。縮小內(nèi)存時(shí),如果遇到有事務(wù)一直未提交且占用了待收縮的page時(shí),導(dǎo)致收縮一直重試,error log會(huì)打印這種重試信息, 包含可能引用此問題的事務(wù)信息。為了避免頻繁重試,每次重試的時(shí)間間隔會(huì)指數(shù)增長。
以上步驟中resize階段buffer pool會(huì)不可用,此階段會(huì)鎖所有buffer pool, 但此階段都是內(nèi)存操作,時(shí)間比較短。收縮內(nèi)存階段耗時(shí)可能會(huì)很長,也有一定影響,但是每次都是以instance為單位進(jìn)行鎖定的。 總的來說,buffer pool 動(dòng)態(tài)調(diào)整大小對(duì)應(yīng)用的影響并不大。
重新加載LRU中要?jiǎng)h除的頁的影響
search 過程中btr游標(biāo)保存的page可能重新加載過,自適應(yīng)哈希保存的root page也可能重新加載過, 都需要重新讀取。
到此,關(guān)于“innodb新特性之怎么使用buffer pool動(dòng)態(tài)調(diào)整大小”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)站欄目:innodb新特性之怎么使用bufferpool動(dòng)態(tài)調(diào)整大小-創(chuàng)新互聯(lián)
本文地址:http://ef60e0e.cn/article/dejgep.html