如果开启了AHI(adaptive hash index,自适应哈希索引)就关闭AHI,这里因为AHI是通过buffer pool中的B+树页构造而来。
如果新设定的buffer pool size小于原来的size,就需要计算需要删除的chunk数目withdraw_target。
遍历buffer pool instances,锁住buffer pool,收集free list中的chunk page到withdraw,直到withdraw_target或者遍历完,然后释放buffer pool锁。
停止加载buffer pool。
如果free list中没有收集到足够的chunk,则重复遍历收集,每次重复间隔时间会指数增加1s、2s、4s、8s…,以等待事务释放资源。
锁住buffer pool,开始增减chunk。
如果改变比较大,超过2倍,会重置page hash,改变桶大小。
释放buffer_pool,page_hash锁。
改变比较大时候,重新设置buffer pool大小相关的内存结构。
开启AHI。
MySQL buffer pool resize流程
点赞
收藏