我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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异常重启时就不会丢数据了,相比之下风险会更小。

到此这篇关于Mysql redo log 写入策略和binlog 写入策略的文章就介绍到这了,更多相关Mysq写入策略内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL插入锁与数据库缓存策略

MySQL中的插入锁是指在插入数据时对被插入的数据行进行锁定,以防止其他并发操作对该数据行的修改或删除。这样可以保证数据的完整性和一致性。数据库的缓存策略是指数据库系统对数据的读取和写入进行缓存管理,以提高系统的性能和效率。数据库缓存通常
MySQL插入锁与数据库缓存策略
2024-08-19

PHP与MySQL索引的更新和维护策略及其对数据写入性能的影响

引言:在大多数的Web应用程序中,PHP和MySQL扮演了重要角色。PHP是一种流行的服务器端脚本语言,而MySQL则是一个常用的关系型数据库管理系统。在使用PHP与MySQL进行数据操作时,索引的优化和维护策略对于提高数据库性能至关重要。
2023-10-21

MySQL数据库和Redis缓存一致性的更新策略

目录一、更新策略二、读写缓存1、同步直写策略2、异步缓写策略三、双检加锁策略四、数据库和缓存一致性的更新策略1、先更新数据库,再更新Redis2、先更新缓存,再更新数据库3、先删除缓存,再更新数据库延时双删4、先更新数据库,再删除缓存5、总
2023-04-12

数据库死锁:深入剖析数据库中的“死循环”及其应对策略

数据库死锁是指两个或两个以上的事务由于循环等待对方的资源而导致无法继续执行的情况。为了解决死锁问题,数据库使用死锁检测和死锁预防机制,努力打破死锁循环。
数据库死锁:深入剖析数据库中的“死循环”及其应对策略
2024-02-05

Jupyter Notebook怎么实现从IB接口历史数据获取及写入数据库、策略回测和实盘交易

本篇文章给大家分享的是有关Jupyter Notebook怎么实现从IB接口历史数据获取及写入数据库、策略回测和实盘交易,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。刚好有个同
2023-06-02

本地数据库接入阿里云实现数据无缝对接的策略

随着大数据时代的到来,本地数据库与云端数据库的集成成为了企业发展的必然趋势。本文将详细介绍如何通过本地数据库接入阿里云,实现数据的无缝对接。正文:随着科技的发展,数据已经成为企业的核心资产。然而,随着数据量的增长,本地数据库的存储空间和处理能力已经无法满足企业的需求。这就需要将本地数据库的数据通过阿里云进行处理和
本地数据库接入阿里云实现数据无缝对接的策略
2023-10-30

数据保护的基石:数据库备份与恢复策略深入浅出

数据库备份与恢复是企业维护数据完整性和业务连续性不可或缺的关键策略,本文将深入浅出地讲解数据库备份与恢复策略、方法和最佳实践,帮助企业建立全面的数据保护机制。
数据保护的基石:数据库备份与恢复策略深入浅出
2024-02-10

MySQL数据库和Redis缓存一致性的更新策略是什么

这篇文章主要介绍“MySQL数据库和Redis缓存一致性的更新策略是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库和Redis缓存一致性的更新策略是什么”文章能帮助大家解决问题。
2023-07-06

【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及expla
2023-08-25

PHP与MySQL索引的数据插入和索引重建的性能优化策略及其影响

概述:在使用PHP和MySQL进行数据插入和查询操作时,索引的设计和使用是非常重要且常用的性能优化策略之一。索引可以提高数据的检索速度,减少查询时间,提高数据库的性能。本文将重点介绍PHP和MySQL中索引的数据插入和索引重建的性能优化策略
2023-10-21

数据库水平分割与垂直分割的区别:深入解析两种分区分区策略

数据库的水平分割和垂直分割是两种常见的分区策略,它们在数据存储和管理方面具有不同的特点和应用场景。本文将深入解析这两种分区策略,帮助读者了解它们的异同和优缺点,以便根据实际需求选择合适的数据库分区策略。
数据库水平分割与垂直分割的区别:深入解析两种分区分区策略
2024-02-23

PHP与MySQL索引的库存管理和数据更新策略及其对并发性能的影响

引言:在数据库的应用中,高效的数据管理和更新策略对于保证系统的并发性能至关重要。本文将以PHP和MySQL为例,深入探讨索引在库存管理和数据更新中的应用,以及它们对并发性能的影响。文章将涵盖索引的基本原理、库存管理和数据更新策略的实现,同时
2023-10-21

如何获取 MySQL 数据库的最后访问(和/或写入)时间?

要获取上次访问时间,请尝试以下语法 -SELECT update_timeFROM INFORMATION_SCHEMA.TABLESWHERE table_schema = yourDatabaseNameAND table_nam
2023-10-22

编程热搜

目录