几年前,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_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.6忘记立马_MySQL 5.7 安装完成后,立即要调整的性能选项相关推荐

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

    原文:MySQL 5.7 Performance Tuning Immediately After Installation 本文是对上一篇<安装 MySQL 后,需要调整的 10 个性能配置项 ...

  2. win10下安装Ubuntu后,启动时没有win10选项解决方法

    win10下安装Ubuntu后,启动时没有win10选项解决方法 参考文章: (1)win10下安装Ubuntu后,启动时没有win10选项解决方法 (2)https://www.cnblogs.co ...

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

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

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

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

  5. mysql5.7 最佳实践_MySQL 5.7安装(多实例)最佳实践

    1.新实例目录规划,my.cnf文件配置 [root@localhost ~]# mkdir -p /data/mysql/mysql3307/{data,tmp,logs} [root@localh ...

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

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

  7. mysql-5.5.56配置_mysql 5.5.56免安装版配置方法

    mysql 5.5.56免安装版配置方法 发布时间:2020-10-18 23:16:23 来源:脚本之家 阅读:74 作者:阿安安 mysql 5.5.56免安装版配置方法,本文通过文字代码详解,具 ...

  8. linux上mysql5.7忘记密码,Linux下Mysql5.7忘记密码

    一.问题 linux下的mysql5.7忘记密码 二.解决 第一步:打开mysql5.7的配置文件my.cnf,并在里面增加一行:skip-grant-tables   保存并退出(:wq) [roo ...

  9. mysql为什么每天0点就装东西_MySQL的详细安装教程

    1.安装之前需要注意的几点 建议不要安装最新版本,一般找mysql5.0系列版本即可: mysq1官网有.zip和.msi两种安装形式: zip是压缩包,直接解压缩以后使用的,需要自己配置各种东西:m ...

最新文章

  1. 直播 | NeurIPS 2021:基于投影变换建模传递关系的知识图谱表示学习
  2. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-7底层驱动之滴嗒定时器
  3. 使用JWT进行跨域身份验证
  4. Spring MVC 中使用AOP 进行事务管理--XML配置实现
  5. linux c之用fputc和fgetc复制文件并且打印在终端
  6. elementui的tree组件页面显示不出数据_只要10分钟,教你配置出炫酷的数据可视化大屏...
  7. clob存base64文件存不进去_工行信用卡这几个提额方法,你知道吗?一般人我不告诉他!...
  8. 22 C#中的异常处理入门 try catch throw
  9. Android8.1 swap空间不够编译失败:ckati failed with: signal: interrupt
  10. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2.4 存储...
  11. 水下通信方式以及WSN(无线传感器网络
  12. 计算机三级网络技术考过指南
  13. 短视频开发,录制视频添加背景音乐功能实现
  14. 脑裂是什么,zk是如何解决脑裂问题的
  15. mysql: [Warning] Using a password on the command line interface can be insecure.解决方法
  16. 清华大学网上课程面向全国免费开放!无需登录、注册!在家上清华!
  17. 《录屏工具:真正的两款良心免费开源录屏软件》
  18. php体育网站模板,运动健身企业的网站模板
  19. Python 求解e^(-x)/x函数在区间[0.01, ∞]上的定积分
  20. 食品科学与工程考研可以考计算机吗,食品科学与工程考研考哪些科目

热门文章

  1. bash 历史记录_这些提示使Bash历史记录更加有用
  2. devops测试_使用DevOps管道自动执行用户验收测试
  3. 如何在Linux上运行Windows软件?
  4. 软件构建设计图_游戏设计如何帮助您构建更好的软件
  5. 现实复杂 devops解决_咖啡店DevOps:变革的复杂性
  6. ByWater Solutions支持在图书馆中使用开源
  7. res.data.data_在Data.gov进行幕后推销
  8. 前端:JS/20/数组(数组的概念,数组元素,数组索引,数组元素的访问,数组的长度,数组的创建方法,数组的操作,实例:使用数组保存个人信息,实例:求数组所有值的平均值,数组对象的length属性)
  9. C语言之变量存储类型与链接属性
  10. HTML5 Canvas操作图像像素