MySQL 5.7 安装完成后,立即要调整的性能选项
原文: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 进一步调优
MySQL 5.7 安装完成后,立即要调整的性能选项的更多相关文章
- MySQL 5.7 安装完成后,首次登陆的几个问题
		Server:CentOS 7.0 MySQL : 5.7.20 MySQL Community Server (GPL) 1.首次登陆后修改密码: 根据安装时的选择不同,有mysqld_safe用m ... 
- win10下安装Ubuntu后,启动时没有win10选项解决方法
		通过在ubuntu里修改启动引导,解决. 1.进入Ubuntu系统,Ctrl+alt+t进入终端,输入以下命令即可 sudo gedit /etc/default/grub 2.在打开的gedit编辑 ... 
- MySQL for Mac 安装和基本操作
		一.安装mysql 1.mysql下载地址http://dev.mysql.com/downloads/mysql/我的机器是mac 10.8的;所以使用mysql-5.6.10-osx10.7-x8 ... 
- 转-MySQL for Mac 安装和基本操作
		一.安装mysql 1.mysql下载地址:http://dev.mysql.com/downloads/mysql/ 2.安装软件包位于硬盘映象(.dmg)文件中,必须首先双击搜索起中的图标来安装该 ... 
- 安装完MySQL后必须要调整的10项配置
		2014年02月10日11:11 来源:开源中国 作者:BoydWang, 美好的2014, DrZ 编辑:徐志远 标签: 配置 , mysql , 数据库 [IT168 评论]当我们被人雇来监测My ... 
- Window下MySql 5.6 安装后内存占用很高的问题
		Window下MySql 5.6 安装后内存占用很高的问题 刚刚准备玩一把mysql,初学者 环境是window 7和window sever 2008, mysql是最新的5.6, 发现的问题是安装 ... 
- linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
		问题背景 平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在php引擎中需要配置使用mysql.so扩展.这时需要手动编译生成 ... 
- 安装MySQL后,需要调整的10个性能配置项
		本文翻译自 Percona 官方博客,适用于 MySQL 5.6 及 5.7 版本. 作者:Stephane Combaudon 原文: https://www.percona.com/blog/20 ... 
- MySQL:Fabric 安装
		MySQL Fabric安装 MySQL Fabric是Oracle提供的用于辅助进行ha\sharding的工具,它的基本架构: 从上面看出,借助于Fabric, 可以搭建 HA 集群.Sharin ... 
随机推荐
- iOS 沙盒
			1. 概念 某个应用程序的非代码文件存放空间. 2. 文件结构 每个沙盒有三个文件夹: Documents: 存放文件 Library: 存放默认设置或状态信息.Library/caches: 缓存文 ... 
- osgEarth学习笔记(转载)
			osgEarth学习笔记1. 通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染:所以如果 ... 
- origin从图中获得数据
			有Origin的原图,即利用Origin的"copy page"功能直接拷贝到文字处理软件的数据图,对于这种图,双击用Origin打开后,双击要导出数据的权限,打开"pl ... 
- RAC 开启gsd和oc4j服务
			Oracle 11g RAC中,发现oc4j以及gsd服务都处于offline状态,这是Oracle 11g RAC默认情形.即便如此,并不影响数据库的使用,因为 oc4j 是用于WLM 的一个资源, ... 
- RMAN-06217: not connected to auxiliary database with a net service name
			RMAN> duplicate target database to clonedb from active database; Starting Duplicate Db at 28-JAN- ... 
- 简单加解密算法 - vb.net
			Public Class Form1 Dim charAarray() As Char '加密 Private Sub Btn_En_Click(sender As System.O ... 
- 从RPC开始(二)、序列化
			在C++的世界里构建一个序列化框架:并非一件困难的事情,但也并非简单.因此,需要分成两部分来完成这项任务: 1.序列化容器. 2.序列化方式. 前者,很容易理解:但也决定着我们将要存储数据的方式:二进 ... 
- NMEA-0183协议解析
			NMEA-0183 NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association )为海用电子设备制定的标准格式.目前业已成了GPS导航设备 ... 
- 数据结构(Java描述)之二叉树
			基础概念 二叉树(binary tree)是一棵树,其中每个结点都不能有多于两个儿子. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它 ... 
- 告诉你 IOS9.0 之后的Bitcode到底是什么!!
			用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: ld: ‘/Users/**/Framework/SDKs/PolymerPa ... 
