MySql优化记录【innodb_buffer_pool_size】、【innodb_buffer_pool_instances】、【innodb_buffer_pool_chunk_size】

一、【innodb_buffer_pool_size】

  对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。
根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。

 重点是50%这个参数,配置的方式如下:

 在my.ini里增加

innodb_buffer_pool_size=2G
如下图:

、【innodb_buffer_pool_instances】

  这个参数能较好的运行于多核处理器,支持使用 此参数对服务器变量建立多个缓冲池实例,每个缓冲池实例分别自我管理空闲列表、列表刷写、LRU以及其它跟缓冲池相关的数据结构,并通过各自的互斥锁进行保护。

  在这个文章里测试后的结论是:4G内存的电脑 ,配置成1比较好  参考网址: https://blog.csdn.net/qing_gee/article/details/42742241

  在另外一个文章里,说是配置成CPU的核心数比较好,参考网址:https://www.jianshu.com/p/f84fe0979cdf

  摘抄如下:

pool_instances 可以设置为cpu核心数,它的作用是:对于缓冲池在数千兆字节范围内的系统,通过减少争用不同线程对缓存页面进行读写的争用,将缓冲池划分为多个单独的实例可以提高并发性。
可以类比为 java中的ThreadLocal 线程本地变量 就是为每个线程维护一个buffer pool实例,这样就不用去争用同一个实例了。相当于减少高并发下mysql对INNODB_BUFFER缓冲池的争用。

三、【innodb_buffer_pool_chunk_size】

  innodb_buffer_pool_size必须始终等于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_chunk_size配置成和innodb_buffer_pool_size一样吧。

四、【实操后的总结】

  我按上面的建议,设置完innodb_buffer_pool_size参数以后,速度提升很大【我是4G的内存,就把innodb_buffer_pool_size和innodb_buffer_pool_chunk_size 设置成了2G】。另外:innodb_buffer_pool_instances这个参数我设置成了1,没有明显变化。

原文地址:https://www.cnblogs.com/wjx-blog/p/15213630.html