广告
返回顶部
首页 > 资讯 > 数据库 >MySQL8.0 DDL原子性特性及实现原理
  • 779
分享到

MySQL8.0 DDL原子性特性及实现原理

2024-04-02 19:04:59 779人浏览 薄情痞子
摘要

1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义

1. DDL原子性概述

8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义等信息;innodb层也有自己一套元数据,包括表信息,索引信息等,这两套元数据并没有机制保证一致性,这就导致了在异常情况下可能存在元数据不一致问题,一种典型场景下,删表操作,sever层的frm已经成功删除了,但引擎层数据字典并没有更新,导致再建重名表失败的问题。同样的,比如drop table t1,t2;可能出现只删除了t1,而t2仍然存在等问题。

8.0的一个重要工作是将数据字典统一,独立了DD(数据字典)模块,废弃了server层的元数据,将innodb的元数据抽象出一条DD接口供server层和innnodb层公用。在DD的基础上,引入了DDL的原子性特性,确保DDL操作要么全做,要么全不做的能力。实现这一套逻辑的关键点在于将ddl涉及到的修改,包括dd数据字典修改,引擎层的修改(创建文件,初始化tablespace,创建btree等)和写binlog作为一个“事务”,利用事务的原子性特点来保证ddl操作的原子性。

2.DDL原子性实现原理

实现原子性的关键在于确保dd数据字典修改,引擎层的修改和写binlog是一个事务。Mysql已有的XA事务机制能有效保证DML事务和binlog的一致性。而ddl数据字典也是通过innodb引擎存储,因此做到dd数据字典修改和binlog一致是容易的;那么还需要解决的一个问题是,dd数据字典和引擎层修改的一致性,引擎层的修改并不都是记redo的,比如创建文件,rename文件名,或者清理cache等,无法简单地通过XA机制解决问题,因此8.0还引入了一套DDL_LOG机制。具体而言,就是将不记redo的一些操作,通过记日志的方式写入到ddl_log表中,而这个表是innodb引擎表,通过保证ddl_log数据与dd数据字典修改达成一致,而最终解决dd数据字典修改,引擎层的修改和写binlog一致性问题。

3.DD引入前后对比

MySQL8.0 DDL原子性特性及实现原理 ​

MySQL8.0 DDL原子性特性及实现原理 ​

4.DDL操作实现逻辑

引入ddl_log表后,ddl操作在原有的基础上有一些变化,主要有两点,一点是在执行ddl的过程中,会记录ddl操作到ddl_log表中;另一点是新增了一个post_ddl阶段,ddl事务提交后,做一些ddl的收尾动作,比如drop-table,真正的删除物理文件是在post-ddl阶段做的。post-ddl做的事情主要就是,读取ddl-log内容,进行回放执行。ddl操作类型如下:


enum class Log_Type : uint32_t {

SMALLEST_LOG = 1,

FREE_TREE_LOG = 1,

DELETE_SPACE_LOG,

RENAME_SPACE_LOG,

DROP_LOG,

RENAME_TABLE_LOG,

REMOVE_CACHE_LOG,

ALTER_ENCRYPT_TABLESPACE_LOG,

BIGGEST_LOG = ALTER_ENCRYPT_TABLESPACE_LOG
};
您可能感兴趣的文档:

--结束END--

本文标题: MySQL8.0 DDL原子性特性及实现原理

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL8.0 DDL原子性特性及实现原理
    1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义...
    99+
    2022-10-18
  • MySQL8.0新特性——支持原子DDL语句
       MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即...
    99+
    2022-10-18
  • 解析MySQL8.0新特性——事务性数据字典与原子DDL
    前言 事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据字典是前提,原子DDL是一个重要应用场景。 MySQL 8.0之前的数据字...
    99+
    2022-05-27
    MySQL 事务性数据字典 MySQL 原子DDL MySQL8.0 新特性
  • MySQL8.0新特性之支持原子DDL语句的示例分析
    小编给大家分享一下MySQL8.0新特性之支持原子DDL语句的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL ...
    99+
    2022-10-18
  • 新特性解读 | MySQL 8.0 之原子 DDL
    作者:杨奇龙 网名“北在南方”,8 年 DBA 老兵,目前任职于杭州有赞科技 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。 本文来源:转载自公众号-yangyidba *爱可生开源社区出品,原创内容未经...
    99+
    2014-05-18
    新特性解读 | MySQL 8.0 之原子 DDL
  • 怎么在MySQL8.0中实现一个原子DDL语法
    怎么在MySQL8.0中实现一个原子DDL语法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。01 原子DDL介绍    原子DDL语句将数据字典更...
    99+
    2023-06-14
  • MySQL 8.0的原子DDL非事务性DDL,绝大多数情况下,原子DDL仍旧是一个然并卵的特性
    首先声明一下:MySQL 8.0之后,依旧不支持DDL事务。原子性DDL与其说是一个MySQL8.0下的新特性,倒是不如说是修复了MySQL5.7 DDL 执行失败造成的bug。 MySQL 8.0 前后表的物理文件差异在mysq...
    99+
    2018-02-20
    MySQL 8.0的原子DDL非事务性DDL,绝大多数情况下,原子DDL仍旧是一个然并卵的特性
  • MySql事务原理介绍及特性
    目录1. 什么是事务2. 事务是如何做到同时成功失败3. 如何提交回滚事务1. mysql 中默认的事务行为是怎样的2. 回滚事务3. 提交事务4. 事务的4个特性5. 事务的隔离性1. 什么是事务 一个事务就是一个完整...
    99+
    2022-09-16
  • Chapter 2.PHP8.1 新特性fiber及原理浅析
    欢迎来到「我是真的狗杂谈世界」,关注不迷路 前言 很早就听说PHP8.1出了Fiber(又称纤程),但一直也没时间捣鼓它, 正好前段时间在整理PHP的新特性/功能,想看看有没有什么可以给日常开发带来便...
    99+
    2023-09-01
    php 开发语言
  • mysql事务特性的实现原理是什么
    MySQL事务特性的实现原理是通过使用日志和锁机制来保证事务的原子性、一致性、隔离性和持久性。1. 原子性:MySQL使用redo日...
    99+
    2023-10-12
    mysql
  • go原子操作的方式及实现原理是什么
    今天小编给大家分享一下go原子操作的方式及实现原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是原子操作?原子操...
    99+
    2023-07-06
  • MySQL事务之ACID特性的实现原理是什么
    小编给大家分享一下MySQL事务之ACID特性的实现原理是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段...
    99+
    2022-10-18
  • MySQL中的事务特性和实现原理是什么
    这篇“MySQL中的事务特性和实现原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-02-13
    mysql
  • go 原子操作的方式及实现原理全面深入解析
    目录什么是原子操作?原子操作的使用场景是什么?原子操作是怎么实现的?x86 LOCK 的时候发生了什么原子操作有什么特征?go 里面有哪些原子操作?增减(Add)比较并交换(Comp...
    99+
    2023-05-16
    go 原子操作方式原理 go 原子操作
  • 浅谈线性表的原理及简单实现方法
    一、线性表原理:零个或多个同类数据元素的有限序列原理图:特点 :有序性有限性同类型元素第一个元素无前驱,最后一个元素无后继,中间的元素有一个前驱并且有一个后继线性表是一种逻辑上的数据结构,在物理上一般有两种实现 顺序实现和链表实现二、基于数...
    99+
    2023-05-31
    线性表
  • 详解高性能缓存Caffeine原理及实战
    目录一、简介二、Caffeine 原理2.1、淘汰算法2.1.1、常见算法2.1.2、W-TinyLFU 算法2.2、高性能读写2.2.1、读缓冲2.2.2、写缓冲三、Caffein...
    99+
    2022-11-12
  • MySQL8.0新特性及项目实战(安装配置、版本升级、管理入门)
    MySQL8.0新特性及项目实战(安装配置、版本升级、管理入门)视频教程学习地址    http://edu.51cto.com/course/14566.html Oracl...
    99+
    2022-10-18
  • HashMap原理及手写实现部分区块链特征
    目录写在前面JDK7和JDK8中的HashMap正文写在前面 最近有很多的粉丝私信我,说自己在面试的时候,老是被人问HashMap的原理,但是在实际的工作中,也只是使用HashMap...
    99+
    2022-11-13
  • Vue3 计算属性computed的实现原理
    目录computed 的函数签名computed 的实现ComputedRefImpl 类总结版本:3.2.31 computed 的函数签名 // packages/reactiv...
    99+
    2022-11-13
    Vue3 计算属性 Vue3 种computed实现原理
  • 一致性读实现原理是什么
    本篇内容主要讲解“一致性读实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一致性读实现原理是什么”吧!MySQL中的事务事务在RDBMS系统中概念基...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作