MySQL参数调优最佳实践
来自: http://www.monkeyp.cn/show-10851.html
前言
很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释:
哪一些参数不能修改,那一些参数可以修改;
这些提供修改的参数是不是已经是最佳设置,如何才能利用好这些参数;
哪些参数可以改
细心的用户在购买RDS的时候都会看到,不同规格能够提供的最大连接数以及内存是不同的,所以这一些产品规格的限制参数:连接数、内存用户是不能够修改的,如果内存或者连接数出现了瓶颈:
内存瓶颈:实例会出现OOM,然后导致主备发生切换
连接数瓶颈:应用不能新建立连接到数据库
则需要进行应用优化、慢SQL优化或者进行弹性升级实例规格来解决。
还有一些涉及主备数据安全的参数比如innodb_flush_log_at_trx_commit、sync_binlog、gtid_mode、semi_sync、binlog_format等为了保证主备的数据安全,目前还暂不提供给用户进行修改。
除上述的这些参数外,绝大部分的参数都已经由DBA团队和源码团队优化过,用户不需要过多调整线上的参数就可以把数据库比较好的运行起来。但这些参数只是适合大多数的应用场景,个别特殊的场景还是需要个别对待,比如使用了tokudb引擎,这个时候就需要调整tokudb引擎能使用的内存比例(tokudb_buffer_pool_ratio);又比如我的应用特点本身需要很大的一个锁超时时间,那么则需要调整innodb_lock_wait_timeout参数的大小以适应应用等等。
如何调参数
下面我将把控制台中能够修改的一些比较重要的参数给大家介绍一下,这些参数如果设置不当,则可能会出现性能问题或应用报错。
open_files_limit
作用:该参数用于控制MySQL实例能够同时打开使用的文件句柄数目。
原因:当数据库中的表(MyISAM 引擎表在被访问的时候需要消耗文件描述符,InnoDB引擎会自己管理已经打开的表 table_open_cache)打开越来越多后,会消耗分配给每个实例的文件句柄数目,RDS在起初初始化实例的时候设置的open_files_limit为8192,当打开的表数目超过该参数则会导致所有的数据库请求报错误。
现象:如果参数设置过小可导致应用报错
/mysqld: Can't open file: './mysql/user.frm' (errno: 24 -Too many open files);
建议:提高open_files_limit的值,RDS目前可以支撑最大为65535,,同时建议替换MyISAM存储引擎为InnoDB引擎。
back_log
作用:MySQL每处理一个连接请求的时候都会对应的创建一个新线程与之对应,那么在主线程创建新线程期间,如果前端应用有大量的短连接请求到达数据库,MySQL 会限制此刻新的连接进入请求队列,由参数back_log控制,如果等待的连接数量超过back_log,则将不会接受新的连接请求,所以如果需要MySQL能够处理大量的短连接,需要提高此参数的大小。