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

Mysql 数据可靠性机制

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Mysql 数据可靠性机制

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

免责声明:

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

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

Mysql 数据可靠性机制

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

下载Word文档

猜你喜欢

Mysql 数据可靠性机制

binlog 的写入机制binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中一个事务的 binlog 是不能被拆开的,因此不论这个事务多大,也要确保
Mysql 数据可靠性机制
2014-10-20

数据守护者:确保数据库的可靠性和可用性

数据库的可靠性和可用性对于现代组织至关重要。数据守护者通过实施数据保护措施和监控策略来确保数据的完整性、可用性和机密性。
数据守护者:确保数据库的可靠性和可用性
2024-03-07

MySQL tinyint数据可靠有效吗

MySQL的tinyint数据类型是一种存储较小整数值的数据类型,范围为-128到127或0到255,具体取决于是否使用有符号或无符号。tinyint数据类型通常用于存储布尔值或枚举类型的数据,并且在许多情况下是非常可靠和有效的。然而,需
MySQL tinyint数据可靠有效吗
2024-07-31

MySQL tinyint数据可靠准确吗

MySQL中的tinyint数据类型是一个整数类型,它存储的范围是-128到127(有符号)或0到255(无符号)。它是一个非常轻量级的数据类型,用于存储小范围的整数值。tinyint数据类型在许多情况下是可靠和准确的,特别是在存储需要小
MySQL tinyint数据可靠准确吗
2024-07-30

MySQL tinyint数据稳定可靠吗

MySQL的tinyint数据类型是一种非常常用的数据类型,用来存储小整数值。它的取值范围是-128到127,对于很多场景来说已经足够了。在一般情况下,tinyint数据类型是稳定可靠的,可以满足大部分的需求。然而,在一些特殊情况下,ti
MySQL tinyint数据稳定可靠吗
2024-07-30

MySQL tinyint数据准确可靠吗

是的,MySQL的tinyint数据类型是准确可靠的。tinyint数据类型用于存储小整数值,通常是在-128到127之间。它只占用一个字节的存储空间,因此在存储小整数值时非常高效。tinyint数据类型的范围是-128到127,如果需要存
MySQL tinyint数据准确可靠吗
2024-07-31

ZooKeeper如何保证数据的可靠性

ZooKeeper 通过以下一些机制来保证数据的可靠性:数据复制:ZooKeeper 使用多副本机制来存储数据,每个数据节点都会被复制到多个 ZooKeeper 服务器上,这样即使某个服务器发生故障,数据仍然可以从其他服务器获取。选主机制
ZooKeeper如何保证数据的可靠性
2024-03-11

Oracle API安全管理与控制:保障数据传输可靠性

标题:Oracle API安全管理与控制:保障数据传输可靠性,需要具体代码示例数据在当今信息时代中扮演着至关重要的角色,而数据的传输安全性更是任何组织都必须高度关注的重要问题。特别是对于使用Oracle数据库的企业来说,保障API安全和数
Oracle API安全管理与控制:保障数据传输可靠性
2024-03-07

PHP 数据库连接最佳实践:性能、可扩展性和可靠性

最佳 php 数据库连接实践:优化连接:使用持久连接和连接池利用事务提升性能可扩展性:采用主从复制增强读操作吞吐量通过负载均衡提升可扩展性可靠性:启用重试机制应对故障实施异常处理以优雅处理错误定期监控以预防问题PHP 数据库连接最佳实践:性
PHP 数据库连接最佳实践:性能、可扩展性和可靠性
2024-05-21

Prometheus如何处理监控数据的数据完整性和可靠性

Prometheus 使用一些策略来处理监控数据的数据完整性和可靠性,包括:数据采集和存储:Prometheus 使用 pull 模型进行数据采集,定期从被监控的目标节点拉取监控数据。数据存储在本地的时间序列数据库中,确保数据的完整性和可靠
Prometheus如何处理监控数据的数据完整性和可靠性
2024-03-04

Couchbase中如何处理数据一致性和可靠性

Couchbase是一个分布式的NoSQL数据库,它提供了多种方法来处理数据一致性和可靠性。数据一致性:Couchbase使用内置的XDCR(跨数据中心复制)功能来确保数据的一致性。XDCR能够在不同的Couchbase集群之间实现数据的同
Couchbase中如何处理数据一致性和可靠性
2024-04-09

利用 PHP 防抖机制提高系统的稳定性和可靠性

在开发PHP应用程序时,我们经常会遇到一些需要处理用户输入或触发事件的情况。然而,用户输入或事件触发时的频繁操作可能会对系统的稳定性和可靠性造成负面影响。为了解决这个问题,我们可以利用PHP提供的防抖机制。防抖机制的原理是在用户输入或事件触
2023-10-21

PHP trait DTO:提升数据传输层的可靠性与可扩展性

概述:在一个典型的PHP应用程序中,数据的传输是非常常见的操作。通常情况下,我们会使用数组、对象或者关联数组来传输数据。然而,这种传输方式并不总是可靠和可扩展的。为了解决这个问题,我们可以使用PHP的trait和DTO(Data Trans
2023-10-21

如何理解Spark Streaming的数据可靠性和一致性

如何理解Spark Streaming的数据可靠性和一致性,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。眼下大数据领域最热门的词汇之一便是流计算了,其中最耀眼的项目无疑是来自S
2023-06-19

阿里云数据库功能、安全与可靠性

阿里云数据库是阿里巴巴集团提供的云计算数据库服务,具有高效、安全、可靠等特点,广泛应用于各种场景。本文将详细介绍阿里云数据库的特色功能,以及其在安全性、可靠性和数据管理方面的表现。一、阿里云数据库的功能阿里云数据库提供了多种数据库服务,包括关系型数据库服务RDS、NoSQL数据库服务MongoDB、数据仓库服务D
阿里云数据库功能、安全与可靠性
2023-12-18

阿里云数据库稳定性如何确保数据安全与可靠性

在数字化时代,数据库已经成为企业运营的重要组成部分。然而,随着数据量的增长和业务需求的复杂性,数据库的稳定性问题日益突出。作为全球领先的云计算服务提供商,阿里云为用户提供了一流的数据库解决方案,旨在确保数据安全和可靠性。本文将深入探讨阿里云数据库的稳定性,以及如何确保其在各种环境下的高效运行。一、阿里云数据库稳定
阿里云数据库稳定性如何确保数据安全与可靠性
2023-10-31

PHP trait DTO:优化数据传输层的性能与可靠性

随着现代Web应用程序的复杂性不断增加,数据传输层(Data Transfer Object,DTO)在应用程序中的重要性也与日俱增。DTO是用于在不同层之间传输数据的对象,通常用于将数据库实体(Entities)转换为更适合在前端显示的格
2023-10-21

编程热搜

目录