Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Mysql之BufferPool中chunk使用

Mysql之BufferPool中chunk的使用及说明

作者:小志的博客

InnoDB通过将BufferPool划分为若干个chunk来优化内存管理,避免了每次调整大小时的耗时操作,每个chunk代表一片连续的内存空间,包含缓冲页和控制块,BufferPool有2个实例,每个实例包含2个chunk,通过innodb_buffer_pool_chunk_size可以指定chunk的大小

BufferPool中chunk的概述

由于每次调整Buffer Pool的大小时,都需要重新向操作系统申请一块连续的内存空间,然后将旧的Buffer Pool中的内容复制到这一块新空间,但是这种操作是极其耗时的。

所以,InnoDB不再一次性为某个Buffer Pool实例向操作系统申请一大片连续的内存空间,而是以一个chunk为单位向操作系统申请空间。

也就是说,一个Buffer Pool实例其实是由若干个chunk组成的。一个chunk就代表一片连续的内存空间,里面包含了若干缓冲页与其对应的控制块。

Buffer Pool包含2个实例

每个实例里包含2个chunk。

通过innodb_buffer_pool_chunk_size指定chunk的大小

【注】:8388608/1024/1024=8MB, innodb_buffer_pool_chunk_size的值并不包含缓冲页对应的控制块的内存空间大小。

因为有chunk这个概念,那么针对上图来看,BufferPool中是存在两个实例的,并且每个BufferPool实例中,又是存在两个chunk的。

而当服务器运行的时候,如果有需要调整BufferPool容量大小的情况发生,那么,就可以针对chunk为维度去执行新增或删除BufferPool内存空间的操作。

如果没有chunk的话,那么我们针对BufferPool容量调整的操作,就需要以BufferPool为维度了,那么必然需要向操作系统再次申请一大片的内存空间,然后再进行缓冲页的拷贝操作。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文