MySQL 5.6参数说明

MySQL 5.6参数说明

core_file

Server崩溃的时候将相关信息写到core文件里, 系统产生core文件需调大ulimit -c 参数, 文件名默认以.pid结尾.

explicit_defaults_for_timestamp

在MySQL中,timestamp类型不同于其它标准数据类型的处理,默认情况下, timestamp列指定为允许NULL属性的话,给该列NULL值即给该列current timestamp值; 第一个为timestamp类型的列可以指定DEFAULT CURRENT_TIMESTAMP或 ON UPDATE CURRENT_TIMESTAMP 属性进行自动更新; 不是第一个的timestamp类型列, 如果没有指定NULL货DEFAULT属性,则DEFAULT ‘0000-00-00 00:00:00’赋于其值。 explicit_defaults_for_timestamp选项改变这种不标准的处理行为, timestamp列没有指定NOT NULL或允许NULL, 赋于该列NULL,而不是current timestamp; 除非DEFAULT CURRENT_TIMESTAMP or ON UPDATE CURRENT_TIMESTAMP显示指定, 否则timestamp列不会自动更新; 显示指定NOT NULL属性且没有给与DEFAULT信息会被认为没有默认值, 插入的时候,如果开启SQL mode,则返回错误, 没有开启则默认值为’0000-00-00 00:00:00’并且产生一个警告。

eq_range_index_dive_limit

http://imysql.com/2014/08/05/a-fake-bug-with-eq-range-index-dive-limit.shtml http://blog.163.com/li_hx/blog/static/18399141320147521735442/ 在较多等值查询(例如多值的IN查询)情景中,预估可能会扫描的记录数,从而选择相对更合适的索引,避免所谓的index dive问题: 当面临下面两种选择时:

1、索引代价较高,但结果较为精确; 2、索引代价较低,但结果可能不够精确;

选项 eq_range_index_dive_limit 的值设定了 IN列表中的条件个数上线,超过设定值时,会将执行计划分支从 1 变成 2。该值默认为10,但社区众多人反馈较低了,因此在5.7版本后,将默认值调整为200了。

flush_time

如果设置为非0值, 每隔指定的时间(seconds)对所有表进行一次closed操作以便释放一些资源并且同步未刷新到磁盘的数据到磁盘; percona默认为0, Oracle <= 5.6.5默认为1800s, >=5.6.6默认为0s;

innodb_page_size

指定InnoDB表空间的页大小, 可以为4k, 8k, 16k, 默认为16k, 适用于大部分场景,尤其是一些表扫描或DML相关的批量更新操作. 小页可能更适合OLTP(更新较小的query), 因为单页可以包含更多的记录. 小页也更适合SSD盘中存储的环境, 因为SSD是典型的块存储设备;

innodb_log_block_size

该参数更改事务日志记录的大小, 默认512 byte可以试用大多数环境, 不过4096byte 在SSD盘中可能会有更好的性能; 其为只读参数, 在已运行的实例中更新该值需要移除旧的日志信息; 另外如果实例运行在ext4文件系统m 需要设置为4096以避免unaligned AIO/DIO的警告信息。该功能目前是作为测试功能实现。

innodb_flush_method

官方5.6版本的该参数增加了O_DIRECT_NO_FSYNC, percoba在此基础上增加了ALL_O_DIRECT选项, O_DIRECT_NO_FSYNC选项使用O_DIRECT打开数据文件, 但是没有使用fsync()系统调用刷新数据和日志文件,此选项不适合XFS文件系统, ALL_I_DIRECT选项使用O_DIRECT打开数据文件,使用fsync()系统调用刷新数据文件,但不刷新日志文件, innodb日志文件较大的时候(比如8GB)推荐使用该选项。

innodb_use_atomic_writes

DirectFS 文件系统在Funsion-io(固态盘)支持atmoic writes(原子写), 这可以替换掉InnoDB两次写以保证InnoDB数据页可以完整的刷新或完全不刷新到磁盘.开启该功能后即保护设备中的数据以防止局部写带来的问题,在实例开启两次写功能后该功能自动关闭;此选项可以提升写性能, 亦简化了恢复的过程。该功能目前作为测试功能实现,默认为off。

innodb_buffer_pool_populate

如果服务器为NUMA架构,且内存的选择策略为selected, 在buffer pool分配的内存大小大于节点的可用内存时,系统则会进行swap交换操作,即便其它节点还有可用的内存。该选项功能引用自Twitter’s的MySQL补丁, 启用的该选项在buffer cache还是clean的时候(即空机) 启动实例后为InnoDB进行预分配页空间以强制决定NUMA分配的策略; http://www.ibm.com/developerworks/cn/linux/l-numa/

thread_pool_idle_timeout: 用来限制空闲等待线程退出的时间,默认60s。

extra_port: 指定一个percona server会监听的附加端口。该功能可以用于所有的工作线程过于繁忙而不能建立新连接或被锁(当开启了pool-of-threads的时候)的情况。 要连接附加端口可以使用以下命令: mysql –port=’extra-port-number’ –protocol=tcp

extra_max_connections: 该参数功能同extra_port, 用于指定连接附加端口的最大连接数,默认为1。

长时间网络等待的处理: 有些类型的工作方式(比如大数据集, BLOB类型, 慢连接的client端)在网络I/O(socket read and write)方面可能存在长时间的等待。 在server端无论何时的等待, 都需要和线程池(Thread Pool)进行通信, 所以可以通过唤醒一个等待的线程或创建一个新线程来处理一个新的query查询。该功能从MariaDB引入到percona server 的5.6.15-63.0版本。

命令行选项

flush_caches: 如果开启, 在启动实例的时候会进行 flush, purge buffer/cache操作, 以帮助确定NUMA在节点之间的均衡分配;该选项在一致和可预测的环境中很有用;

numa_interleave:该选项通过numactl –interleave=all控制mysqld的内存在所有的NUMA 节点中交错运行。 http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/ http://blog.jcole.us/2012/04/16/a-brief-update-on-numa-and-mysql/

percona 5.6 弃用5.5的参数:

innodb_recovery_update_relay_log
innodb_lazy_drop_table