以下列出了MySQL 5.6的一些新参数 || 老参数新功能,有一些的说明只是参照的文档,还没有从代码求证。
这些参数的分类也显示了5.6在不同层面的改进(or regression?)
不定期更新Ing…
/////////////////////////////////////////
Server 层参数 | ||
Table cache | table_open_cache_instances#对table cache进行划分,减少table cache的锁竞争 | |
Meta data lock |
metadata_locks_hash_instances # 对server层的metalock hash进行划分
metadata_locks_cache_size #metadata lock cache的大小,这是总的大小,可以适当调大来提升并发度 |
|
Slow_log |
log_throttle_queries_not_using_indexes #当打开log_queries_not_using_indexes 时,该变量用于限制每分钟写入slow log的日志条数 |
|
控制项 |
default_tmp_storage_engine #用于控制在创建临时表时使用的存储引擎,默认为innodb
disconnect_on_expired_password#用于控制客户端如何处理失效的密码,默认打开 explicit_defaults_for_timestamp #影响timestamp类型column的行为,具体见文档中的参数说明 host_cache_size #存储host名字与iP的cache size ignore_db_dirs #使用,分割,用于控制是否忽略DATA目录下的db目录 |
|
Server id |
server_uuid #由系统自动生成的id,记录在data_dir/auto.cnf文件中,最好不要去尝试修改它 |
|
优化器 |
optimizer_switch #用于控制优化器的行为,5.5也有该参数,但5.6能够控制更多的优化器行为,具体见文档 eq_range_index_dive_limit #用于优化in(),以确认是否直接使用索引统计,在where条件中列的等值条件个数小于这个值时,使用index dive来估算行数,否则使用index statistics来估算;设置为0则禁用index statistics, index dive更准确但效率低,具体说明见文档 |
|
Optimizer trace | ||
performance schema |
大量用于控制PS表大小的参数,以Performance_schema_作为前缀,不一一列出 |
|
Replication/gtid | ||
Replication/crash safe |
relay_log_info_repository #是以文件(FILE) 还是表(table)的方式记录relaylog坐标信息 master_info_repository #是以文件(FILE) 还是表(table)的方式记录binlog信息 master_verify_checksum #在读取binlog时(例如show binlog events),是否需要去检查checksum,默认关闭 |
|
Replication/control option |
slave_parallel_workers #备库复制worker线程数 slave_checkpoint_group #在并发复制时总共执行这么多次事务后做一次checkpoint,更新show slave status的数据 slave_checkpoint_period #在复制执行这么长时间后做一次checkpoint slave_pending_jobs_size_max #在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大 slave_allow_batching #备库是否允许批量更新,只用于ndb cluster slave_sql_verify_checksum #备库SQL线程是否检查binlog的checksum |
|
Replication/binlog |
binlog_checksum #默认为CRC32,表示使用该算法记录binlog checksum,设置为NONE,则关闭checksum binlog_max_flush_queue_time #表示在做group commit之前多长时间从刷新队列读取事务。默认值为0,表示没有超时,直到队列为空为止 binlog_order_commits #开启该选项时,事务提交顺序和binlog记录顺序是相同的,默认打开;设置为关闭时,事务提交顺序可能是并行的;关闭可能提升性能 binlog_row_image #binlog记录格式 binlog_rows_query_log_events #行模式下,是否记录query log_bin_use_v1_row_events #默认关闭,表示使用v2版本的binlog格式,打开的话,则使用之前版本的binlog格式 |
|
Innodb层 | ||
Innodb buffer pool restore/dump |
innodb_buffer_pool_load_at_startup |
|
flush strategy |
innodb_flush_method #新参数O_DIRECT_NO_FSYNC,在IO时使用O_DIRECT,但不再随后做fsync,可以参考bug#45892的描述;这种配置不适合一些文件系统,因为metadata没有被fsync到磁盘 innodb_lru_scan_depth #影响page cleaner 线程一次扫描LRU/UNZIP_LRU的深度,默认为1024,IO能力强的可以适当调大 innodb_adaptive_flushing_lwm #该值表示redo log的一个最低容量限制百分比,默认为10,当没有达到这个值时,则不会page cleaner线程不会根据redo来判断是否刷页,细节见函数af_get_pct_for_lsn innodb_max_dirty_pages_pct_lwm ##防止在到达innodb_max_dirty_pages_pct时疯狂刷新,而是在达到这样一个限定值时,开始“优雅”的做刷新脏页(预刷新)。详细见函数af_get_pct_for_dirty innodb_io_capacity_max #当flush操作落后太多时,可能会做一些非常有侵略性的刷新(超过指定的innodb_io_capacity),这会影响到正常的业务,指定这个值,可以限制io capacity的上限,减少对正常应用的影响 innodb_flushing_avg_loops #这个选项可以控制adaptive flush对工作负载变化的响应速度。在这么多次loop内,innodb会保持上次的刷新状态快照不变,增加这个值有助于刷新操作更加平稳,而减小这个值有助于对工作负载的变化更快的调整adaptive flush,不过,如果设置的过小的话,在突然增大/减小的工作的负载中,容易引起性能尖峰 innodb_flush_log_at_timeout #当innodb_flush_log_at_trx_commit设置为2时,表示超过这么多秒,刷日志 |
|
Change buffer |
innodb_change_buffer_max_size #changebuffer占用bp的最大比例,默认为25 |
|
全文索引 |
innodb_ft_aux_table innodb_ft_cache_size innodb_ft_enable_diag_print innodb_ft_enable_stopword innodb_ft_max_token_size innodb_ft_min_token_size innodb_ft_num_word_optimize innodb_ft_server_stopword_table innodb_ft_sort_pll_degree innodb_ft_user_stopword_table innodb_optimize_fulltext_only |
|
索引统计 |
#物化统计信息,默认打开 innodb_stats_persistent_sample_pages #当打开innodb_stats_persistent选项时,这个设置才生效 innodb_stats_transient_sample_pages #当关闭innodb_stats_persistent选项时生效,采样page数(尤其是后者)不应该设置的太大,否则会产生额外的IO开销,但也不应设置的太小,否则会导致查询计划不准确 #用于决定是否在表上存在大量更新时(超过10%的记录更新)重新计算统计信息。默认打开,如果关闭该选项,就需要在每次创建索引或者更改列之后,运行一次ANALYZE TABLE命令来更新统计信息,否则可能选择错误的执行计划。同样的,也可以在CREATE TABLE/ALTER TABLE命令中指定STATS_AUTO_RECALC值 |
|
Compressed table |
#定义压缩表的压缩级别,在具有较好压缩特性的数据集上,可以适当调小该值,还获得更好的TPS性能 innodb_compression_failure_threshold_pct #该参数和下面的参数来自facebook对压缩表的改进,当一个非压缩page无法压缩到指定size时,会产生索引分裂,这会大大影响性能,我们可以给非压缩页留一些空白,少存一点数据,这样会降低压缩失败率,但也有可能减小压缩比,该选项表示当压缩失败率高于这个值时,进行apdative padding innodb_compression_pad_pct_max #一个非压缩page上最大允许留白的百分比 innodb_cmp_per_index_enabled #表示是否统计每个表的每个索引的压缩状态,如果打开,信息会进行收集,并显示在information_schema的INNODB_CMP_PER_INDEX/INNODB_CMP_PER_INDEX_RESET中,这会有一定的性能损耗 |
|
Control option |
innodb_print_all_deadlocks #保存全部死锁信息 innodb_adaptive_max_sleep_delay #表示在使用automic进行进入innodb层并发控制时的自适应sleep时间的最大值 innodb_purge_threads #purge线程数,可以加快purge速度 innodb_read_only #设置该参数可以在只读媒介上启动Innodb,这也意味着我们可以开启多个实例,对同一份数据集做纯读操作 innodb_log_file_size #1MB ~ 1/LOG_GROUP*BP, 48G BP& 4 instance的话,12GB为上限过大的值不兼容 innodb_disable_sort_file_cache #设置该选项表示操作系统不对merge-sort的临时文件cache,使用O_DIRECT innodb_sync_array_size #信号量等待队列最大长度 innodb_checksum_algorithm #更快的checksum算法(crc32) |
|
Online DDL&& index create |
innodb_online_alter_log_max_size #online ddl时并发DML产生的row log最大size,超过这个限制会导致DDL回滚 innodb_sort_buffer_size #创建索引做merge-sort时,一个归并block的大小 |
|
Innodb API |
innodb_api_bk_commit_interval innodb_api_disable_rowlock innodb_api_enable_binlog innodb_api_enable_mdl innodb_api_trx_level innodb_autoextend_increment |
|
Memcache plugin |
daemon_memcached_enable_binlog daemon_memcached_engine_lib_name daemon_memcached_engine_lib_path daemon_memcached_option daemon_memcached_r_batch_size daemon_memcached_w_batch_size |
|
Undo log |
innodb_undo_tablespaces #undo 表空间的个数,将所有的回滚段平分到这么多个ibd表空间文件中,这个值一旦设置,则不可更改。配置这个及下面的选项,是为了将undolog从Ibdata中独立出来,并且由于undo log是随机写,可以放到SSD盘上来提高性能 innodb_undo_directory #表示undo log表空间文件的路径,启动前设置 innodb_undo_logs #等同于老版本的innodb_rollback_segments |
|
Read ahead |
innodb_random_read_ahead innodb_read_ahead_threshold #将其设置为0 ,可以关闭线性预读,对于随机读写,我们推荐关闭 |
|