mysql双⼀参数_mysql的双1设置
摘要:
有⼤神分析造成数据库损坏,如果也⽤MySQL数据库的话,看起来应该是没开启双1设置,我们了解⼀下什么是双1设置。
innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写⼊策略以及数据安全性的关键参数。本⽂从参数含义,性能,安全⾓度阐述两个参数为不同的值时对db 性能,数据的影响.
⼀ 参数意义电脑数据库损坏了怎么修复
innodb_flush_log_at_trx_commit
如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒⼀次地写⼊log file中,并且log file的flush(刷到磁盘)操作同时进⾏.该模式下,在事务提交的时候,不会主动触发写⼊磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写⼊log file,并且flush(刷到磁盘)中去.
正则表达式删除空行
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写⼊log file.但是flush(刷到磁盘)操作并不会同时进⾏。该模式下,MySQL会每秒执⾏⼀次 flush(刷到磁盘)操作。
注意:
由于进程调度策略问题,这个“每秒执⾏⼀次 flush(刷到磁盘)操作”并不是保证100%的“每秒”。
sync_binlog
statec语言sync_binlog 的默认值是0,像操作系统刷其他⽂件的机制⼀样,MySQL不会同步到磁盘中去⽽是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 ⼆进制⽇志binary log时,会使⽤fdatasync()函数将它的写⼆进制⽇志binary log同步到磁盘中去。
注:
如果启⽤了autocommit,那么每⼀个语句statement就会有⼀次写操作;否则每个事务对应⼀个写操作。
根据上述描述,我做了⼀张图,可以⽅便⼤家查看。
⼆ 性能
两个参数在不同值时对db的纯写⼊的影响表现如下:
测试场景1
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
测试场景2
innodb_flush_log_at_trx_commit=1
sync_binlog=1000
测试场景3
innodb_flush_log_at_trx_commit=1
sync_binlog=1
测试场景4
innodb_flush_log_at_trx_commit=1
fittedsync_binlog=1000
测试场景5
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
场景 TPS
场景1 41000
mysql是什么系统场景2 33000
场景3 26000
场景4 33000
由此可见,当两个参数设置为双1的时候,写⼊性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操作才能达到最⾼性能。length函数c
三 安全
当innodb_flush_log_at_trx_commit和sync_binlog 都为 1 时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多⼀个语句或者⼀个事务。但是鱼与熊掌不可兼得,双11 会导致频繁的io操作,因此该模式也是最慢的⼀种⽅式。
当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上⼀秒钟所有事务数据的丢失。
当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上⼀秒钟所有事务数据才可能丢失。
双1适合数据安全性要求⾮常⾼,⽽且磁盘IO写能⼒⾜够⽀持业务,⽐如订单,交易,充值,⽀付消费系统。双1模式下,当磁盘IO⽆法满⾜业务需求时 ⽐如11.11 活动的压⼒。推荐的做法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使⽤带蓄电池后备电源的缓
存cache,防⽌系统断电异常。
四 ⼩结
系统性能和数据安全是业务系统⾼可⽤稳定的必要因素。我们对系统的优化需要寻⼀个平衡点,合适的才是最好的,根据不同的业务场景需求,可以将两个参数做组合调整,以便是db系统的性能达到最优化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论