推荐一篇针对MySQL数据库缓存参数优化的文章

时间:2022-09-20 22:03:53

简朝阳以前是阿里巴巴的DBA,在MySQL方面非常厉害,著有《MySQL性能调优与架构设计》一书,这本书我也买了。
针对MySQL数据库性能优化中的缓存参数优化,我在博客上向他提出了能否提供一些具体的建议取值范围后,他根据自己多年的经验在文章中进行了详细的补充,非常值得我们参考。

文章链接:http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter

下面是相关内容:
---
上面这几个参数是 MySQL 中为了减少磁盘物理IO而设计的主要参数,对 MySQL 的性能起到了至关重要的作用。
—EOF—
按照 mcsrainbow 朋友的要求,这里列一下根据以往经验得到的相关参数的建议值:
query_cache_type : 如果全部使用innodb存储引擎,建议为0,如果使用MyISAM 存储引擎,建议为2,同时在SQL语句中显式控制是否使用query cache;
query_cache_size: 根据 命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))进行调整,一般不建议太大,256MB可能已经差不多了,大型的配置型静态数据可适当调大;
binlog_cache_size: 一般环境2MB~4MB是一个合适的选择,事务较大且写入频繁的数据库环境可以适当调大,但不建议超过32MB;
key_buffer_size: 如果不使用MyISAM存储引擎,16MB足以,用来缓存一些系统表信息等。如果使用 MyISAM存储引擎,在内存允许的情况下,尽可能将所有索引放入内存,简单来说就是“越大越好”;
bulk_insert_buffer_size: 如果经常性的需要使用批量插入的特殊语句(上面有说明)来插入数据,可以适当调大该参数至16MB~32MB,不建议继续增大,默认8MB;
innodb_buffer_pool_size: 如果不使用InnoDB存储引擎,可以不用调整这个参数,如果需要使用,在内存允许的情况下,尽可能将所有的InnoDB数据文件存放如内存中,同样将但来说也是“越大越好”;
innodb_additional_mem_pool_size: 一般的数据库建议调整到8MB~16MB,如果表特别多,可以调整到32MB,可以根据error log中的信息判断是否需要增大;
innodb_log_buffer_size: 默认是1MB,系的如频繁的系统可适当增大至4MB~8MB。当然如上面介绍所说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过32MB;
innodb_max_dirty_pages_pct: 根据以往的经验,重启恢复的数据如果要超过1GB的话,启动速度会比较慢,几乎难以接受,所以建议不大于 1GB/innodb_buffer_pool_size(GB)*100 这个值。当然,如果你能够忍受启动时间比较长,而且希望尽量减少内存至磁盘的flush,可以将这个值调整到90,但不建议超过90;

 

值得一提的是,在性能很差的SATA硬盘上,进行以上的调优并不会带来性能上的大幅度提升。因为SATA硬盘的IO本身就很差,所以针对服务器环境,至少也要配备SAS硬盘,同时利用RAID0或RAID5来提升IO,在此基础上再进行以上调优,效果会更好。我就曾经被SATA硬盘困扰了很长时间,后来通过升级到SAS和SSD解决了问题,尤其是SSD硬盘,带来的IO性能提升相当显著。