MariaDB · 功能特性 · 无DDL延迟的主备复制
背景介绍基于Binlog主备复制是MySQL社区最广泛采用的高可用架构。长期以来,MySQL引入了很多特性来优化备库的复制延迟,比如多线程并行回放、LOGICAL_CLOCK并行复制、WRITESET并行复制。但是DDL延迟一直是MySQL主备复制的顽疾。这个问题可以参考下图的时间轴理解。DDL语句一般都非常耗时,目前MySQL常用的DDL都支持Online模式,主库执行过程中是不干扰正常读写请求的...
View ArticleMySQL · 源码阅读 · mysqld_safe的代码考古
Part 1mysqld_safe是一个跟随mysql安装包一起发布的bash脚本,源码目录在scripts/mysqld_safe.sh。核心功能就是启动mysqld,在mysqld进程故障(比如crash)之后,自动探测并重启实例。参考官方文档的说明,mysqld_safe是在Linux部署mysql数据库的推荐方法,执行命令大致如下:mysqld_safe...
View ArticleMySQL · 源码阅读 · 非阻塞异步C API简介
概述MySQL从8.0.16版本引入了非阻塞的异步C API接口,可以与 MySQL服务器进行非阻塞通信。原先的同步阻塞式接口在发起某个调用后,客户端必须等待这个调用返回结果才能继续往下执行,而异步非阻塞接口则不需要等待调用返回结果,在发起调用后,客户端可以继续执行后续操作,服务端通过某种反馈机制通知客户端调用是否完成,因此能够提高系统的整体响应速度和吞吐。MySQL C...
View ArticleMySQL · InnoDB · Instant DDL扩展
概述DDL(Data Definition Language)定义了数据库内部对象(库、表、列等)上的操作语义。在MySQL中,根据是否阻塞DML,DDL可分为Copy DDL和Online DDL。其中Copy DDL在执行过程全程持有表级MDL X锁,禁止了其他并发DML操作;而从5.6版本开始引入了Online DDL,即只在元数据操作阶段持有表级MDL X锁,而其他数据操作阶段降级为MDL...
View ArticleMySQL · 引擎特性 · InnoDB 事务锁系统简介
为什么InnoDB 的redo log 是Physiological logging?有一个存储的同学来问, 如果redo log 是纯physical log 的话, 那么就可以省去double write buffer 的开销, 保证每一次修改都是在4kb以内(由操作系统保证4kb以内的原子操作), 那么就不存在应用redo 到不新不旧的page 上的问题, 就不需要double write...
View ArticleMySQL · 引擎特性 · InnoDB unique check 的问题
unique secondary index 是客户经常使用的场景, 用来保证index 上的record 的唯一性. 但是大量的客户在使用unique secondary index 以后会发现偶尔会有死锁或者不应该锁等待的时候却发生锁等待的情况. 也有很多客户来问我们这个问题.理论上PolarDB 默认使用read-commit isolation level, 在rc...
View ArticleInnoDB · 引擎特性 · LOB 物理结构
InnoDB LOB 物理结构在 InnoDB 引擎中,对于 VARCHAR、VARBINARY、BLOB、TEXT 这类可变长字段,如果数据长度过长,会将其单独存储在主索引记录之外的 LOB page 上(从主索引所属的 tablespace 上分配),LOB 字段对应的主索引记录中只存储一个定长的 reference 指向它,而二级索引中的记录不会关联外部存储的 LOB 字段。接下来我们主要介绍...
View ArticleMySQL · undolog 的purge
本文基于MySQL Community 8.0.23 Version通过之前 InnoDB之UNDO LOG介绍这篇文章的介绍,我们已经基本明白了undo log的整个生命周期是怎样的,但是其中对于具体undo log是如何purge的没有进行分析更深入的介绍。具体的,只介绍到purge undo log...
View ArticleMySQL · 引擎特性 · PolarDB-CloudJump:优化基于云存储服务的云数据库(发表于VLDB 2022)
云数据库实现计算存储分离,支持计算与存储的独立扩展,其用户还可以享受按量付费等特性。这使得基于云数据库的系统更加高效、灵活。因此,构建并使用云原生数据库的势头愈演愈烈。另一方面,云化存储服务已经是云的标准能力,存储侧提供兼容通用的文件接口,并且不对外暴露持久化、容错处理等复杂细节,其易用性和规模化带来的高性价比使得云存储成为了云上系统的第一选择。在通用云存储服务上构建云数据库,无疑是一种既能够享受规...
View ArticleMySQL · 引擎特性 · 通过performance_schema 定量分析系统瓶颈
目前在系统里面, 我们可以通过perf 或者 pt-pmp 汇总堆栈的方式来查看系统存在的热点, 但是我们仅仅能够知道哪些地方是热点, 却无法定量的说这个热点到底有多热, 这个热点占整个访问请求的百分比是多少? 是10%, 还是40%, 还是80%?所以我们需要一个定量分析系统瓶颈的方法以便于我们进行系统优化.本文通过Performance_schema...
View ArticleMySQL · 源码阅读 · RAND 表达式
三种形式RAND 表达式有以下三种形式:RAND(非常量表达式),此时 RAND 的值仅和表达式的计算值相关,与其所在的位置无关RAND(常量),每次查询都相同RAND(),每次查询都不相同,这种与通常概念上的随机比较接近我们通过一些例子来实际看看 RAND 的结果:第一种形式 RAND(非常量表达式)create table t1(c1 int, c2 varchar(10)) engine...
View ArticleMySQL中的HyperGraph优化器
问题定义Join graph为了应用经典的图算法,我们需要通过join构建出一张图,该图的定义为join语句中的每一个table都可以作为一个节点join语句中的每一个predicate都可以作为一条边Join tree在经典的volcano模型中,每个query 会转成一颗树去执行,而join 部分也会转为其中的子树。不同的join tree对应不同的执行顺序,经典的join...
View ArticleMYSQL·分区表特性·一致性哈希算法应用
本文将结合MySQL分区表功能重点介绍一致性哈希算法以及其他一些哈希算法的特性和在分区表中的使用。分区表介绍分区表是数据库根据一定的分区规则,把一个表划分为多个更小的、更容易管理的子数据集合。 数据库创建示例:CREATE TABLE test (id INT) PARTITION BY HASH (id) PARTITIONS 1000;...
View ArticleMySQL · 源码分析 · Row log分析
引言早期的MySQL仅支持copy模式的DDL。在MySQL 5.5中,引入了inplace算法,可以将部分DDL操作交给引擎层进行处理,但是在进行DDL期间,依旧会阻塞DML操作。在5.6中,部分inplace DDL操作可以采用online算法。该算法允许用户在进行DDL操作过程中,并行的执行写入操作。有关上述三种DDL的差异及主要特点,可以参照文末的扩展阅读部分。以add...
View ArticleMySQL · 源码阅读 · 数据库的扫描方法
引言关于存储引擎的介绍有很多,基于HEAP的传统存储引擎,以及基于聚簇索引的Innodb引擎等,但优化器如何充分利用存储引擎的特点来实现快速高效的扫描,从而以最小的代价得到用户所需要的结果,是一个非常复杂过程。为了了解优化器是如何运作的,首先我们要了解每一种扫描方式的特点,下面我们以MySQL为例,就一些常见的表扫描方式进行讨论。全表扫描MySQL的full table...
View ArticleMariaDB · 功能特性 · 无DDL延迟的主备复制
背景介绍基于Binlog主备复制是MySQL社区最广泛采用的高可用架构。长期以来,MySQL引入了很多特性来优化备库的复制延迟,比如多线程并行回放、LOGICAL_CLOCK并行复制、WRITESET并行复制。但是DDL延迟一直是MySQL主备复制的顽疾。这个问题可以参考下图的时间轴理解。DDL语句一般都非常耗时,目前MySQL常用的DDL都支持Online模式,主库执行过程中是不干扰正常读写请求的...
View ArticleMySQL · 源码阅读 · mysqld_safe的代码考古
Part 1mysqld_safe是一个跟随mysql安装包一起发布的bash脚本,源码目录在scripts/mysqld_safe.sh。核心功能就是启动mysqld,在mysqld进程故障(比如crash)之后,自动探测并重启实例。参考官方文档的说明,mysqld_safe是在Linux部署mysql数据库的推荐方法,执行命令大致如下:mysqld_safe...
View ArticleMySQL · 源码阅读 · 非阻塞异步C API简介
概述MySQL从8.0.16版本引入了非阻塞的异步C API接口,可以与 MySQL服务器进行非阻塞通信。原先的同步阻塞式接口在发起某个调用后,客户端必须等待这个调用返回结果才能继续往下执行,而异步非阻塞接口则不需要等待调用返回结果,在发起调用后,客户端可以继续执行后续操作,服务端通过某种反馈机制通知客户端调用是否完成,因此能够提高系统的整体响应速度和吞吐。MySQL C...
View ArticlePolarDB ·性能大赛·云原生共享内存数据库性能优化
第四届全球数据库大赛,瓜分40万奖金池,只等你来!各赛道TOP10都可获得现金奖励“云原生共享内存数据库性能优化”赛道,邀您提交评测啦!早鸟活动说明1、即日起–7月29日,前60名报名【云原生共享内存数据库性能优化】赛道、提交有效代码并成功出分的参赛队伍,均可获赠 天池定制款笔记本一件 或 阿里云数据库定制款帆布包一个,先到先得!...
View ArticleMySQL · 行业洞察 · 为什么游戏行业喜欢用PolarDB
游戏行业痛点在我看来, 不同行业对数据库使用有巨大的差别. 比如游戏行业没有复杂的事务交易场景, 他有一个非常大的blob 字段用于存储角色的装备信息, 那么大Blob 字段的更新就会成为数据库的瓶颈, 比如在线教育行业需要有抢课的需求, 因此会有热点行更新的场景, 对热点行如何处理会成为数据库的瓶颈, 比如SaaS 行业, 每一个客户有一个Database, 因此会有非常多的Table,...
View Article