广告
返回顶部
首页 > 资讯 > 数据库 >Mysql 数据可靠性机制
  • 523
分享到

Mysql 数据可靠性机制

Mysql数据可靠性机制 2014-10-20 21:10:05 523人浏览 无得
摘要

binlog 的写入机制 binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中 一个事务的 binlog 是不能被拆开的,因此不

Mysql 数据可靠性机制

binlog 的写入机制

binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中

一个事务的 binlog 是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。 这就涉及到了 binlog cache的保存问题。 系统给 binlog cache 分配了一片内存,每个线程一个,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。如果超过了这个参数规定的大小,就要暂存到磁盘。 事务提交的时候,执行器把 binlog cache 里的完整事务写入到 binlog 中,并清空 binlog cache

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

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 日志

redo log 的写入机制

事务在执行过程中,生成 的 redo log 是要先写到 redo log buffer 的。

事务还没提交的时候,redo log buffer 中的部分日志有没有可能 被持久化到磁盘呢

日志写到 redo log buffer 是很快的,wirte 到 page cache 也差不多,但是持久化到磁盘 的速度就慢多了。

为了控制 redo log 的写入策略,InnoDB 提供了 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 持久化到磁盘

事务执行中间过程的 redo log 也是直接写在 redo log buffer 中的,这些 redo log 也会被后台线程一起持久化到磁盘。也就是说,一个没有提交的事务的 redo log,也是可能已经持久化到磁盘的

除了后台线程每秒一次的轮询操作外,还有两种场景会让一个没有提交的事务的 redo log 写入到磁盘中

一种是,redo log buffer 占用的空间即将达到 innodb_log_buffer_size 一半的时 候,后台线程会主动写盘。注意,由于这个事务并没有提交,所以这个写盘动作只是 write,而没有调用 fsync,也就是只留在了文件系统的 page cache

另一种是,并行的事务提交的时候,顺带将这个事务的 redo log buffer 持久化到磁盘

通常我们说 Mysql 的“双 1”配置,指的就是 sync_binlog 和 innodb_flush_log_at_trx_commit 都设置成 1。也就是说,一个事务完整提交前,需要等待两次刷盘,一次是 redo log(prepare 阶段),一次是 binlog

组提交

mysql 通过组提交来提高IO的效率

如果你想提升 binlog 组提交的效果,可以通过设置 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 来实现。

  1. binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync;
  2. binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync
您可能感兴趣的文档:

--结束END--

本文标题: Mysql 数据可靠性机制

本文链接: https://www.lsjlt.com/news/4130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Mysql 数据可靠性机制
    binlog 的写入机制 binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中 一个事务的 binlog 是不能被拆开的,因此不...
    99+
    2014-10-20
    Mysql 数据可靠性机制
  • springboot中rabbitmq实现消息可靠性机制详解
    1. 生产者模块通过publisher confirm机制实现消息可靠性  1.1 生产者模块导入rabbitmq相关依赖 <!--AMQP依赖,包含Rabbit...
    99+
    2022-11-12
  • PHP与数据库可靠性的集成
    PHP是一种流行的开源脚本语言,在Web应用程序的开发中使用非常广泛。许多Web应用程序都需要与数据库进行集成。数据库作为Web应用程序的核心组件之一,承载了各种类型的数据。因此,数据库的可靠性对于Web应用程序的正常运行至关重要。在本文中...
    99+
    2023-05-18
    数据库 PHP 可靠性
  • 利用 PHP 防抖机制提高系统的稳定性和可靠性
    在开发PHP应用程序时,我们经常会遇到一些需要处理用户输入或触发事件的情况。然而,用户输入或事件触发时的频繁操作可能会对系统的稳定性和可靠性造成负面影响。为了解决这个问题,我们可以利用PHP提供的防抖机制。防抖机制的原理是在用户输入或事件触...
    99+
    2023-10-21
    可靠性 系统稳定性 PHP防抖机制
  • PHP trait DTO:提升数据传输层的可靠性与可扩展性
    概述:在一个典型的PHP应用程序中,数据的传输是非常常见的操作。通常情况下,我们会使用数组、对象或者关联数组来传输数据。然而,这种传输方式并不总是可靠和可扩展的。为了解决这个问题,我们可以使用PHP的trait和DTO(Data Trans...
    99+
    2023-10-21
    PHP dto trait
  • 如何理解Spark Streaming的数据可靠性和一致性
    如何理解Spark Streaming的数据可靠性和一致性,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。眼下大数据领域最热门的词汇之一便是流计算了,其中最耀眼的项目无疑是来自S...
    99+
    2023-06-19
  • 使用Go重试机制代码更可靠
    目录场景设计原理场景 服务依赖第三方服务或者其他服务,但有时第三方服务偶发性出现问题并且会快速的恢复,而我们的系统可能因为这些偶发性出现问题。 所以无法保证以来服务的可靠性,但是我们...
    99+
    2022-11-11
  • 阿里云数据库功能、安全与可靠性
    阿里云数据库是阿里巴巴集团提供的云计算数据库服务,具有高效、安全、可靠等特点,广泛应用于各种场景。本文将详细介绍阿里云数据库的特色功能,以及其在安全性、可靠性和数据管理方面的表现。 一、阿里云数据库的功能阿里云数据库提供了多种数据库服务,包...
    99+
    2023-12-18
    阿里 可靠性 功能
  • 阿里云服务器的安全性高可靠性和多重防护机制
    随着互联网技术的发展,越来越多的企业和个人开始使用云服务器。在众多的云服务提供商中,阿里云以其出色的性能和强大的安全防护能力脱颖而出。本文将深入探讨阿里云服务器的安全性,从高可靠性、多重防护机制等方面进行详细说明。 阿里云服务器的安全性:高...
    99+
    2023-11-19
    阿里 安全性 高可靠性
  • Python 打包实时 HTTP 数据,如何确保数据的可靠性?
    在现代互联网应用中,实时数据的传输变得越来越重要。HTTP 协议是互联网上最常用的协议之一,而 Python 作为一种高效而又易于使用的编程语言,自然也成为了许多人实现实时 HTTP 数据传输的首选。但是,在实时数据传输中,如何确保数据的...
    99+
    2023-09-13
    打包 实时 http
  • 阿里云数据库稳定性如何确保数据安全与可靠性
    在数字化时代,数据库已经成为企业运营的重要组成部分。然而,随着数据量的增长和业务需求的复杂性,数据库的稳定性问题日益突出。作为全球领先的云计算服务提供商,阿里云为用户提供了一流的数据库解决方案,旨在确保数据安全和可靠性。本文将深入探讨阿里云...
    99+
    2023-10-31
    阿里 可靠性 稳定性
  • 如何测试 MySQL SSL 连接的可靠性
    如何测试 MySQL SSL 连接的可靠性概述:MySQL 是一个流行的关系型数据库管理系统,常用于存储和管理大量数据。为了保护敏感信息的安全性,MySQL 提供了 SSL 连接的功能,通过加密通信来传输数据。然而,如何确保 MySQL S...
    99+
    2023-10-22
    MySQL ssl 可靠性
  • PHP trait DTO:优化数据传输层的性能与可靠性
    随着现代Web应用程序的复杂性不断增加,数据传输层(Data Transfer Object,DTO)在应用程序中的重要性也与日俱增。DTO是用于在不同层之间传输数据的对象,通常用于将数据库实体(Entities)转换为更适合在前端显示的格...
    99+
    2023-10-21
    PHP dto trait
  • 分布式数组:如何保证数据的一致性和可靠性?
    随着数据规模的不断增大,分布式系统的应用越来越广泛。在分布式系统中,分布式数组是一种常见的数据结构。分布式数组是指将一个大数组分割成若干个小数组,分别存储在不同的机器上,以实现数据的并行处理。然而,分布式数组的实现面临着数据一致性和可靠性...
    99+
    2023-11-08
    分布式 数据类型 数组
  • Java同步与锁机制:保证多线程程序的正确性与可靠性
    随着计算机硬件的快速发展,多核处理器已经成为了主流,多线程编程已经成为了不可避免的趋势。然而,多线程编程也带来了一些问题,例如线程安全问题、死锁问题、竞争条件等等。Java作为一种广泛应用于企业级应用的编程语言,提供了一些同步机制和锁机制...
    99+
    2023-11-09
    同步 numy 日志
  • OB有问必答 | OceanBase如何保证数据可靠性?
    “OB有问必答”是OceanBase最新上线的互动类栏目,每周围绕一个关于分布式数据库的议题为大家详细展开解答,今天我们围绕数据可靠性话题讨论,如果你有任何感兴趣的问题,欢迎留言,我们会每周选取一个问题为...
    99+
    2022-10-18
  • 【数据库】MySQL中的锁机制
    MySQL中的锁机制 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎的锁定机制都是为各...
    99+
    2023-08-18
    mysql 锁机制 共享锁 排它锁
  • mysql数据库中的锁机制
    这篇文章将为大家详细讲解有关mysql数据库中的锁机制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Mysql的锁主要分为3大类:表级锁:存储引擎为Myisam。锁住整个...
    99+
    2022-10-18
  • 如何在MySQL中设计一个高可用的会计系统表结构以确保数据的可靠性和可用性?
    如何在MySQL中设计一个高可用的会计系统表结构以确保数据的可靠性和可用性?在设计一个高可用的会计系统表结构时,我们需要考虑数据的可靠性和可用性。下面将介绍一些在MySQL中设计高可用的会计系统表结构的方法,并提供相应的代码示例。使用事务事...
    99+
    2023-10-31
    数据可靠性 MySQL高可用性 会计系统表结构
  • mysql数据库锁机制是什么
    小编给大家分享一下mysql数据库锁机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!并发控制数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作