MySQL日志双一配置分析实战

mysql双一配配置分析

mysql双一配置主要是binlogredolog的落盘时间的
binlog的write 和 fsync 的时机,是由参数 sync_binlog 控制的:
sync_binlog=0的时候,表示每次提交事务都只 write,不 fsync;
sync_binlog=1的时候,表示每次提交事务都会执行 fsync;sync_binlog=N(N>1) 的时候,表示每次提交事务都 write,但累积 N 个事务后才 fsync。

write是指将日志文件写入到文件系统的page cache,并没有持久化到磁盘,速度很快
fsync是指将数据持久化到磁盘的操作,一般情况下我们认为fsync才占磁盘的IOPS

redo log 的写入策略是由 innodb_flush_log_at_trx_commit参数控制的,它有三种可能取值:

设置为 0 的时候,表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;
设置为 1 的时候,表示每次事务提交时都将 redo log 直接持久化到磁盘;
设置为 2 的时候,表示每次事务提交时都只是把 redo log 写到 page cache。
InnoDB 有一个后台线程,每隔 1 秒,就会把 redo log buffer 中的日志,调用 write 写到文件系统的 page cache,然后调用 fsync 持久化到磁盘。

准备数据

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `c` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

delimiter ;;
create procedure idata()
begin
  declare i int;
  set i=1;
  while(i<=100000) do
    insert into t values(i,i);
    set i=i+1;
  end while;
end;;
delimiter ;

mysql默认sync_binlog为1, innodb_flush_log_at_trx_commit 也是1,也就是双一配置。也就是说在mysql异常宕机的时候不会出现任何数据的丢失。

设置环境

set global sync_binlog=1;
set global innodb_flush_log_at_trx_commit=1;

生成新的binlog文件

flush logs;

执行存储过程

call idata();

执行时间为22分钟

mysql> call idata();
Query OK, 1 row affected (22 min 8.30 sec)

将sync_binlog设为0,innodb_flush_log_at_trx_commit设为2

set global sync_binlog=0;
set global innodb_flush_log_at_trx_commit=2;

再次执行存储过程

truncate table t;
call idata();

执行时间

mysql> call idata();
Query OK, 1 row affected (15.26 sec)

发现时间变了,只要就15秒就可以了,快了接近10倍
在生产环境中如果磁盘压力比较大, 在出现 IO 瓶颈的场景里,将 sync_binlog 设置成一个比较大的值,可以提升性能。在实际的业务场景中,考虑到丢失日志量的可控性,一般不建议将这个参数设成 0,比较常见的是将其设置为 100-1000 中的某个数值。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IEEE(Institute of Electrical and Electronics Engineers)是一个国际性的专业学术机构,他们为各个领域的研究人员和工程师提供技术发展和交流的平台,并发布各种学术论文。在撰写学术论文时,使用IEEE的LATEX模板可以帮助作者按照IEEE的双一作格式来编写论文。 双一作格式是IEEE要求作者在学术论文中同时列出作者和机构的名称,在同一行中以平行形式排列,作者与机构名称之间用逗号分隔。对于多个作者和多个机构的情况,可以使用上标来表示各作者和机构的对应关系。 在LATEX中,可以使用IEEEtran模板来实现双一作格式。首先,在文档类声明中使用"ieeeaccess"或"ieeeconf"来定使用IEEEtran模板。然后,在正文中使用"\author"命令来列出作者的名称,用逗号分隔不同作者。如果需要对应作者和非对应作者的区分,则可以使用"\thanks"命令。对应作者应该在机构名称后面用"*"标识。在每个作者后面使用"\IEEEauthorrefmark"命令来生成上标,定作者和机构的对应关系。 例如,假设有两个作者Alice和Bob,他们分别隶属于两个机构A和B,那么在LATEX代码中可以这样编写: \author{% \IEEEauthorblockN{Alice, Bob} \IEEEauthorblockA{Institution A, Institution B\IEEEauthorrefmark{1}} } 最后,在文档末尾使用"\IEEEauthorrefmark{1}"命令来生成作者和机构的对应关系。该命令会自动将上标“1”对应到作者Alice和Bob所隶属的机构A和B。 通过使用IEEE的LATEX模板,按照上述步骤编写论文,就能够符合IEEE的双一作格式要求。这样的输出结果将符合IEEE论文的排版标准,并且便于读者查找作者和机构的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值