网站建设营销词/百度提交入口网址

网站建设营销词,百度提交入口网址,专业武汉网站建设公司排名,莱芜热点为什么要两阶段提交 事务提交之后,redo log和bin log 都是需要1持久化到磁盘中,但是这两个是独立的逻辑,可能出现半成功的状态,这样就造成两份日志之间的逻辑不一致。如: 以id1,name ‘小明’执行 updat…
为什么要两阶段提交

事务提交之后,redo log和bin log 都是需要1持久化到磁盘中,但是这两个是独立的逻辑,可能出现半成功的状态,这样就造成两份日志之间的逻辑不一致。如:

以id=1,name = ‘小明’执行

update stu set name = '小红'  where id = 1 

会出现如下两种情况:

  • 如果bin log写入了磁盘之后,,Mysql突然宕机了,而redo log还没来得及写入。由于redo log没有写入数据,重启之后主库不存在这条数据,但是从库已经同步了这条数据就会出现,主从不一致的情况
  • 如果在将redo log刷入到磁盘之后,Mysql突然宕机了,而bin log还没来得及写入。Mysql重启后,,通过redo log能将Buffer Pool中id = 1这行数据的name字段更新到‘小红’但是bin log由于没有写入,所以从库中的数据还是‘小明’,出现了主从不一致的情况

两阶段提交把单个事务提交分为两个阶段,分别是“准备”和“提交”阶段

两阶段提交的过程是怎么样的

当客户端执行commit语句或者在自动提交的情况下,Mysql内部开启一个XA事务,分为两个阶段来完成XA事务的提交

        

事务提交的过程分为两个阶段,就是将redo log的写入拆分为两个步骤:prepare和commit,中间在穿插写入bin log,具体步骤如下:

  • prepare阶段:将XID(内部XA事务的ID)写入到redo log,,同时将redo log对应的事务状态设置为prepare,然后将redo log持久化到磁盘
  • commit阶段:将XID写入到bin log然后将bin log持久化到磁盘,接着提交事务,将redo log状态设置为commit,此时该状态并不需要持久化到磁盘,只需要写入到文件系统的缓存页中就可以,因为只要bin log写到磁盘中成功,就算redo log状态还是prepare也没有关系,一样会被认为事务已经执行成功

    异常重启会发送什么现象呢

不管是时刻A(redo log写入磁盘,bin log没有)出现问题还是时刻B(redo log和bin log都写入到磁盘,但是还没有写入commit标识)崩溃,此时得redo log都是处于prepare的状态

在Mysql重启之后,都会按照顺序扫描redo log文件,碰到处于prepare状态的redo log,就会拿着redo log中的XID去bin log中去查找是否存在这个XID:

  • 如果bin log中没有当前内部XA事务的XID,说明redo log完成了刷盘,但是bin log还没有刷盘,则回滚事务,对应时刻A
  • 如果bin log中有当前内部事务的XID,说明redo log和bin log都已经完成了刷盘,则提交事务,对应时刻B

可以看到,对于处于prepare阶段的redo log,既可以提交事务,也可以回滚事务,这取决于能否在bin log中查找到与redo log相同的XID,如果有就提交事务,没有就回滚事务。这样就可以保证redo log和 bin log的一致性

两阶段提交出现的问题

两个阶段虽然保证了两个日志文件的数据一致性,但是性能不高,主要的原因是:

  • 磁盘I/O次数过高:每一个事务提交都是需要两次刷盘(redo和bin)
  • 锁竞争激烈:两个阶段虽然可以保证“单个事务”的两个日志一致,但是不能保证“多个事务“情况下,两者提交的顺序一致性。因此,在两个阶段提交流程的基础上,还需要加上一个锁来保证提交的原子性,从而保证多事务的情况下,两个日志提交的顺序一致

为了解决上诉问题,引用有一个新的技术”组提交“,当多个事务提交的时候,会将多个bin log刷盘操作合并成一个,从而减少磁盘I/O的次数。如果10个事务一次排队刷盘的时间成本是10,那么将着10个事务一次性一起刷盘的时间成本近似.

引入组提交及之后,prepare阶段不变,只针对于commit阶段,将commit阶段拆分为三个过程:

  • flush阶段:多个事务按照将进入的顺序将bin log从cache写入文件(不刷盘)
  • sync阶段:对于bin log文件进行fsyn操作(多个事务的bin log合并有一次刷盘)
  • commit:各个事务按照顺序做InnoDB的提交操作

上面的每一个阶段都有一个队列,每个阶段都有锁进行保证事务写入的顺序性,第一个进入队列的事务会成为 leader,leader领导所在队列的所有事务,全权负责整队的操作,完成后通知队内其他事务操作结束

每个阶段引入队列,锁只是针对队列进行保护,不会锁住整个提交事务的整个过程。锁的粒度减小了,这样就可以多个阶段并发执行,提升效率

有 binlog 组提交,那有 redo log 组提交吗?

这个要看 MySQL 版本,MySQL 5.6 没有 redo log 组提交,MySQL 5.7 有 redo log 组提交

在 MySQL 5.6 的组提交逻辑中,每个事务各自执行 prepare 阶段,也就是各自将 redo log 刷盘,这样就没办法对 redo log 进行组提交。

所以在 MySQL 5.7 版本中,做了个改进,在 prepare 阶段不再让事务各自执行 redo log 刷盘操作,而是推迟到组提交的 flush 阶段,也就是说 prepare 阶段融合在了 flush 阶段。

这个优化是将 redo log 的刷盘延迟到了 fush 阶段之中,sync 阶段之前。通过延迟写 redo log 的方式为 redolog 做了一次组写入,这样 binlog 和 redo log 都进行了优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年中国城市统计年鉴(PDF+excel)

2024年中国城市统计年鉴(PDFexcel) 说明:包括地级县级市 格式:PDFEXCEL 《中国城市统计年鉴》是一部全面反映中国城市发展状况的官方统计出版物,包括各级城市的详细统计数据。这部年鉴自1985年开始出版,…

蓝桥杯 灯笼大乱斗【算法赛】

问题描述 元宵佳节&#xff0c;一场别开生面的灯笼大赛热闹非凡。NN 位技艺精湛的灯笼师依次落座&#xff0c;每位师傅都有相应的资历值&#xff0c;其中第 ii 位师傅的资历值为 AiAi​。从左到右&#xff0c;师傅们的资历值逐级递增&#xff08;即 A1<A2<⋯<ANA1​&l…

HarmonyOS 5.0应用开发——多线程Worker和@Sendable的使用方法

【高心星出品】 文章目录 多线程Worker和Sendable的使用方法开发步骤运行结果 多线程Worker和Sendable的使用方法 Worker在HarmonyOS中提供了一种多线程的实现方式&#xff0c;它允许开发者在后台线程中执行长耗时任务&#xff0c;从而避免阻塞主线程并提高应用的响应性。 S…

避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

本次更新主要是对环境版本进行了更新&#xff0c;例如php 7.3.7升级到了7.3.8&#xff0c;另外之前的版本有同学踩了坑&#xff0c;主要是官方docker镜像php:7.3.7-fpm和php:7.3.8-fpm使用了不同版本的debian&#xff0c;后面会提到&#xff0c;请各位同学留意。 因为最近换电脑…

自动化测试开发

4、Servlet模型&#xff08;一&#xff09; Servlet的编写、访问过程 Servlet简介 Servlet是Java Servlet的简称&#xff0c;是小服务程序或服务连接器&#xff0c;是用Java编写的服务器端程序&#xff0c;主要功能在于获取请求&#xff0c;返回响应广义&#xff1a;一个Ser…

24、Java 集合

十一章&#xff1a;Java 集合 一、集合框架的概述 1、集合&#xff1a;就像一个容器&#xff0c;可以动态的把多个对象的引用放入容器中。简称 Java 容器 ​ 说明&#xff1a;此时的存储&#xff0c;主要指的是内存层面的存储&#xff0c;不涉及到持续化的存储&#xff08;.t…

测试人员如何驱动开发?

软件开发中测试人员的作用正在从传统的缺陷发现者演变为开发过程的主动推动者。特别是在敏捷和 DevSecOps 环境中&#xff0c;测试人员如何通过参与需求、提供反馈和推动自动化来驱动开发&#xff0c;成为一个值得探讨的话题。本文将详细分析测试人员驱动开发的具体方式&#x…

oracle游标为什么没有共享,统计一下原因

-- Script Code为什么没共享 define sql_id bs391f0yq5tpw;set serveroutput onDECLAREv_count number;v_sql varchar2(500);v_sql_id varchar2(30) : &sql_id; BEGINv_sql_id : lower(v_sql_id);dbms_output.put_line(chr(13)||chr(10));dbms_output.put_line(sql_id: ||…

哈希碰撞攻防战——深入浅出Map/Set的底层实现

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习Map/Set的底层实现 目录 问题一&#xff1a;hash会出现负数&#xff1f;数组越界 一&#xff1a;什么是二叉搜索树&#xff1f…

win10使用haneWIN NFS Server挂载NFS v2服务,u-boot通过NFS下载zImage

1. haneWIN NFS Server挂载NFS v2服务 https://www.hanewin.net/nfs-e.htm netstat -ano | findstr ":2049"TCP 0.0.0.0:2049 0.0.0.0:0 LISTENING 3824UDP 0.0.0.0:2049 *:* 38…

Linux文件系统与目录结构

Linux系统中一切皆文件 bin 是Binary 的缩写, 这个目录存放着最经常使用的命令 boot 这里存放的是启动Linux时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件&#xff0c;自 己的安装别放这里。 cdrom 这个目录通常专门用来挂载光盘。当系统刚安装时&#x…

一文详解基于NarrotoAI的短剧短视频自动解说、混剪AI平台搭建

背景 前阵给孩子做电子相册学了点剪辑技术&#xff0c;就想凑个热闹剪剪短剧玩玩&#xff0c;一是学以 致用&#xff0c;再者也好奇短剧创作为啥这么火&#xff0c;跟个风。 初步了解情况后&#xff0c;发现我的剪辑技术已经落后了&#xff0c;行家们玩的主要是解说 &#xf…

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Linux操作系统5-进程信号3(信号的捕捉流程,信号集,sigaction)

上篇文章&#xff1a;Linux操作系统5-进程信号3&#xff08;信号的保存, 用户态与内核态&#xff0c;内核空间&#xff09;-CSDN博客 本篇Gitee仓库&#xff1a;​​​​​​​myLerningCode/l26 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点…

【机器学习chp10】降维——(核化)PCA + MDS + lsomap + 拉普拉斯特征映射 + t-NSE + UMAP

目录 一、降维的意义与本质 1、意义 2、本质 3、常见降维方法 &#xff08;1&#xff09;线性降维 &#xff08;2&#xff09;非线性降维 二、基于重构的降维 1、PCA 2、核化PCA &#xff08;1&#xff09;实现过程 步骤一&#xff1a;数据映射与核函数定义 步骤二…

CF 118A.String Task(Java实现)

题目分析 输入一个字符串&#xff0c;遍历每一个字符&#xff0c;如果是元音字母就删除&#xff0c;辅音字母就在其前面增加一个.&#xff0c;且所有字母输出都是小写。 思路分析 将输入的字符串改为字符数组&#xff0c;考虑到任意位置插入的情况&#xff0c;所以主要选择Lin…

DeepSeek在PiscTrace上完成个性化处理需求案例——光流法将烟雾动态可视化

引言&#xff1a;PiscTrace作为开放式的视图分析平台提供了固定格式的类型参数支持个性化定制处理需求&#xff0c;本文一步步的实现光流分析按照不同需求根据DeepSeek的代码处理视频生成数据。 光流法&#xff08;Optical Flow&#xff09;是一种基于图像序列的计算机视觉技术…

Linux网络 TCP全连接队列与tcpdump抓包

TCP全连接队列 在 Linux 网络中&#xff0c;TCP 全连接队列&#xff08;也称为 Accept 队列&#xff09;是一个重要的概念&#xff0c;用于管理已经完成三次握手&#xff0c;即已经处于 established 状态但尚未被应用程序通过 accept( ) 函数处理的 TCP 连接&#xff0c;避免因…

flex布局自定义一行几栏,靠左对齐===grid布局

模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…

使用3090显卡部署Wan2.1生成视频

layout: post title: 使用3090显卡部署Wan2.1生成视频 catalog: true tag: [Kubernetes, GPU, AI] 使用3090显卡部署Wan2.1生成视频 1. 环境说明2. 模型下载3. 克隆仓库4. 安装依赖5. 生成视频 5.1. 使用generate脚本生成5.2. 使用gradio启动UI界面生成 5.2.1. 启动gradio服务5…