原文:MySQL 5.7 Performance Tuning Immediately After Installation

本文是对上一篇《安装 MySQL 后,需要调整的 10 个性能配置项》的更新,并且涵盖了 MySQL 5.7 在安装后,要立刻调整的的性能选项。

几年前,Stephane Combaudon 写了一篇博文 《安装 MySQL 后,需要调整的 10 个性能配置项》(Ten MySQL performance tuning settings after installation) 内容覆盖了 MySQL 5.1, MySQL 5.5 和 MySQL 5.6 这几个老版本的 MySQL。在本文中,我将研究如何对 MySQL 5.7 进行调优(关注 InnoDB 存储引擎)。

一个好消息是,MySQL 5.7 提供了更加合适的默认值。Morgan Tocker 制作了关于一份 MySQL 5.7 的特性完整列表,这是一个很好的参考资料。例如,下面的几个变量都是默认设置的:

innodb_file_per_table = ON

innodb_stats_on_metadata = OFF

innodb_buffer_pool_instances = 8 (or 1 if innodb_buffer_pool_size < 1GB)

query_cache_type = 0; query_cache_size = 0; (disabling mutex)

在 MySQL 5.7 中,实际上只有 4 个重要的选项需要去调整。然而,还有其他的 InnoDB 或者全局的 MySQL 选项可能需要根据特定的负载和硬件来做出调整。

首先,在 my.cnf 中的[mysqld] 节下面添加如下配置。配置完成之后,需要重启 MySQL 服务:

[mysqld]

# other variables here

innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)

innodb_log_file_size = 256M

innodb_flush_log_at_trx_commit = 1 # may change to 2 or 0

innodb_flush_method = O_DIRECT

说明:

选项

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

设置 innodb_autoinc_lock_mode = 2 (interleaved mode) 可以去掉表级 AUTO-INC 锁的必要性(还可以提高在使用多行插入语句来插入数据到拥有自增主键的表的时候的性能)。这要求 binlog_format=ROW 或者 MIXED(在 MySQL 5.7 中,默认值是 ROW)。

innodb_io_capacity 和 innodb_io_capacity_max

这是一个更加高级的调优,只有当你在频繁写操作的时候才有意义(它不适用于读操作,例如 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 的选项来发挥出大内存的优势。

安装完毕之后,遵循以下步骤来操作:

如上所述,在 my.cnf 中配置 InnoDB 选项,并重启 MySQL 服务

部署一套监控系统(例如:Percona 监控语句管理平台)

通过监控图形来判断是否对 MySQL 进一步调优

MySQL5.7 固态盘性能设置_MySQL 5.7 安装完成后,立即要调整的性能选项相关推荐

  1. mysql5.6忘记立马_MySQL 5.7 安装完成后,立即要调整的性能选项

    几年前,Stephane Combaudon 写了一篇博文 <安装 MySQL 后,需要调整的 10 个性能配置项>(Ten MySQL performance tuning settin ...

  2. 安装MYSQL最低的RAM_安装MySQL后,需要调整的10个性能配置项

    在本博客中,我们将和大家讨论下 MySQL 数据库安装后,建议调整的十个性能设置参数. 通常情况下,当我们需要进行 MySQL 性能审计时,我们将审查 MySQL 配置并提出改进建议.在大多数情况下, ...

  3. 请验证实例名称是否正确并且 sql server 已配置为允许远程连接_安装MySQL后,需要调整的10个性能配置项...

    本文翻译自 Percona 官方博客,适用于 MySQL 5.6 及 5.7 版本. 作者:Stephane Combaudon 原文: https://www.percona.com/blog/20 ...

  4. 为什么新装的mysql5.7服务无法启动_mysql 5.7安装 MySQL 服务无法启动但是服务没有报告任何错误...

    MySQL 5.7的安装有两种方式,一种是下载安装程序,点击安装,另一种是下载压缩包,直接解压,配置一下就可以运行了 个人更喜欢压缩包的形式,所以本文记录的也是压死包形式的安装(配置) 我下载的最新的 ...

  5. mysql5.7.10 二进制包_mysql 32 位安装教程mysql5.7 二进制包安装

    1. 下载包 wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz 2. 解压 ...

  6. mysql编译安装后目录空_MySQL源码安装完成后修改安装路径启动问题

    在Linux上源码编译安装完mysql后,又将安装的路径进行了修改,但是发现在设置后环境变量后启动报错,如下: [root@HServer_03 var]# mysqld_safe --user=my ...

  7. 安装Centos7后的一些设置

    核心提示:但CentOS是免费的,不需要向Red Hat支付任何的费用.不同的Linux发行版会使用不同的架构,这种无谓的差异是令人抓狂并且是没有必要的.学习其中的一种并且精通它.这就是为什么我的服务 ...

  8. mysql5性能比较_MySQL 5.7&MySQL 8.0 性能对比

    正文 背景 最早 环境 测试 双1模式下 0 2模式下 摘要 背景 测试mysql5.7和mysql8.0分别在读写,选定,只写模式下不同并发时的性能(tps,qps) 最早 测试使用版本为mysql ...

  9. mysql port range_MySQL 数据库常见调优方法及参数设置_MySQL

    1. 关闭 SELinux vim /etc/selinux/config 更改 SELINUX=enforcing 为 SELINUX=disabled 2. 更改 IO Schedule, 对于 ...

最新文章

  1. 从空间数据库中删除所有拓扑对象
  2. Redis 桌面管理工具 RedisDesktopManager 2019.0 发布
  3. 黄金点游戏之客户端(homework-05)
  4. 定义命令别名(alias)
  5. ORA-01745: invalid host/bind variable name 报错
  6. python语言的类型是_Python的语言类型
  7. 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?
  8. 前端那些事之Nuxt.js
  9. Layui 表格渲染
  10. 统计学习方法学习笔记一
  11. 漏洞扫描工具之nessus
  12. Cry with DX11
  13. 手写仿淘宝商城页面(html+css+部分js)
  14. linux firefox 插件开发教程,Firefox插件(plugins)开发实用指南
  15. 将淘宝爬取的数据写入Excel表格
  16. Pycharm debug Process finished with exit code 1
  17. 入门机器学习需要会哪些编程语言?
  18. RS232/RS485信号转12路模拟信号 隔离D/A转换器WJ34
  19. vue2+element-ui实现表格分页显示
  20. Pytorch实战 | 第P1周:实现mnist手写数字识别

热门文章

  1. 机器学习入门的书单(数据挖掘、模式识别等一样)
  2. Altium Designer布局布线时元器件移动
  3. android 6.0 SystemUI源码分析(1)-SystemUI介绍
  4. ubuntu双系统安装教程
  5. hdu 5148 Cities(树形背包)
  6. SSL协议原理(Secure Socket Layer)【转载】
  7. glusterfs搭建
  8. web学习第七天:来自倔驴的怒吼——生理年龄不代表技术年龄
  9. S3DIS Dataset下载
  10. 2017京东春招实习生招聘编程题