mysql 5.5 优化_MySQL5.5.X不可不说的优化秘密上

4.InnoDB同时支持多个BufferPool实例

InnoDB用来缓存它的数据和索引的内存缓冲区的大小。把innodb_buffer_pool_size参数值设置得越高,访问表中的数据需要的磁盘I/O就越少。在一个专用的数据服务器上,最高可以将这个参数设置为机器物理内存大小的80%。建议不要设置太高,因为对物理内存的竞争可能在操作系统上导致内存调度。

innodb_buffer_pool_size 是InnoDB性能的决定性因素,如果数据库大小小于innodb_buffer_pool_size设置的缓冲池大小,此时数据库的性能是最好的,因为客户端访问的数据都在内存里。

问题:

InnoDB_Buffer_Pool缓冲池复制管理着free list(初始化空闲页,为每一个page指定一个block头结构,并初始化各种mutex与rw-lock,将page加入Buffer_Pool的free list链表,等待分配)、flush list(缓冲池产生的脏页(数据库被修改,但未写入磁盘),当innodb_max_dirty_pages_pct超过设置的值时,会把修改时间较早的page刷入磁盘)、LRU(在内存中但最近又不用的数据块,按照最近最少使用算法,MYSQL会根据哪些数据属于LRU而将其移除内存,从而腾出空间来加载另外的数据)等。

当Innodb_Buffer_Pool缓冲池达到好几十G时,如果某个线程正在更新缓冲池,将会造成其他线程必须等待的瓶颈。

方案:

可以通过innodb_buffer_pool_instances参数来增加InnoDB_Buffer_Pool实例的个数,并使用哈希函数将读取缓存的数据页随机分配到一个缓冲池里面,这样每个缓冲区实例就可以分别管理着自己的free list 、flush lis、LRU,也就可以解决问题。

可以通过参数innodb_buffer_pool_size必须大于1GB时,生成InnoDB_Buffer_Pool多实例才有效,最多支持64个InnoDB_Buffer_Pool实例

参数:

innodb_buffer_pool_instances=3

调整完后可以用命令 show engine innodb status\G;来查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值