ACID和IO overload兼顾参数配置

走远了吗. 提交于 2019-11-28 08:17:42

保证数据的ACID

1.sync_binlog=1(二进制安全性)

  用于保证事务commit前,binary log从日志缓冲中flush到磁盘进行操作的binary log commit group的数量,0表示仅靠系统自有的刷新机制从系统缓冲中刷新到磁盘(取决于mysql实例所在系统的刷新IO buffer 机制),1表示事务commit前相应的二进制日志就刷新到磁盘,大于1表示多个binary log commit group协同工作一次性刷盘,0和大于1的值binary log 都有丢失记录的风险。

2.innodb_flush_log_at_trx_commit=1(redo log安全性)

  innodb_flush_log_at_trx_commit 用于 InnoDB log buffer 到磁盘 log file 落地的执行机制,1 表示严格遵从 ACID,一旦事务 commit,就会将 InnoDB 日志刷新到磁盘中。0 则是依靠系统自有机制进行从缓冲到磁盘的落地保证,2 则 log file 缓冲会每隔 N 秒进行一次落地,N 取决于 innodb_flush_log_at_timeout 参数设置,0 和 2 都在服务端或系统奔溃后有丢失日志记录风险。

3.innodb_doublewrite=1(数据安全性)

  innodb_doublewrite 是一种数据文件磁盘保存时的一种安全保存机制,主要是避免由于 InnoDB page 和 OS block size 大小不同,可能在进行 I/O 操作时候,由于各种奔溃问题造成的 partial page write。

提升IO的方法

1.InnoDB 引擎的日志文件和数据文件目录在布局上面分布在不同的物理磁盘上面

2.提高innodb缓存区大小,innodb_buffer_pool_size

3. 使用 delay_key_write=ON 选项,做批量索引更新。只对myisam引擎有效

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!