InnoDB 缓冲池
InnoDB 维护一个称为缓冲池的存储区域, 用于缓存内存中的数据和索引
缓冲池的大小当然是越大越好 (为服务器上的其他进程留下足够的内存)
InnoDB 已块的形式存储缓存 通过以下参数配置缓存大小
// 查看总缓存大小
show global variables like 'innodb_buffer_pool_size';
// 查看每个缓存池的大小
show global variables like 'innodb_buffer_pool_chunk_size';
// 缓存池的数量
show global variables like 'innodb_buffer_pool_instances';
总缓存大小必须是 ( 每个缓存池的大小 * 缓存池的数量 ) 的倍数
当设置的innodb_buffer_pool_size
不是 innodb_buffer_pool_chunk_size
* innodb_buffer_pool_instances
倍数时 那么mysql会自动调整 innodb_buffer_pool_size 的大小 ( 向上取值到 最近的一次倍数 )
# 如
innodb_buffer_pool_size = 9G
innodb_buffer_pool_chunk_size = 128M
innodb_buffer_pool_instances = 16
128*16 = 2048M
那么 9G 不是 2048M 的倍数 则 innodb_buffer_pool_size 自动向上取最近的一个为2048M倍数的值 10G
设置缓存池大小
动态设置
SET GLOBAL innodb_buffer_pool_size = 402653184;
# 配置文件
[mysqld]
innodb_buffer_pool_size = 134217728
配置多个缓冲池
将缓冲池划分为多个单独的实例,通过减少不同线程读取和写入缓存的争用来提高并发性
此功能通常适用于千兆范围内的系统
innodb_buffer_pool_instances 默认值为 1
调整参数 将 innodb_buffer_pool_instances 最大可设置为64个
将每个缓存池的大小至少分配到1G或更高