翻译原文:http://www.cnblogs.com/glon/p/6484912.html
英文原文:https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/html
在本文中,咱们将探讨在安装好 MySQL 以后,能够进行调整的影响性能的前 10 个配置选项。mysql
当咱们做为一名 MySQL 性能审计人员被录用时,他们(公司)会但愿咱们从新检查 MySQL 的配置文件,而且给出一些改进的建议。不少人感到很惊讶,由于在大多数状况下,咱们对已安装的实例仅仅对少数的 MySQL 性能配置项建议进行调整,即便这个实例已经启用了几百个选项。本文的目的是给出一份列举了一些关键性配置项的清单。redis
几年前,咱们曾经在这篇博文中给出了一些建议,但从那之后,MySQL 有了很大的改变。sql
即使是经验丰富的人也会失误,也引发不少麻烦。因此在盲目的应用本文推荐的配置项以前,请牢记下面的几项:数据库
你应该常常会查看或调整的 3 个 MySQL 性能配置项。若是没有,你可能很快就会遇到问题。缓存
innodb_buffer_pool_size:这是任何使用 InnoDB 存储引擎的 MySQL 在安装时第一个应该要查看的配置。Buffer pool 是用来缓存数据和索引的:尽量地设置大一点,以确保在进行大多数读操做时是读内存而不是读磁盘。通常设置值为 5-6GB(8GB RAM),20-25G(32GB RAM),100-120GB(128GB RAM)。安全
启动的时候设置 innodb_log_file_size = 512M(也就是 1GB 大小的 redo 日志),这样能够提供充足的写空间。若是你知道你的应用是频繁写入的,而且你使用的 MySQL 版本是 MySQL 5.6,你能够设置 innodb_log_file_size = 4G。服务器
从 MySQL 5.5 开始,InnoDB 成为了默认的存储引擎,而且它的使用频率比其余存储引擎的要多得多。这就是要当心配置它的缘由。并发
在 MySQL 5.6 中,这个配置项是默认开启的,所以多数状况下,你无需操做。对于早期的 MySQL 版本,须要在加载数据以前把它设置成 ON ,由于它只对新建立的表有影响。async
innodb_flush_log_at_trx_commit:默认值为 1,表示 InnoDB 彻底支持 ACID 特性。例如在在一个主节点上,你主要关注数据安全性,这是最好的设置值。然而它会对速度缓慢的磁盘系统形成很大的开销,由于每次将改变刷新到 redo 日志的时候,都须要额外的 fsync 操做。设置为 2,可靠性会差一点,由于已提交的事务只会 1 秒钟刷新一次到 redo 日志,但在某些状况下,对一个主节点而言,这仍然是能够接受的,并且对于复制关系的从库来讲,这是一个很好的值。设置为 0,速度更快,可是在遇到崩溃的时候极可能会丢失一些数据,这只对从库是一个好的设置值。
innodb_flush_method:这个设置项决定了数据和日志刷新到磁盘的方式。当服务器硬件有 RAID 控制器、断电保护、采起 write-back 缓存机制的时候,最经常使用的值是 O_DIRECT;其余大多数场景使用默认值 fdatasync。sysbench 是一个帮助你在这两个值之间作出选择好工具。
query_cache_size:Query Cache(查询缓存)是一个众所周知的瓶颈位,即便在并发量不高的时候也会出现。最好的选择是从一开始就禁用它,经过设置 query_cache_size = 0 (MySQL 5.6 中如今已经默认禁用),并经过其它途径去提升读查询:合适的索引,增长从库去分散读压力,或者使用一个额外的缓存(例如 memcache 或者 redis)。若是你的 MySQL 已经开启了查询缓存,而且没有发现有任何错误,开启查询缓存多是有利的,若是要禁用它,就须要谨慎了。
记录二进制日志不是没有开销的。因此,例如是一个复制关系中的从节点,建议禁用二进制日志。
固然,根据你的负载和硬件的实际状况,还有其余的设置可以起到调优的做用:例如在小内存、高速磁盘,高并发,写密集型的负载下,须要特定的调优。不过本文的目的是给出几个 MySQL 的性能调优配置项,让你能够快速获得一个稳健的配置文件,而不用花费大量的时间去调整一些没那么重要的 MySQL 配置项,或者去查阅官方文档来找出哪些配置项对你而言是相当重要的。