时间:2021-07-01 10:21:17 帮助过:14人阅读
说明:
选项 | 值 |
---|---|
innodb_buffer_pool_size | 设置为 RAM 大小的 50%-70%,不需要大于数据库的大小 |
innodb_flush_log_at_trx_commit | 1(默认值),0/2 (性能更好,但稳定性更差) |
innodb_log_file_size | 128M – 2G (不需要大于 buffer pool) |
innodb_flush_method | O_DIRECT (避免双缓冲技术) |
对于新安装的实例而言,那些设置都是很好的起点。还有许多其他的选项,在某些场景下,可以提高 MySQL 的性能。通常,我会部署一套 MySQL 监控/图形工具(例如,Percona 监控语句管理平台,俗称:PMMM),然后根据 MySQL 监控面板提供的信息来执行进一步的调优。
InnoDB 缓冲池大小的信息,看下面这个图:
从上面可以看出,可用的 RAM 和空闲的页的数量小于缓冲池的总大小,我们可以把 InnoDB 缓冲池的大小增加到 10G 从而获得更好的性能。
InnoDB redo 日志的大小的信息,看下面这个图:
可以看到,InnoDB 通常每小时写 2.26GB 的数据,这已经超出了 redo 日志的大小(2G)。现在我们可以增大 innodb_log_file_size
选项,然后重启 MySQL。另外,使用 "show engine innodb status" 命令来计算一个合适的 InnoDB redo 日志的大小值。
有很多其他的 InnoDB 选项可以进一步调整:
设置 innodb_autoinc_lock_mode = 2 (interleaved mode) 可以去掉表级 AUTO-INC 锁的必要性(还可以提高在使用多行插入语句来插入数据到拥有自增主键的表的时候的性能)。这要求 binlog_format=ROW
或者 MIXED
(在 MySQL 5.7 中,默认值是 ROW)。
这是一个更加高级的调优,只有当你在频繁写操作的时候才有意义(它不适用于读操作,例如 SELECTs)。若你真的需要对它进行调整,最好的方法是要了解系统可以支持多大的 IOPS。譬如,假设服务器有一块 SSD 硬盘,我们可以设置 innodb_io_capacity_max=6000
和 innodb_io_capacity=3000
(最大值的一半)。运行 sysbench 或者任何其他基准工具来对磁盘吞吐量来进行基准测试是一个好方法。
然而,我们需要去担心这个选项吗?看下面这张缓冲池的"脏页"
在这种情况下,脏页的总量很大,而且看起来 InnoDB 刷新脏页的速度跟不上脏页的速度。如果我们有一个高速的磁盘子系统(例如:SSD),可以增加 innodb_io_capacity
和 innodb_io_capacity_max 来得到更好的性能。
新的 MySQL 5.7 配置项的默认值对于一般的负载更加友好。与此同时,我们仍然需要配置 InnoDB 的选项来发挥出大内存的优势。
安装完毕之后,遵循以下步骤来操作:
MySQL 5.7 安装完成后,立即要调整的性能选项
标签:mat tun innodb 优势 mode work step city file