innodb_buffer_pool_size - xiaoboluo768/qianjinliangfang GitHub Wiki

  • 决定Innodb存储引擎表的数据和索引的最大缓存区大小,和myisam不同,innodb的缓存池是同时缓存数据和索引,在保证操作系统和其他程序有足够内存的情况下,这个参数越大越好,缓存命中率越高,访问磁盘IO就越少,性能也就越高,在一个专用的数据库服务器上,可以将80%的物理内存分配给这个参数,但是要注意,别过大而导致swap产生。
    • 使用如下公式计算innodb缓存池的命中率,如果命中率太低,则考虑扩充内存,增加此参数值(innodb_buffer_pool_reads/innodb_buffer_pool_read_requests是状态变量):(1-innodb_buffer_pool_reads/innodb_buffer_pool_read_requests)*100
    • 较大的缓冲池需要较少的磁盘I / O多次访问同一个表数据。在专用数据库服务器上,可以将缓冲池大小设置为机器物理内存大小的80%。在配置缓冲池大小时,请注意以下潜在问题,可能需要缩小缓冲池的大小
      • 物理内存竞争可能导致在操作系统中分页
      • InnoDB为缓冲区和控制结构保留额外的内存,因此实际buffer pool的总分配空间比指定的缓冲池大小要大约大10%。
      • 缓冲池的地址空间必须是连续的,因为不连续的地址空间可能在Windows系统上加载要求具有特定地址的DLL文件时出现问题。
    • 初始化缓冲池的时间与其缓冲池的大小成正比。在具有大缓冲池的实例上,初始化时间可能很大。为了减少初始化时间,可以在mysqld服务器关闭时保存缓冲池状态,并在mysqld服务器启动时加载缓冲池状态恢复。请参见第14.6.3.7节“保存和恢复缓冲池状态”。
    • 全局变量,只读变量(5.7.x版本可动态修改),默认值为128M, 整型值,最大值需要看操作系统CPU的寻址能力,32位CPU最大值可设置为4294967295 (2^32-1) ,64位CPU可以设置最大值为18446744073709551615 (2^64-1),但CPU的架构和操作系统实际上可能会限制这个最大值的实际大小。当缓冲池的大小大于1GB时,可以将innodb_buffer_pool_instances设置为大于1的值,这样可以提高繁忙服务器的可伸缩性
    • PS:
      • 在5.7.x中,当增加或减少缓冲池大小时,操作将以块为单位执行。 块大小由innodb_buffer_pool_chunk_size(5.7.5版本引入的参数,全局变量,静态变量,取值范围为:1048576~innodb_buffer_pool_size / innodb_buffer_pool_instances字节)配置选项定义,默认值为128 MB。
      • 缓冲池大小必须大于等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的值。 如果将缓冲池大小更改为小于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的值,则缓冲池大小会自动调整为大于等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的值
      • innodb_buffer_pool_size在5.7. 5版本之后可以动态调整(5.7.4及其之前的版本不能动态调整)可以动态设置,这样可以在不重新启动服务器的情况下调整缓冲池大小。 Innodb_buffer_pool_resize_status状态变量打印在线调整缓冲池大小操作的状态

上一篇:binlog_transaction_dependency_tracking | 下一篇:innodb_buffer_pool_instances