4. Buffer Pool生产经验

93 阅读1分钟

1. 多Buffer Pool优化数据库并发性能

多线程访问Buffer Pool是用到锁的,但是由于都是在内存内操作,基本是微秒级别,所以性能也不会差多少。

如果资源够,可以分配多个Buffer Pool来提升并发性能,配置如下:

[server]
innodb_buffer_pool_size=8589934592
innodb_buffer_pool_instances=4

即分配8G内存,给4个Buffer Pool。

Mysql的默认规则是,如果分配小于1GB,那么最多就只会给你一个Buffer Pool。

2. 通过chunk来支持运行期间Buffer Pool动态调整

buffer pool由多个chunk组成,大小由innodb_buffer_pool_chunk_size参数控制,默认是128M。

假设设置总大小是8G,由4个组成,每个就2G,每个buffer pool包含16个128M的chunk,每个buffer pool里面的chunk共享一套free、flush、lru这些链表

如果此时要从8G扩容到16G,只要申请128MB的chunk就行了,而不是重新申请16G的连续的内存,copy 原8g的到16g里面,只要chunk是连续的128M就行了、然后把申请到的chunk内存分配给buffer pool。

3. 生产环境设置Buffer Pool大小

推荐设置为机器内存的50%~60%

buffer pool总大小=(chunk大小*buffer pool数量)的2倍数

SHOW ENGINE INNODB STATUS 可以看到当前的Buffer Pool的状态