⑹ innodb_max_dirty_pages_pct
● 推荐理由
InnoDB较之MyISAM,一个重要特性是InnoDB会在内存中开辟一个Buffer Pool来存储最近访问的数据块/索引块
使得下次再次访问这个块时速度能够很快、当InnoDB对需要修改数据块的时候
会先记录修改日志,然后直接对Buffer_Pool中的数据块的操作
记录日志是顺序写,对数据块的操作是内存操作,这让InnoDB在很多场景下有这很好的速度优势
上面对内存块修改完成后,InnoDB就向客户端返回了
可这时实际磁盘上的数据块,还并没有被更新,我们把这样的page称为Dirty Page
在InnoDB的后台有一个专门的线程来做将内存数据块Flush到磁盘的工作
参数innodb_max_dirty_pages_pct可以直接控制了Dirty_Page在Buffer_Pool中所占的比率
一般范围建议设置为5%~90%
比例设置较小,有利于减少MySQLd服务出现问题的时候恢复时间,缺点则是需要更多的物理I/O
● 参数介绍
innodb_max_dirty_pages_pct与检查点的关系
show innodb status\G;查看检查点位置
减小innodb_max_dirty_pages_pct、会增加检查点事件发生的频率、从而减少脏页数量
生产环境中、我们经常发现:
数据库运行一段时间后,经常导致服务器大量的swap
有可能是innodb中的脏数据太多了,因为没有free space了,mysql通知OS,把一些脏页交换出去
那么我们可尝试减小innodb_max_dirty_pages_pct
⑺ innodb_commit_concurrency
● 推荐理由
参数含义:同一时刻,允许多少个线程同时提交InnoDB事务,默认值为0,范围0-1000
0:允许任意数量的事务在同一时间点提交
N>0:允许N个事务在同一时间点提交
不过、在mysqld提供服务时、不允许把非0改为0或者把0改为非0、但可以在两个非0值之间进行变更
⑻ innodb_fast_shutdown and innodb_force_recovery
● 推荐理由
innodb_fast_shutdown
参数含义:设置innodb引擎关闭的方式,默认值为:1,正常关闭的状态
0:mysqld服务关闭前,先进行数据完全的清理和插入缓冲区的合并操作
若是脏数据较多或者服务器性能等因素,会导致此过程需要数分钟或者更长时间
1:正常关闭mysqld服务,针对innodb引擎不做任何其他的操作
2:若是mysqld出现崩溃,立即刷事务日志到磁盘上并且冷关闭mysqld服务
没有提交的事务将会丢失,但是再启动mysqld服务的时候会进行事务回滚恢复
innodb_force_recovery
参数含义:mysqld服务出现崩溃之后,InnoDB引擎进行回滚的模式,默认值为0,可设置的值0~6
0:正常的关闭和启动,不会做任何强迫恢复操作
1:跳过错误页,让mysqld服务继续运行。跳过错误索引记录和存储页,尝试用:
SELECT * INOT OUTFILE ‘../filename’ FROM tablename;方式,完成数据备份
2:阻止InnoDB的主线程运行。清理操作时出现mysqld服务崩溃,则会阻止数据恢复操作
3:恢复的时候,不进行事务回滚
4:阻止INSERT缓冲区的合并操作。不做合并操作,为防止出现mysqld服务崩溃。不计算表的统计信息
5:mysqld服务启动的时候不检查回滚日志:InnoDB引擎对待每个不确定的事务就像提交的事务一样
6:不做事务日志前滚恢复操作
推荐的参数组合配置:
innodb_fast_shutdown = 1
#若是机房条件较好可设置为0(双路电源、UPS、RAID卡电池和供电系统稳定性)
innodb_force_recovery =0
#至于出问题的时候,设置为何值,要视出错的原因和程度,对数据后续做的操作