mysql忧化参数

转自 https://blog.51cto.com/tongcheng/1710265
以下参数是在mysql-5.6.27中使用,可能mysql版本不同使用方法不一样
1.线程参数
innodb_read_io_threads=6 --innodb存储引擎读线程数,供客户端读取数据,默认值是4
innodb_read_io_threads=7 --innodb存储引擎写线程数,供客户端写入数据,默认值是4
innodb_purge_threads=2 --innodb存储引擎回收purge页线程,清空脏数据,默认值是1
innodb_lru_scan_depth=1024 --控制LRU的可用页的数量,默认值是1024
innodb_max_dirty_pages_pct=75 --innodb缓冲池中的脏页大于75%时,checkpoint将一部分的脏页强制刷新到磁盘,一般是100个脏页
innodb_io_capacity=200 --磁盘IO在吞吐量,当数据量很大时默认刷新100个脏页,合并20个插入缓冲时可能忙不过来,此值可以刷新200个脏页,合并200 X 5%=100个插入缓冲,默认值是200
innodb_adaptive_flushing=on --自动刷新脏页,当innodb_max_dirty_pages_pct值小于75时也可以刷新脏页
innodb_purge_batch_size=300 --每次回收undo页的数量,默认值是300个页
innodb_max_purge_lag = 0 --控制history list的长度,history list是根据事物提交的顺序将undo log进行链接。
binlog_max_flush_queue_time = 0 --用来控制Flush阶段中的等待时间,也就是事物与事物之间的等待时间。
innodb_change_buffering=all --插入缓冲只缓冲哪些语句,选项值有inserts,updates,deletes,purges,all,none等.none表示都不进行缓冲,all表示都进行缓冲.默认值是all
innodb_change_buffer_max_size=25 --插入缓冲大小占整个缓冲池的25%内存大小,最大值是50
innodb_adaptive_hash_index=on --启用自适应哈稀索引(AHI),哈稀索引是一次读取数据,只能等值使用
innodb_page_size=16KB --innodb存储引擎默认页(块)是16KB,可以自己调整,默认区大小是1M
innodb_file_format=Antelope --字段的文件格式(文件格式有Compact,Redudant,Antelope,Compressed,Dynamic)
innodb_file_format_check=ON --检查字段是否支持的文件格式
lower_case_table_names=1 --mysql数据库对表名是否区分大小写,1 表示不区分大小写,0 表示区分大小写
auto-rehash --命令补全功能,只补全库名,表名,字段名.(是mysql客房端参数,定义在[mysql]下面)
foreign_key_checks=0 --关闭外键检查,关闭后导入导出数据的时间变快
old_alter_table=off --创建和删除索引的算法,COPY 表示创建临时表,INPLACE 不需要创建临时表,off默认是INPLACE
innodb_online_alter_log_max_size=128M --记录在创建和删除索引时,将DML语句写入缓存日志,如果有大量的写事物可调大参数
innodb_stats_sample_pages=8 --统计Caridinality(索引散列)时每次采样页的数量,默认值是8
innodb_stats_method=nulls_equal --如何对待索引页的null值记录,nulls_equal NULL视为相等的记录,nulls_unequal NULL视为相等记录或NULL忽略记录,nulls_ignored 忽略null值记录.
innodb_stats_persistent=ON --是否将命令aalyze table计算到的Cardinality值存放到磁盘上
innodb_stats_on_metadata=OFF --命令show table status和show index是否重新需要计算索引到Cardinality值
innodb_stats_persistent_sample_pages=20 --命令analyze table更新Cardinality值时每次采样页的数量,默认值是20
innodb_stats_transient_sample_pages=8 --每次采样的数量,默认值是8
innodb_ft_aux_table=test/fts_a --将test库fts_a表的全文索引信息记录到表中,表名information_schema.INNODB_FT_INDEX_TABLE记录分词信息
innodb_ft_cache_size=31M --全文索引缓存的大小,默认是32M
innodb_optimize_fulltext_only=ON --启用全文索引忧化,删除多余的文档
innodb_ft_num_word_optimize=2000 --每次删除分的数量,默认是2000
innodb_ft_enable_stopword=ON --启用不需要分词的参数
innodb_ft_server_stopword_table=test/fts_a --对不需要分词的word写入列表中,对应的分词在information_scema.INNODB_FT_DEFAULT_STOPWORD表中
innodb_ft_min_token_size=3 --分词word中最小的长度,默认是3
innodb_ft_max_token_size=84 --分词word中最大的长度,默认是84
innodb_autoinc_lock_mode=1 --控制自增长模式,默认值是1
innodb_lock_wait_timeout=50 --锁等待默认是50秒(适用于innodb存储引擎)
innodb_rollback_on_timeout=off --锁表后数据是否回滚,默认不回滚
table_lock_wait_timeout=50 --表锁等待(myisam存储引擎)
slave-skip-errors=错误值 --在主从有错误时可以跳过指定的错误代码值

2.缓冲池参数
innodb_buffer_pool_size=2G --innodb存储引擎缓冲池包括数据页,索引页,插入缓冲,自适应哈稀索引,数据字典,锁信息.myisam只缓存索引文件.默认值134217728字节(128M).
innodb_buffer_pool_instances=8 --innodb的缓冲池个数,与innodb_buffer_pool_size配合使用
innodb_old_blocks_pct=37 --使用LRU(最近最少算法)算法计算缓冲池,缓冲池前面63%为最活跃数据,63%以后为历史数据,最活跃数据命中率高.
innodb_old_blocks_time=100 --数据被读后100s才加入到最活跃缓冲池中
innodb_log_buffer_size=8M --重做日志缓冲大小,不宜设置太大,master thread是每秒同步到磁盘,事物提交同步到磁盘,重做日志空间剩余1/2也同步到磁盘,默认为8M
innodb_use_native_aio=on --开启异步io,默认是开启
innodb_flush_neighbors=1 --开启刷新邻近接页,刷新相邻的脏页,默认开启

3.数据恢复
innodb_fast_shutdown=1 --0表示关闭mysql时完成所有的full purge和merge insterbuffer操作.1表示将缓冲池刷新到磁盘,2表示将所有操作写入日志,下次启动时进行恢复
innodb_force_recover=1 --1表示忽略检查corrupt页,将所有脏页同步到磁盘,2表示阻止主线程运行,3表示不执行事物回滚操作,4表示不执行缓冲插入操作,5表示不查看重做日志,6表示不执行前滚操作
innodb_undo_directory = . --回滚段存放的目录
innodb_undo_logs = 128 --回滚段的数量
innodb_undo_tablespaces = 0 --构成回滚段的文件数量
completion_type=NO_CHAIN --不使用链事物(0 commit与commit work是等价的,1 commit work与commit and chain是等价的,事物提交后自动启动相同隔离级别的事物.2 commit work与commit and release等价,事物提交后自动断开服务器)

4.日志
slow_query_log=on --开启慢查询日志,记录查询较慢的sql语句
slow_query_log_file='文件路径' --存放慢查询文件的路径
long_query_time=2 --慢查询的时间,默认是10秒
log_queries_not_using_indexes=off --记录在查询中没有使用索引的查询,默认不使用索引
log_throttle_queries_not_using_indexes=0 --记录多少行慢查询,0表示无限制
log_output=FILE --指定慢查询日志输出是文件还是表(TABLE)
log_bin=master_bin.log --开启二进制日志
log_bin_index=master_index.log --指定二进日志文件的索引文件
max_binlog_size=1G --每个二进日志的大小,默认值是1G
binlog_cache_size=8MB --二进日志缓存,默认大小32KB
max_binlog_cache_size=128MB --最大二进制日志缓存(show status like'%Binlog_cache_use%' 使用缓存写二进的次数,show status like'%Binlog_cache_disk_use%' 使用临时文件写二进日志的次数)
sync_binlog=1 --事物提交同步到磁盘
binlog_do_db=数据库 --需要同步的数据库(指定数据库写入二进日志)
binlog-ignore-db=数据库 --不需要同步的数据库(忽略数据库写入二进日志)
binlog_format=STATEMENT --二进制日志输出格式,默认是语句模式,还有混合模式(MITEX)和行模式(ROW)
binlog_max_flush_queue_time=0 --控制Flush阶段中等待的时间,默认是0
innodb_support_xa=ON --分布式事务,如果事物未提交发生宕机事物进行回滚
log_slave_updates=ON --将主数据库的二进日志同步到从数据库的二进制日志中
innodb_log_file_size=2G --重做日志文件的大小,默认4GB
innodb_log_files_in_group=3 --重做日志文件组的数量,默认是2
innodb_mirrored_log_groups=1 --重做日志文件的镜像,默认值是1,表示没有镜像
innodb_log_group_home_dir=./ --重做日志文件的路径,./表示在数据目录下
innodb_flush_log_at_trx_commit=1 --事物提交时将重做日志写入到磁盘,0 表示事物提交时不将重做日志写入到磁盘,等master线程每秒刷新,2表示将重做日志异步到磁盘
completion_type=0 --值是0表示事物提交进行下一个事物,值是1就是链事物,当一个事物完成性必须提交,值是2就是事物提交自动会断开与服务器的连接.

4.mysql 5.6新特性
slave_parallel_workers = 4 --开启并行复制,减少复制的延迟,增加slave快速读取中继日志的内容
gtid_mode = on --从 5.6 开始mysql 增加了gtid(Global Transaction Identifiers),开启了这个参数,就在change master to 的时候就无需再指定 MASTER_LOG_FILE 和 MASTER_LOG_POS,而只需要增加auto_master_postition =1 就行了,如开启这个参数需要相应增加--log-slave-updates --enforce-gtid-consistency 这2个参数
延时复制方案:
如果你想slave 延时复制的话,可以把slave 停掉之后,用命令 change master to master_delay=n n 为你想要延时的时间

5.二次写(doublewrite由两部分组成,一部分是内存中的doublewrite buffer,大小为2MB,另一部分是物理磁盘上的共享表空间连续的128个页,大小也是2MB)
mysql> show global status like '%innodb_db%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Innodb_dblwr_pages_written | 1 | --一共写了多少个页
| Innodb_dblwr_writes | 1 | --写了多少个页,如果(总数:写入)小于64:1证明写入负载不大
+----------------------------+-------+
2 rows in set (0.00 sec)
mysql>

原文地址:https://www.cnblogs.com/ritchy/p/10944800.html