MySQL InnoDB 常用优化参数
2017-12-19 00:00
435 查看
摘要: 摘要: 内存相关 innodb_buffer_pool_size 缓冲池,会缓冲索引页、数据页、undo页、插入缓冲、自适应哈希索引、innodb存储的锁信息、数字字典信息等 innodb_buffer_pool_instances 允许多个缓冲池实例,每页根据哈希平均分配到不同缓冲池实例中,减少数据库...
内存相关
innodb_buffer_pool_size 缓冲池,会缓冲索引页、数据页、undo页、插入缓冲、自适应哈希索引、innodb存储的锁信息、数字字典信息等
innodb_buffer_pool_instances 允许多个缓冲池实例,每页根据哈希平均分配到不同缓冲池实例中,减少数据库内部资源竞争,增加数据库并发处理能力
innodb_old_blocks_pct 确定modpoint位置,默认37,modpoint指新读取到的页放入LRU(最近最少使用算法)列表中的位置,modpoint之后的列表称为old列表,之前的称为new列表
innodb_old_blocks_time 表示页读入mid位置后需要等待多久才会被加入到LRU列表的热端
innodb_purge_batch_size 控制每次full purge回收的undo页的数量
innodb_change_buffer_max_size 控制change buffer最大使用内存数量
IO相关
MySQL 5.6 开始支持 Multi-Range Read (MRR),减少磁盘随机访问,将随机访问转化为较为顺序的访问,适用于 range, ref, eq_ref 类型的查询
查看是否开启 show variables like '%optimizer_switch%' mrr=on,mrr_cost_based=off(off为不判断,总是开启)'
read_rnd_buffer_size控制键值的缓冲区大小,当大于该值时,执行器对已经缓存的数据根据RowID进行排序,并通过RowID来取得行数据,默认256K
5.6 开始支持Index Condition Pushdown(ICP),取出索引的同时,判断是否可以进行条件过滤,过滤后再去获取记录,可以大大减少上层SQL对记录的索取,支持range,ref,eq_ref,ref_or_null类型的查询。
innodb_flush_log_at_trx_commit 用来控制重做日志刷新到磁盘的策略
默认值为1,事务提交时必须调用一次fsync,将日志刷新到磁盘
0,事务提交时不写入重做日志,这个操作仅在master thread中完成,master thread每1秒会进行一次重做日志文件的fsync操作
2,事务提交时将重做日志写入重做日志文件,但仅写入文件系统的缓存中,不进行fsync操作
优缺点,#1数据有保障但是依赖于磁盘的性能;#2在操作系统宕机时会造成事务丢失。#0&#2的设置都会使事务丧失ACID特性
innodb_purge_batch_size
innodb_max_purge_lag & innodb_max_purge_lag_delay
binlog_max_flush_queue_time
innodb_read_io_threads & innodb_write_io_threads,多核cpu可以通过这两个参数更有效的利用cpu性能
innodb_io_capacity 可以充分利用固态硬盘带来的高IOPS特性
innodb_purge_threads 将purge线程从master线程分离出来,提高cpu使用率提升存储引擎性能,innodb1.2之后可以设置多个purge线程
innodb_flush_neighbors 刷新邻接页,对于高iops的磁盘,建议关闭此特性
系统相关
innodb_fast_shutdown 0表示完成所有full purge和merge insert buffer,并将所有脏页刷新回磁盘;1表示不需要完成full purge和merge insert buffer,但要刷新脏页;2表示不执行以上所有操作,但将日志全部写入日志文件,下次启动时需要恢复(recovery)
innodb_force_recovery
SLOW QUERY 查询相关
long_query_time
log_slow_queries
log_queries_not_useing_indexes 开启后,没有用到索引的查询也会记录到slowlog里
log_throttle_queries_not_using_indexes 5.6.5新增,表示每分钟允许记录到slow log的未使用索引的sql语句次数
可以使用mysqldumpslow命令分析slow log
log_output,有FILE和TABLE两种,动态修改且是全局的
数据安全性相关
sync_binlog=
表示每写缓冲多少次就同步到磁盘,1表示同步写磁盘的方式写二进制日志。默认为0,由操作系统决定同步
innodb_support_xa=1,可以保证二进制日志和InnoDB存储引擎数据文件的同步
innodb_log_file_size 指每个重做日志文件的大小,innodb1.2之前必须小于4G,之后扩大到512G
innodb_log_files_in_group 指定了日志文件组中重做日志文件的数量,默认为2
innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认为1
在线DDL相关
innodb_online_alter_log_max_size Online DDL 原理是在执行创建或删除操作的同时,将INSERT、UPDATE、DELETE 这类 DML 操作日志写入到一个缓存中,此参数控制缓存大小,默认128M
内存相关
innodb_buffer_pool_size 缓冲池,会缓冲索引页、数据页、undo页、插入缓冲、自适应哈希索引、innodb存储的锁信息、数字字典信息等
innodb_buffer_pool_instances 允许多个缓冲池实例,每页根据哈希平均分配到不同缓冲池实例中,减少数据库内部资源竞争,增加数据库并发处理能力
innodb_old_blocks_pct 确定modpoint位置,默认37,modpoint指新读取到的页放入LRU(最近最少使用算法)列表中的位置,modpoint之后的列表称为old列表,之前的称为new列表
innodb_old_blocks_time 表示页读入mid位置后需要等待多久才会被加入到LRU列表的热端
innodb_purge_batch_size 控制每次full purge回收的undo页的数量
innodb_change_buffer_max_size 控制change buffer最大使用内存数量
IO相关
MySQL 5.6 开始支持 Multi-Range Read (MRR),减少磁盘随机访问,将随机访问转化为较为顺序的访问,适用于 range, ref, eq_ref 类型的查询
查看是否开启 show variables like '%optimizer_switch%' mrr=on,mrr_cost_based=off(off为不判断,总是开启)'
read_rnd_buffer_size控制键值的缓冲区大小,当大于该值时,执行器对已经缓存的数据根据RowID进行排序,并通过RowID来取得行数据,默认256K
5.6 开始支持Index Condition Pushdown(ICP),取出索引的同时,判断是否可以进行条件过滤,过滤后再去获取记录,可以大大减少上层SQL对记录的索取,支持range,ref,eq_ref,ref_or_null类型的查询。
innodb_flush_log_at_trx_commit 用来控制重做日志刷新到磁盘的策略
默认值为1,事务提交时必须调用一次fsync,将日志刷新到磁盘
0,事务提交时不写入重做日志,这个操作仅在master thread中完成,master thread每1秒会进行一次重做日志文件的fsync操作
2,事务提交时将重做日志写入重做日志文件,但仅写入文件系统的缓存中,不进行fsync操作
优缺点,#1数据有保障但是依赖于磁盘的性能;#2在操作系统宕机时会造成事务丢失。#0&#2的设置都会使事务丧失ACID特性
innodb_purge_batch_size
innodb_max_purge_lag & innodb_max_purge_lag_delay
binlog_max_flush_queue_time
innodb_read_io_threads & innodb_write_io_threads,多核cpu可以通过这两个参数更有效的利用cpu性能
innodb_io_capacity 可以充分利用固态硬盘带来的高IOPS特性
innodb_purge_threads 将purge线程从master线程分离出来,提高cpu使用率提升存储引擎性能,innodb1.2之后可以设置多个purge线程
innodb_flush_neighbors 刷新邻接页,对于高iops的磁盘,建议关闭此特性
系统相关
innodb_fast_shutdown 0表示完成所有full purge和merge insert buffer,并将所有脏页刷新回磁盘;1表示不需要完成full purge和merge insert buffer,但要刷新脏页;2表示不执行以上所有操作,但将日志全部写入日志文件,下次启动时需要恢复(recovery)
innodb_force_recovery
SLOW QUERY 查询相关
long_query_time
log_slow_queries
log_queries_not_useing_indexes 开启后,没有用到索引的查询也会记录到slowlog里
log_throttle_queries_not_using_indexes 5.6.5新增,表示每分钟允许记录到slow log的未使用索引的sql语句次数
可以使用mysqldumpslow命令分析slow log
log_output,有FILE和TABLE两种,动态修改且是全局的
数据安全性相关
sync_binlog=
表示每写缓冲多少次就同步到磁盘,1表示同步写磁盘的方式写二进制日志。默认为0,由操作系统决定同步
innodb_support_xa=1,可以保证二进制日志和InnoDB存储引擎数据文件的同步
innodb_log_file_size 指每个重做日志文件的大小,innodb1.2之前必须小于4G,之后扩大到512G
innodb_log_files_in_group 指定了日志文件组中重做日志文件的数量,默认为2
innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认为1
在线DDL相关
innodb_online_alter_log_max_size Online DDL 原理是在执行创建或删除操作的同时,将INSERT、UPDATE、DELETE 这类 DML 操作日志写入到一个缓存中,此参数控制缓存大小,默认128M
相关文章推荐
- mysql常用优化参数
- MySQL Innodb 存储引擎参数优化
- mysql常用优化参数
- Mysql Innodb引擎优化/mysql配置参数优化
- [MySQL]Innodb参数优化
- mysql针对引擎MyISAM和InnoDB部分参数优化
- Mysql Innodb 引擎优化 参数(innodb_buffer_pool_size)
- mysql innodb 优化 参数篇
- Mysql Innodb 引擎优化 参数(innodb_buffer_pool_size)
- MySQL Innodb 存储引擎参数优化
- mysql常用优化参数
- mysql常用优化参数
- MySQL_Innodb_引擎优化(-)_参数篇
- mysql常用优化参数
- MySQL Server参数优化 - innodb_file_per_table(独立表空间)
- Mysql Innodb 引擎优化 参数(innodb_buffer_pool_size)
- MySQL Server参数优化 - innodb_file_per_table(独立表空间)
- MySQL Study之--MySQL InnoDB存储引擎的参数详解及优化
- Mysql常用配置参数、存储引擎的选择及sql优化
- mysql innodb 优化 参数篇