mysql缓冲池怎么调 mysql缓冲池 多大( 九 )


8.INNODB_THREAD_CONCURRENCY
InnoDB有一种方法来控制并行执行的线程数 – 我们称为并发控制机制 。大部分是由innodb_thread_concurrency值来控制的 。如果设置为0,并发控制就关闭了 , 因此InnoDB会立即处理所有进来的请求(尽可能多的) 。
在你有32CPU核心且只有4个请求时会没什么问题 。不过想像下你只有4CPU核心和32个请求时 – 如果你让32个请求同时处理,你这个自找麻烦 。因为这些32个请求只有4 CPU核心,显然地会比平常慢至少8倍(实际上是大于8倍) , 而然这些请求每个都有自己的外部和内部锁,这有很大可能堆积请求 。
下面介绍如何更改这个变量,在mysql命令行提示符执行:
对于大多数工作负载和服务器,设置为8是一个好开端,然后你可以根据服务器达到了这个限制而资源使用率利用不足时逐渐增加 。可以通过show engine innodb status\G来查看目前查询处理情况 , 查找类似如下行:
9.SKIP_NAME_RESOLVE
这一项不得不提及,因为仍然有很多人没有添加这一项 。你应该添加skip_name_resolve来避免连接时DNS解析 。
大多数情况下你更改这个会没有什么感觉,因为大多数情况下DNS服务器解析会非常快 。不过当DNS服务器失败时,它会出现在你服务器上出现“unauthenticated connections”,而就是为什么所有的请求都突然开始慢下来了 。
所以不要等到这种事情发生才更改 。现在添加这个变量并且避免基于主机名的授权 。
10.INNODB_IO_CAPACITY, INNODB_IO_CAPACITY_MAX
* innodb_io_capacity:用来当刷新脏数据时,控制MySQL每秒执行的写IO量 。
* innodb_io_capacity_max: 在压力下,控制当刷新脏数据时MySQL每秒执行的写IO量
首先,这与读取无关 – SELECT查询执行的操作 。对于读操作,MySQL会尽最大可能处理并返回结果 。至于写操作,MySQL在后台会循环刷新,在每一个循环会检查有多少数据需要刷新,并且不会用超过innodb_io_capacity指定的数来做刷新操作 。这也包括更改缓冲区合并(在它们刷新到磁盘之前 , 更改缓冲区是辅助脏页存储的关键) 。
第二,我需要解释一下什么叫“在压力下”,MySQL中称为”紧急情况” , 是当MySQL在后台刷新时,它需要刷新一些数据为了让新的写操作进来 。然后,MySQL会用到innodb_io_capacity_max 。
那么,应该设置innodb_io_capacity和innodb_io_capacity_max为什么呢?
最好的方法是测量你的存储设置的随机写吞吐量,然后给innodb_io_capacity_max设置为你的设备能达到的最大IOPS 。innodb_io_capacity就设置为它的50-75%,特别是你的系统主要是写操作时 。
通常你可以预测你的系统的IOPS是多少 。例如由8 15k硬盘组成的RAID10能做大约每秒1000随机写操作,所以你可以设置innodb_io_capacity=600和innodb_io_capacity_max=1000 。许多廉价企业SSD可以做4,000-10,000 IOPS等 。
这个值设置得不完美问题不大 。但是,要注意默认的200和400会限制你的写吞吐量 , 因此你可能偶尔会捕捉到刷新进程 。如果出现这种情况,可能是已经达到你硬盘的写IO吞吐量 , 或者这个值设置得太小限制了吞吐量 。
11.INNODB_STATS_ON_METADATA
如果你跑的是MySQL 5.6或5.7,你不需要更改innodb_stats_on_metadata的默认值,因为它已经设置正确了 。
不过在MySQL 5.5或5.1,强烈建议关闭这个变量 – 如果是开启 , 像命令show table status会立即查询INFORMATION_SCHEMA而不是等几秒再执行,这会使用到额外的IO操作 。
从5.1.32版本开始,这个是动态变量,意味着你不需要重启MySQL服务器来关闭它 。
12.INNODB_BUFFER_POOL_DUMP_AT_SHUTDOWNINNODB_BUFFER_POOL_LOAD_AT_STARTUP

推荐阅读