博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL优化:innodb_buffer_pool_instances与innodb_buffer_pool_size参数分析
阅读量:4160 次
发布时间:2019-05-26

本文共 1995 字,大约阅读时间需要 6 分钟。

首先了解三个参数三个参数:

innodb_buffer_pool_size(缓冲池大小)

(定义InnoDB缓冲池大小调整操作的块大小)

(InnoDB 划分为的区域数)

关于两个参数的关系,在MySQL8.0的官方文档中:

Buffer pool size must always be equal to or a multiple of  * . If you alter the buffer pool size to a value that is not equal to or a multiple of  * , buffer pool size is automatically adjusted to a value that is equal to or a multiple of  * .

翻译为:

innodb_buffer_pool_size必须始终等于或 的倍数。如果将缓冲池大小更改为不等于  或  的倍数,则缓冲池大小将自动调整为等于 或 的倍数。

所以得到第一个结论:

1、innodb_buffer_pool_size必须为 innodb_buffer_pool_instances 的倍数。

 

那么这个比例,应该怎么设置才好呢?

 

再继续看官方文档关于参数的说明:

 

 

通过这一部分的内容,我们可以知道 innodb_buffer_pool_instances参数的功能 是:

  • 对于缓冲池在数千兆字节范围内的系统,通过减少争用不同线程对缓存页面进行读写的争用,将缓冲池划分为多个单独的实例可以提高并发性。
  • 使用散列函数将存储在缓冲池中或从缓冲池读取的每个页面随机分配给其中一个缓冲池实例。每个缓冲池管理自己的空闲列表, , 和连接到缓冲池的所有其他数据结构,并受其自己的缓冲池量保护。

除32位Windows系统的其它所有平台上innodb_buffer_pool_instances参数的默认值为:

  • innodb_buffer_pool_size<1G时,默认值为1;
  • innodb_buffer_pool_size>1G时,默认值为8。

32位Windows系统上的默认值取决于的值 ,如下所述:

  • 如果  大于1.3GB,则默认 innodb_buffer_pool_instances 值为 innodb_buffer_pool_size/ 128MB,每个块都有单独的内存分配请求。选择1.3GB作为边界,在该边界处32位Windows无法分配单个缓冲池所需的连续地址空间存在很大风险。否则,默认值为1。

所以可得第二个结论:

2、在Linux平台上,大于或等于1GB 时,默认值为8 。否则,默认值为1。

 

那究竟如何设置才能更好优化MySQL缓冲池的性能? 继续看官方文档:

  • 这里继续解释了innodb_buffer_pool_instances参数的作用,要启用多个缓冲池实例,请将innodb_buffer_pool_instances配置选项设置为 大于1(默认)的值,最大为64(最大)。仅当您将innodb_buffer_pool_size大小设置为1GB或更大时,此选项才生效 。您指定的总大小将分配给所有缓冲池。为了获得最佳效率,指定的组合 innodb_buffer_pool_instances 和innodb_buffer_pool_size,使得每个缓冲池实例是至少为1GB。

所以可得第三个结论:

3、innodb_buffer_pool_instanes的值最大为64,innodb_buffer_pool_instances 和 innodb_buffer_pool_size的组合,每个缓冲池实例至少为1GB。

 

通过查阅一些资料了解到:

  • MySQL 5.5引入了缓冲实例作为减小内部锁争用来提高MySQL吞吐量的手段。
  • 很多用户反映在自己的测试中,在5.5版本中这个参数对提升吞吐量帮助很小(innodb_buffer_pool_size=2G时,innodb_buffer_pool_instances=1的性能最高),然后在MySQL 5.6版本这个提升就非常大了,所以在MySQL 5.6和5.7或者更高的版本中你可以设置为8-16个缓冲池实例。

 

针对当前MySQL企业用户的实际环境(大内存):

1、在专用数据库服务器上,可以将innodb_buffer_pool_size设置为计算机物理内存大小的80%;

2、在innodb_buffer_pool_size设置比较大的情况下,可以将innodb_buffer_pool_instances的值设置为8-16,保证一个pool 10G以上。

(注意innodb_buffer_pool_size必须为 innodb_buffer_pool_instances 的倍数)

 

 

 

 

 

转载地址:http://vbjxi.baihongyu.com/

你可能感兴趣的文章
985硕士:非科班自学编程感觉还不如培训班出来的,硕士白读了?
查看>>
码农:和产品对一天需求,产品经理的需求是对完了,可我代码呢?
查看>>
第六章 背包问题——01背包
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>