一、基于会话的参数


1.binlog_cache_size(基于会话)

基于会话的参数,即每个会话都会分配binlog_cache_size所配置的内存用于缓存未提交的事务。由于是会话参数所以不易设置的过大,但当设置的太小时又会发生写磁盘的情况。与这个参数相关的两个状态值为binlog_cache_disk_use 和 binlog_cache_use


2.binlog_stmt_cache_size

基于会话的参数,用于决定非事务SQL段的缓冲大小。如果在事务中经常使用大的非事务SQL段的话增加这个参数的大小可以有一些好处。可以通过binlog_stmt_cache_use 和 binlog_stmt_cache_disk_use来判断这个值是否合适。

3.read_rnd_buffer_size

用于控制索引缓冲及MRR缓冲的大小。

二、非基于会话的参数

1.innodb_max_dirty_pages_pct

决定了在什么情况下会每秒钟将Innodb的脏数据页刷新到磁盘中,默认为90也就是说当脏页达到90%以上时才会每秒钟刷新100个脏页到磁盘中。如果innodb_buffer_pool比较大的情况下,建议减小这个值则否可能会使得Mysql在关闭时需要大量的时间来刷新脏页到磁盘中。

2.innodb_io_capacity

默认值为200 用于表示磁盘IO的吞吐量。对于刷新到磁盘的数量,会按照innodb_io_capacity的百分比来刷新相对数量的页,规则如下:

1)在合并插入缓冲时,合并插入缓冲的数量为innodb_io_capacity值的5%

2)在从缓冲区刷新脏页时,刷新脏页的数量为innodb_io_capacity

3.innodb_flush_log_at_trx_commit (参见:Innodb存储引擎P295页)

这个参数决定了重做日志刷新到磁盘的策略,由于redo log 并不使用O_DIRECT选项打开,所以每次都是先写到文件系统缓冲中然后通过fsync操作才会写入到磁盘中,这个参数就决定了什么时候进行fsync 操作。

1)值为0时每秒钟进行一次重做日志的fsync操作。

2)值为1时每次事务提交都会把刷新事务日志并到磁盘中。(默认)

3)值为2时每次事务提交时会把重做日志写入文件系统缓存中,每秒钟会进行一次fsync操作。在这个设置下,当MySQL数据库发生宕机而操作系统不发生宕机时,并不会导致事务的丢失。而当操作系统宕机时则会丢失1秒的事务。(推荐)

4.slave_exec_mode

当值为 IDEMPOTENT 用于多主复制,循环复制 等复制情形下,用于避免duplicate-key ,no-key-found 等错误的发生。

5.sync_binlog=[N]

表示每写多少次缓冲会向磁盘同步一次binlog,对于Master最好设为sync_binlog=1 即每一次都向磁盘同步。

6.slave_type_conversions

这个参数的做用是指定Slave端在Slave和Master某个表的字段类型不同时所做的操作。 可取值为'','ALL_LOSSY','ALL_NON_LOSSY','ALL_LOSSY,ALL_NON_LOSSY'。默认为''即当Master和Slave中如果某个表的字段类型不同则在Slave端会报Mysql error:1677.如果设为'ALL_LOSSY'则当Master上数据类型大于Slave上的数据类型如Master为varchar(10) Slave为Varchar(5)这时不会报错但会截断Slave的数据库即出现数据损耗。'ALL_NON_LOSSY' 允许Master上的数据类型小于Slave上的类型时即Master 为varchar(5) 而Slave为Varchar(10)时不会报错。'ALL_LOSSY,ALL_NON_LOSSY' 同时具有以上两种类型的特点,无论何时都不会报错。

7.innodb_stats_on_metadata

这个参数决定了Innodb在什么情况下会自动更新统计信息,如果设置为( ON )则在进行一些元数据查询时如Show indexes,show table status 或是访问INFORMATION_SCHEMA 的 TABLES 或 STATISTICS表时都会自动更新Innodb的统计信息,所以对于大表会对服务器造成一定的压力。所以建议把这个参数设为 OFF.

8,innodb_fast_shutdown

影响着表的存储引擎为InnoDB 的行为。该参数可取值为0、1、2,默认值为1。

0 表示在MySQL 数据库关闭时,InnoDB 需要完成所有的full purge 和mergeinsert buffer,并且将所有的脏页刷新回磁盘。这需要一些时间,有时甚至需要几

个小时来完成。如果在进行InnoDB 升级时,必须将这个参数调为0,然后再关闭数据库。

1 是参数innodb_fast_shutdown 的默认值,表示不需要完成上述的full purge 和merge insert buffer 操作,但是在缓冲池中的一些数据脏页还是会刷新回磁盘。

2 表示不完成full purge 和merge insert buffer 操作,也不将缓冲池中的数据脏页写回磁盘,而是将日志都写入日志文件。这样不会有任何事务的丢失,但是下次MySQL 数据库启动时,会进行恢复操作(recovery)。

9.back_log

决定了Tcp/IP等待连接队列的长度,默认值为50(5.6.6之后为50+(max connection/5));同时受操作系统的限制(具体可以通过man listen查看).liunx下默认的限制值为128.

10.big_tables

默认值为0,如果设置为1 所有的临时表都会使用磁盘而不会使用内存临时表,所以强烈建议保持这个变量使用默认值。

11.skip-slave-start

在Slave服务器重启后,跳过自动启动Slave进程。

12.innodb_checksums

默认值为ON, 表示每次从磁盘读取数据页时都会对该页进行checksum 检查以保整页的完整性。如果改为OFF则不会对页进行检查。

13.innodb_check_algorithm (5.6)

该参数用于控制检测checksum函数的法算,默认为crc32,可设置的值有:innodb,crc32,none,strict_innodb,strict_crc32,strict_none。inodb为兼容之前INOODB版本的页checksum算法,crc32为MYSQL5.6中引入的新算法,该算法性能优于innodb,但是对低版本的MySQL不兼容。strict_crc32为强制使用crc32算法,此时不会对innodb 和crc32算法进行重复检验所以为效率最好的算法,但是对于低版本升级的MySQL则必须执行mysql_upgrade操作,否则不能读取页中的行。

14.innodb_online_alter_log_max_size(5.6)

用于MySQL5.6开始的Online change Schema 操作,用于缓冲在进行Alter 操作时的Insert,Update及Delete操作。默认为128M,如果对操作频繁的大表进行Alter操作时可能需要更大的缓冲。

15 optimizer_switch

这个参数用于决定SQL语句的优化方法,如5.6中新增的MRR及ICP都可以通过这个参数进行控制。如set @@optimizer_switch='mrr=on,mrr_cost_based=off' 则意谓这在任何情况下都会启用mrr优化。

16 innodb_purge_batch_size

用于设置每次purge 操作清理的undo page 的数量,该参数设置的越大,每次回收的undo page也就越多,这样可供重用的undo page就越多,可以减少磁盘空间与分配的开销,但如果设置的太大则会导致CPU和磁盘IO集中处理,导致性能下降

三,MyISAM专用参数

1)bulk_insert_buffer_size

MyISAM专用参数,用于控制insert ...select ,insert ....values(),(),()以及load data infile