3.2、关于最重要的参数选项调整建议
最后更新于:2022-04-01 00:42:16
建议调整下面几个关键参数以获得较好的性能(可使用本站提供的[my.cnf生成器](http://imysql.com/my_cnf_generator)生成配置文件模板):
1、选择Percona或MariaDB版本的话,强烈建议启用thread pool特性,可使得在高并发的情况下,性能不会发生大幅下降。此外,还有extra_port功能,非常实用, 关键时刻能救命的。还有另外一个重要特色是 `QUERY_RESPONSE_TIME` 功能,也能使我们对整体的SQL响应时间分布有直观感受;
2、设置`default-storage-engine=InnoDB`,也就是默认采用InnoDB引擎,强烈建议不要再使用MyISAM引擎了,InnoDB引擎绝对可以满足99%以上的业务场景;
3、调整`innodb_buffer_pool_size`大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% ~ 70%左右;
4、根据实际需要设置`innodb_flush_log_at_trx_commit`、`sync_binlog`的值。如果要求数据不能丢失,那么两个都设为1。如果允许丢失一点数据,则可分别设为2和10。而如果完全不用care数据是否丢失的话(例如在slave上,反正大不了重做一次),则可都设为0。这三种设置值导致数据库的性能受到影响程度分别是:高、中、低,也就是第一个会另数据库最慢,最后一个则相反;
5、设置`innodb_file_per_table = 1`,使用独立表空间,我实在是想不出来用共享表空间有什么好处了;
6、设置`innodb_data_file_path = ibdata1:1G:autoextend`,千万不要用默认的10M,否则在有高并发事务时,会受到不小的影响;
7、设置`innodb_log_file_size=256M`,设置`innodb_log_files_in_group=2`,基本可满足90%以上的场景;
8、设置`long_query_time = 1`,而在5.5版本以上,已经可以设置为小于1了,建议设置为0.05(50毫秒),记录那些执行较慢的SQL,用于后续的分析排查;
9、根据业务实际需要,适当调整`max_connection`(最大连接数)、`max_connection_error`(最大错误数,建议设置为10万以上,而`open_files_limit`、`innodb_open_files`、`table_open_cache`、`table_definition_cache`这几个参数则可设为约10倍于`max_connection`的大小;
10、常见的误区是把`tmp_table_size`和`max_heap_table_size`设置的比较大,曾经见过设置为1G的,这2个选项是每个连接会话都会分配的,因此不要设置过大,否则容易导致OOM发生;其他的一些连接会话级选项例如:`sort_buffer_size`、`join_buffer_size`、`read_buffer_size`、`read_rnd_buffer_size`等,也需要注意不能设置过大;
11、由于已经建议不再使用MyISAM引擎了,因此可以把`key_buffer_size`设置为32M左右,并且强烈建议关闭query cache功能;