innodb_buffer_pool_size参数

它的是一个内存区域,用来缓存 InnoDB存储引擎的表中的数据和索引数据。以便提高对 InnoDB
存储引擎表中数据的查询访问速度。

在查看 innodb_buffer_pool_size
这个参数值的时候,是以 字节(byte)
为单位进行展现的。它的默认值为 134217728
字节,也就是 128MB

  • 134217728/1204/1024=128MB
  • 1MB=1024KB
  • 1KB=1024Byte

在MySQL 5.7.5版本后,可以在不重启MySQL数据库服务的情况下,动态修改这个参数的值,但是在此版本之前的老版本修改后需要重启数据库服务才可以生效。

相关联的参数

innodb_buffer_pool_chunk_size

默认值为 134217728字节,即 128MB。可以按照 1MB的单位进行增加或减小。

可以简单理解成是 innodb_buffer_pool_size增加或缩小最小单位。

innodb_buffer_pool_size是由一个或多个innodb_buffer_pool_chunk_size组成的。

如果修改了 innodb_buffer_pool_chunk_size的值将会导致innodb_buffer_pool_size的值改变。

在修改该参数的时候,需要计算好最后的 innodb_buffer_pool_size是否符合服务器的硬件配置。

innodb_buffer_pool_instances

默认值为1,最大可以设置为64。

不为1的时候,表示需要启用多个缓冲池实例,即把整个 innodb_buffer_pool_size
在逻辑上划分为多个缓存池,多实例可以提高并发性,可以减少不同线程读写缓存页面时的争用。

innodb_buffer_pool_size这个参数的设置,离不开innodb_buffer_pool_chunk_sizeinnodb_buffer_pool_instances的影响

innodb_buffer_pool_size = innodb_buffer_pool_instances * innodb_buffer_pool_chunk_size * x

如果设置的 innodb_buffer_pool_size的值不是 innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances
两者乘积的整数倍(即 x倍),那么 innodb_buffer_pool_size会自动调整为另外一个值,使得这个值是上述两者的乘积或者乘积的整数倍.

所以当我们设置 innodb_buffer_pool_size的值之后,最后的结果并不一定会是我们所设置的结果。

 

1.innodb_buffer_pool_instances的取值范围为[1,64]

2.为了避免潜在的性能问题,chunk的数目不要超过1000这个阈值。也就说: innodb_buffer_pool_size / innodb_buffer_pool_chunk_size的值需要在[1,1000)之间。

3.当 innodb_buffer_pool_instances的值>1时,总的 innodb_buffer_pool_size的大小按照 innodb_buffer_pool_instances的数量划分为多个逻辑上的 buffer_pool

每个逻辑上的 buffer_pool的大小要大于1GB。换算成公式就是说: innodb_buffer_pool_size / innodb_buffer_pool_instances > 1GB

4.innodb_buffer_pool_size 的取值范围建议设置为物理服务器内存的50%~75%,要留一些内存供服务器操作系统本身使用。

如果在数据库服务器上面除了部署MySQL数据库服务,还有部署其他应用和服务,则可以适当再减少对应的百分比。

较小RAM的系统(<= 1GB)

InnoDB缓冲池大小最好采用MySQL默认配置值128MB。

中等RAM (1GB – 32GB)的系统

随着RAM数量的增加以对数的方式增加分配:256MB+256*log2(RAM大小GB)

例如,在一个有3GB内存的系统中,我们会合理分配660MB用于操作系统需求,另外660MB用于MySQL其他需求,这样InnoDB的缓冲池大小约为1.6GB。

较大RAM (> 32GB)的系统

我们将返回到计算系统RAM大小的5%的OS需求,以及计算MySQL其他需求的相同数量。

因此,对于一个RAM大小为192GB的系统,我们的方法将InnoDB缓冲池大小设为165GB左右,这也是使用的最佳值。

如何判断innodb_bufferpool_size是否合适?

方法1 >>>>>>>>

innodb_buffer_pool_reads

The number of logical reads that InnoDB could not satisfy from the buffer pool, and had to read directly from disk

缓存池中不能满足的逻辑读的次数,这些读需要从磁盘中直接读取。

逻辑读是指从缓冲池中读,物理读是指从磁盘读。

innodb_buffer_pool_read_requests

The number of logical read requests

从buffer pool中逻辑读请求次数

从查询SQL命中buffer pool缓存的数据的概率上来判断当前buffer pool是否满足需求,计算从buffer pool中读取数据的百分比如下:

percent = innodb_buffer_pool_read_requests (innodb_buffer_pool_reads + innodb_buffer_pool_read_requests) * 100%

percent>=99%,则表示当前的buffer pool满足当前的需求。否则需要考虑增加innodb_buffer_pool_size的值。

方法2 >>>>>>>>

innodb_buffer_pool_pages_data

The number of pages in the InnoDB buffer pool containing data. The number includes both dirty and clean pages.

innodb buffer pool中的数据页的个数,它的值包括存储数据的数据页和脏数据页。

innodb_buffer_pool_pages_total

The total size of the InnoDB buffer pool, in pages.

innodb buffer pool中的总的数据页数目

innodb_page_size

InnoDB page size (default 16KB). Many values are counted in pages; the page size enables them to be easily converted to bytes.

innodb中的单个数据页的大小。

从buffer pool中缓存的数据占用的数据页的百分比来判断buffer pool的大小是否合适:

percent = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100
percent>=95%则表示我们的 innodb_buffer_pool_size的值是可以满足当前的需求的。否则可以考虑增加 innodb_buffer_pool_size

参考值:

innodb_buffer_pool_size = Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (1024*1024*1024)

作者 admin

百度广告效果展示