本文只列举了一些重要参数说明,如需要查看更多参数详细说明,请参见 MySQL官网 。通过控制台界面修改MySQL参数值,请参见 修改参数组。
修改敏感参数
若干参数相关说明如下:
-
lower_case_table_names
云数据库默认值:"1"
作用 :mysql设置大小写是否敏感的一个参数。默认值"1",表示创建数据库及表时,存储在磁盘是小写的,比较的时候是不区分大小写。
目前关系数据库MySQL版仅支持lower_case_table_names=1,不区分大小写,后续将推出支持区分大小写功能,请关注产品动态。
-
innodb_flush_log_at_trx_commit
云数据库默认值: " 1"
作用 :该参数控制提交操作安全和高性能之间的平衡。设置为默认值"1",每次事务提交时,将log buffer的数据写入到log file中,并且同时将log file向磁盘中写入 ;当设为"0"时,每秒将写入log buffer到log file中,且同时将log file向磁盘中写入 (该模式下在事务提交的时候,不会主动触发写入磁盘的操作);如果设为"2",则每次事务提交时 将log buffer的数据 写入到log file中,大约每秒将log file向磁盘中写入,与log buffer写入不同步 。
影响 :参数设置为非默认值"1"时,降低了数据安全性,在系统崩溃的情况下,可能导致数据丢失。设置为"0"时,写入速度快,但是不安全,如果mysqld进程崩溃,导致上一秒的所有事务中的操作数据丢失。设置为"1"时,写入速度最慢,但是安全,即使mysqld进程崩溃或者服务主机宕机,log可能最多只丢失一个语句或者一个事务的操作数据。设置为"2" 时,写入速度快,比 "0" 安全,只有服务主机宕机时,会导致上一秒的所有事务中的操作数据丢失。
POC建议值:"2"
-
sync_binlog
云数据库默认值:"1"
作用 :该参数控制MySQL 的二进制日志(binary log)同步到磁盘的频率,取值:0-N。设置为默认值"1",表示每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘,是最安全的设置;设置为"0"时,表示当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。此时的性能最好,但风险也是最大,因为断电或操作系统崩溃情况下,在binlog_cache中的所有binlog信息都会被丢失。
影响 :参数设置为非默认值"1"时,降低了数据安全性,在系统崩溃的情况下,可能导致binlog丢失。
POC 建议值 :"1000"
-
innodb_buffer_pool_size
云数据库默认值 : "规格参数,开通的不同实例规格默认值不同"。
作用 :该参数定义了 InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小,数据在内存中的读写速度是磁盘读写速度的很多倍,增加该值可减少磁盘I/O。
影响:过大的buffer pool可能导致系统OOM崩溃,请谨慎修改。
POC建议值:32G及以上规格可将其调整至内存的70%~75%。
修改性能参数
若干参数相关说明如下:
- max_connections 数据库允许的最大连接数,参数值设置较小时,将会影响数据库建立连接访问。
- innodb_buffer_pool_size 、 max_connections 和 back_log参数都依赖于实例的规格,实例规格不同对应其默认值也不同。
联动参数
- character_set_server:如果修改该参数的值, 系统会自动联动调整collation_server、character_set_database,和collation_database的取值。一般的,如果字符序character_set_server为utf8,则collation_server为utf8_*_ci,两者之间存在对应关系。
- innodb_buffer_pool_size : 该参数受innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的影响,最终有效值为两参数乘积的整数倍向上取值。 比如innodb_buffer_pool_chunk_size为128M,innodb_buffer_pool_instances为8,那么当innodb_buffer_pool_size为4.5G时候,系统会自动向上调节为5G大小(必须大于等于128*8M(1G)的整数倍)。
参数修改限制
- innodb_buffer_pool_size参数值必须是innodb_buffer_pool_instances和innodb_buffer_pool_chunk_size参数值乘积的整数倍,非整数倍会自动向上调节为整数倍。
- innodb_buffer_pool_instances参数值设置大于1时,innodb_buffer_pool_size值必须大于等于1GB。
- max_prepared_stmt_count:对于MySQL5.7版本,上限值为1048576,对于MySQL 8.0版本,如果内核版本大于等于8.0.18,参数上限值为4194304,超过修改会自动截断为最大值。
其他参数
-
max_prepared_stmt_count:准备大量的语句会消耗服务器的内存资源,参数设置较小时,业务产生大量的prepare语句,并且可能会超出max_prepared_stmt_count参数限制,出现报错,建议您根据业务情况,调整该参数的值。
-
如下参数的输入会根据MySQL内核规则对取值进行对应的调整,调整的规则如下所示:
(a) key_cache_age_threshold会自动调整为100的倍数,设置为非100的整数倍时,会自动向下调节为100的整数倍。(b) join_buffer_size和key_cache_block_size会自动调整为128的倍数。
(c) query_cache_size、query_prealloc_size、innodb_log_buffer_size和max_allowed_packet 、thread_stack 会自动调整为1024的倍数。
(d) read_buffer_size、read_rnd_buffer_size、binlog_cache_size 、binlog_stmt_cache_size 会自动调整为4096的倍数。
(e) data_buffer_size、log_buffer_size、shared_pool_size、temp_buffer_size 会自动调整为1048576的倍数。
-
binlog_format:默认设置为row,表示将binlog记录成每一行数据被修改的形式,包括修改前和修改后的数据。该参数限制了进行修改,否则可能影响您的正常使用。
-
binlog_rows_query_log_events:默认设置为ON,表示binlog在记录events的同时,也会记录原始的SQL语句,方便以后的查询和审计,以及一些ETL等同步工具的兼容性,在大量更新场景下,对性能也有一定的影响。
-
binlog_row_image:默认设置为FULL,表示无论有没有主键约束或者唯一约束binlog都会记录所有前后镜像.
-
log_timestamps:控制错误日志消息的时间戳时区,以及写入文件的一般查询日志消息和慢日志消息的时间戳时区。默认设置为系统时区,且无法修改。
-
default_time_zone:默认设置为"+8:00",可根据您的业务规则自定义修改。
-
skip_name_resolve:默认值为ON,表示跳过域名解析从白名单的IP中判断是否可以建立连接。
-
innodb_strict_mode:用于限制InnoDB的检查策略,默认值为ON,不建议进行修改为OFF来跳过限制检查。
-
transaction_isolation:默认值设置为READ-COMMITTED,可根据您的业务场景需要自行修改。
-
innodb_adaptive_hash_index:默认设置为OFF,可根据您的业务需要自行修改。
-
table_definition_cache和table_open_cache分别默认为2000,可根据实例预计有多少个数据表,最大并发连接数的大小来调节这些参数值大小。
-
gtid_mode:默认值设置为ON,采用GTID模式复制,修改会影响高可用组件,所以不支持修改。
-
tmp_table_size:默认值设置为16M,可以根据业务SQL查询复杂度场景,比如使用复杂的order by ,group by查询,导致使用很多磁盘临时表,查询性能下降,适当增加此值,可以减少磁盘临时表的创建,减少IO。
-
max_heap_table_size:默认值设置为64M,设置允许用户创建的内存表的最大大小,变量的值用于计算内存表MAX_ROWS值。