mysql的双1设置

摘要:mysql

网易游戏《炉石传说》游戏数据库发生宕机并引起数据丢失事故,最终决定回档并后续补偿玩家损失。详情可见官网公告:http://hs.blizzard.cn/articles/16/8565. 有大神分析形成数据库损坏,若是也用MySQL数据库的话,看起来应该是没开启双1设置,咱们了解一下什么是双1设置。sql

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 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=1000async

测试场景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 sync_binlog=1000测试

测试场景5 innodb_flush_log_at_trx_commit=2 sync_binlog=1000

场景 TPS 场景1 41000 场景2 33000 场景3 26000 场景4 33000 因而可知,当两个参数设置为双1的时候,写入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操做才能达到最高性能。

三 安全 当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系统的性能达到最优化。

相关文章
相关标签/搜索