Mysql数据库中的redo log 写入策略和binlog 写入策略

作者:男人要霸气 时间:2024-01-27 08:21:14 

redo log的写入策略

InnoDB提供了innodb_flush_log_at_trx_commit参数,它有三种可能取值:

  • 设置为0的时候,表示每次事务提交时都只是把redo log留在redo log buffer中;

  • 设置为1的时候,表示每次事务提交时都将redo log直接持久化到磁盘;

  • 设置为2的时候,表示每次事务提交时都只是把redo log写到page cache

查看mysql变量:show VARIABLES LIKE 'innodb_flush_log_at_trx_commit'

binlog的写入策略

binlog的写入策略,write 和fsync的时机,是由参数sync_binlog控制的:

  • sync_binlog=0的时候,表示每次提交事务都只write,不fsync

  • sync_binlog=1的时候,表示每次提交事务都会执行fsync

  • sync_binlog=N(N>1)的时候,表示每次提交事务都write,但累积N个事务后才fsync

因此,在出现IO瓶颈的场景里,将sync_binlog设置成一个比较大的值,可以提升性能。在实际的业务场景中,考虑到丢失日志量的可控性,一般不建议将这个参数设成0,比较常见的是将其设置为100~1000中的某个数值。

但是,将sync_binlog设置为N,对应的风险是:如果主机发生异常重启,会丢失最近N个事务的binlog日志。

生产配置

通常情况下,生产都是" 双1 "的配置,也就是sync_binloginnodb_flush_log_at_trx_commit 的配置都是1,也就是说,一个事务完整提交前,需要等待两次刷盘,一次是redo log,一次是binlog

性能瓶颈

如果你的MySQL现在出现了性能瓶颈,而且瓶颈在IO上,可以通过哪些方法来提升性能呢?

针对这个问题,可以考虑以下三种方法:

  • 设置 binlog_group_commit_sync_delaybinlog_group_commit_sync_no_delay_count参数,减少binlog的写盘次数。这个方法是基于“额外的故意等待”来实现的,因此可能会增加语句的响应时间,但没有丢失数据的风险。

  • sync_binlog 设置为大于1的值(比较常见是100~1000)。这样做的风险是,主机掉电时会丢binlog日志。

  • innodb_flush_log_at_trx_commit设置为2。这样做的风险是,主机掉电的时候会丢数据。

我不建议你把innodb_flush_log_at_trx_commit 设置成0。因为把这个参数设置成0,表示redo log只保存在内存中,这样的话MySQL本身异常重启也会丢数据,风险太大。而redo log写到文件系统的page cache的速度也是很快的,所以将这个参数设置成2跟设置成0其实性能差不多,但这样做MySQL异常重启时就不会丢数据了,相比之下风险会更小。

来源:https://blog.csdn.net/weixin_42740530/article/details/124413921

标签:Mysq,写入策略,redolog,binlog
0
投稿

猜你喜欢

  • ASP链接Mysql数据库 非DSN连接的方法

    2009-03-09 18:24:00
  • Python自定义scrapy中间模块避免重复采集的方法

    2022-02-19 13:32:44
  • Pandas之缺失数据的实现

    2022-05-04 19:00:05
  • asp 取一个数的整数 但不是四舍五入,只要有小数,就取大于这个数的整数

    2011-03-17 10:34:00
  • 使用PL/SQL Developer连接Oracle数据库的方法图解

    2024-01-19 23:30:24
  • Pygame Surface创建图像的实现

    2023-07-10 13:44:26
  • python数据挖掘需要学的内容

    2021-02-26 00:54:13
  • python常见数制转换实例分析

    2021-04-04 08:09:32
  • Python利用networkx画图绘制Les Misérables人物关系

    2021-03-31 07:41:54
  • 网页图片延时加载的js代码

    2024-04-22 13:22:41
  • 2009年情人节网站logo欣赏

    2009-02-15 12:13:00
  • python分布式计算dispy的使用详解

    2021-01-14 09:15:24
  • 解决pytorch报错:AssertionError: Invalid device id的问题

    2021-05-15 16:13:42
  • 解析:轻松掌握 字符串文字字符集和校对

    2008-12-17 17:07:00
  • DBA_2PC_PENDING 介绍

    2009-02-28 10:59:00
  • Python如何实现文本转语音

    2022-12-23 09:49:22
  • Pandas对每个分组应用apply函数的实现

    2022-01-26 04:02:00
  • MySQL多实例安装开机自启动服务配置过程

    2024-01-14 14:32:17
  • 如何实现让每句话的头一个字母都大写?

    2010-05-24 18:26:00
  • Python的Django框架中forms表单类的使用方法详解

    2021-07-31 04:31:40
  • asp之家 网络编程 m.aspxhome.com