MySQL · 引擎特性 · InnoDB unique check 的问题

unique secondary index 是客户经常使用的场景, 用来保证index 上的record 的唯一性. 但是大量的客户在使用unique secondary index 以后会发现偶尔会有死锁或者不应该锁等待的时候却发生锁等待的情况. 也有很多客户来问我们这个问题. 理论上PolarDB 默认使用read-commit isolation level, 在rc 隔离级别下绝大部分场景不会使用GAP lock, 因此死锁的概率应该是比较低的. 这又是为什么呢

MySQL · 引擎特性 · InnoDB Physiological logging 原理分析

为什么InnoDB 的redo log 是Physiological logging? 有一个存储的同学来问, 如果redo log 是纯physical log 的话, 那么就可以省去double write buffer 的开销, 保证每一次修改都是在4kb以内(由操作系统保证4kb以内的原子操作), 那么就不存在应用redo 到不新不旧的page 上的问题, 就不需要double write buffer. 目前主要有两种Logical logging and Ph

MySQL · 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 S锁以支持并发DML操作。 MySQL 8.0版本对DDL的进行了重

MySQL · 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 S锁以支持并发DML操作。 MySQL 8.0版本对DDL的进行了重

MySQL · 源码阅读 · 非阻塞异步C API简介

概述 MySQL从8.0.16版本引入了非阻塞的异步C API接口,可以与 MySQL服务器进行非阻塞通信。原先的同步阻塞式接口在发起某个调用后,客户端必须等待这个调用返回结果才能继续往下执行,而异步非阻塞接口则不需要等待调用返回结果,在发起调用后,客户端可以继续执行后续操作,服务端通过某种反馈机制通知客户端调用是否完成,因此能够提高系统的整体响应速度和吞吐。 MySQL C API接口 无论使用阻塞接口还是非阻塞接口,MySQL client在请求DB查询的时候,通常需要经

MySQL · 源码阅读 · 非阻塞异步C API简介

概述 MySQL从8.0.16版本引入了非阻塞的异步C API接口,可以与 MySQL服务器进行非阻塞通信。原先的同步阻塞式接口在发起某个调用后,客户端必须等待这个调用返回结果才能继续往下执行,而异步非阻塞接口则不需要等待调用返回结果,在发起调用后,客户端可以继续执行后续操作,服务端通过某种反馈机制通知客户端调用是否完成,因此能够提高系统的整体响应速度和吞吐。 MySQL C API接口 无论使用阻塞接口还是非阻塞接口,MySQL client在请求DB查询的时候,通常需要经

MySQL · 源码阅读 · mysqld_safe的代码考古

Part 1 mysqld_safe是一个跟随mysql安装包一起发布的bash脚本,源码目录在scripts/mysqld_safe.sh。核心功能就是启动mysqld,在mysqld进程故障(比如crash)之后,自动探测并重启实例。参考官方文档的说明,mysqld_safe是在Linux部署mysql数据库的推荐方法,执行命令大致如下: mysqld_safe --defaults-file=file_name <options> <mysqld_

MySQL · 源码阅读 · mysqld_safe的代码考古

Part 1 mysqld_safe是一个跟随mysql安装包一起发布的bash脚本,源码目录在scripts/mysqld_safe.sh。核心功能就是启动mysqld,在mysqld进程故障(比如crash)之后,自动探测并重启实例。参考官方文档的说明,mysqld_safe是在Linux部署mysql数据库的推荐方法,执行命令大致如下: mysqld_safe --defaults-file=file_name &lt;options&gt; &am

MariaDB · 功能特性 · 无DDL延迟的主备复制

背景介绍 基于Binlog主备复制是MySQL社区最广泛采用的高可用架构。长期以来,MySQL引入了很多特性来优化备库的复制延迟,比如多线程并行回放、LOGICAL_CLOCK并行复制、WRITESET并行复制。但是DDL延迟一直是MySQL主备复制的顽疾。 这个问题可以参考下图的时间轴理解。DDL语句一般都非常耗时,目前MySQL常用的DDL都支持Online模式,主库执行过程中是不干扰正常读写请求的。不过,这在备库是完全不一样的故事。主库DDL执行成功后会向Binlo

MariaDB · 功能特性 · 无DDL延迟的主备复制

背景介绍 基于Binlog主备复制是MySQL社区最广泛采用的高可用架构。长期以来,MySQL引入了很多特性来优化备库的复制延迟,比如多线程并行回放、LOGICAL_CLOCK并行复制、WRITESET并行复制。但是DDL延迟一直是MySQL主备复制的顽疾。 这个问题可以参考下图的时间轴理解。DDL语句一般都非常耗时,目前MySQL常用的DDL都支持Online模式,主库执行过程中是不干扰正常读写请求的。不过,这在备库是完全不一样的故事。主库DDL执行成功后会向Binlo