MySQL · 内核分析 · InnoDB主键约束和唯一约束的实现分析
概述关系数据库通过约束机制来指定插入数据的规则,从而确保数据的完整性和一致性。MySQL的约束主要包括: 主键约束、唯一约束、非空约束以及外键约束。主键约束指定表中的一列或者几列的组合的值在表中不能出现空值和重复值,即唯一的标识一行记录。唯一约束指定表中某一列或多个列不能有相同的两行或者两行以上的数据存在,和主键约束不同,唯一约束允许为NULL,只是只能有一行。...
View ArticleMySQL · 源码阅读 · Window function解析
1 window function 分类 Aggregates: COUNT, SUM, AVG Ranking: RANK, DENSE_RANK, PERCENT_RANK, CUME_DIST, ROW_NUMBER Analytical: NTILE, LEAD, LAG, NTH, FIRST_VALUE, LAST_VALUE 其中标红为额外需要buffer的window函数...
View ArticlePolarDB · 新特性 · 路在脚下, 从BTree 到Polar Index
上一篇文章InnoDB BTree latch 优化历程介绍了 InnoDB 的BTree latch 的优化历程, 我们知道在InnoDB 里面, 依然有一个全局的index latch, 由于全局的index latch 存在会导致同一时刻在Btree 中只有一个SMO 能够发生, index latch 依然会成为全局的瓶颈点, 导致在大批量插入场景, 比如TPCC 的场景中, 性能无法提高....
View ArticleMySQL · 内核特性 · 直方图
背景直方图(histogram)是数据库中的一种重要的统计信息,可以描述列中的数据分布情况。MariaDB 在 10.0 版本就实现了这一功能,MySQL 也在 8.0 版本增加了对直方图的支持。 直方图最典型的应用场景是通过估算查询谓词的选择率来帮助优化器选择最优的执行计划。举个简单的例子,考虑以下SQL语句:select * from customer join orders on...
View ArticleMySQL · 性能优化 · Undo Log IO优化
背景目前undo log读取有这么几个方面:旧版本数据读取;purge时扫描undo log record;崩溃恢复时扫描undo log record;大事务回滚。 目前线上关于undo log遇到这样两个case:一个实例在崩溃重启恢复时;由于有一个特别大的活跃事务存在,读取undo log花费了数十小时才恢复。线上发现某些实例的history_list特别长,一直无法降下来;定位发现,undo...
View ArticleMySQL · 源码分析 · Semi-join优化与执行逻辑
Semi-join 语义在MySQL中,Semi-join是专门针对SPJ IN/Exists子查询进行优化的一种join语义,起到了对外层表的过滤作用,通过将相关/非相关subquery unnesting为semi join来充分利用join reordering的灵活性,以期获取最高的执行效率,正因为如此,其实现非常灵活多变,共有4种不同的实现策略。...
View ArticleMySQL · 源码分析 · Range (Min-Max Tree)结构分析
概述条件查询被广泛的使用在SQL查询中,复杂条件是否能在执行过程中被优化,比如恒为true或者false的条件,可以合并的条件。另外,由于索引是MySQL访问数据的基本方式,已经追求更快的访问方式,SARGable这个概念已经被我们遗忘了,因为他已经成为默认必要的方法(Search ARGument...
View ArticleMySQL · 源码分析 · Order By优化逻辑代码分析
概述近期在处理线上问题的时候遇到了一些关于Filesort的问题,在分析问题的过程中对代码进行了一些梳理,在此做一些总结,希望对同学们在学习mysql的代码过程中能有所帮助。以下分析基于Mysql-8.0.24代码。优化阶段涉及的函数:JOIN::optimize_distinct_group_order JOIN::test_skip_sort test_if_order_by_key...
View ArticleMySQL · 功能介绍 · GIS功能介绍
从MySQL4.1开始,MySQL就支持了基本空间数据类型以及一部分的空间对象函数,但是对GIS功能的支持非常有限;随着不断发展,MySQL8对GIS功能的支持已经比较丰富了,本文将基于MySQL8.0.18版本对MySQL的GIS功能进行介绍。PolarDB...
View ArticleMySQL · 源码分析 · 临时表与TempTable存储引擎Allocator
本文基于MySQL Community 8.0.25 Version临时表创建显式创建临时表临时表可使用 CREATE TEMPORARY TABLE语句创建,它仅在当前session中可以使用,session断开时临时表会被自动drop掉。因此开启不同的session时可以使用相同的临时表名。CREATE TEMPORARY TABLE temp_table (id int primary key...
View ArticleMySQL · 最佳实战 · SQL编码转换浅析
背景故事从一次中文乱码事件说起。某用户发现插入的中文数据为乱码,不知道是如何引起。用户想知道问题的根因,确保系统的配置正确,未来不再出现乱码。用户数据表存中文数据的列为字符集为utf8。经过对审计日志的分析,发现乱码数据系插入或更新数据时,数据库连接使用了latin1字符集(set names latin1;)。乱码重现• use test;• drop table if exists t1; •...
View ArticleMySQL · 源码分析 · 详解 Data Dictionary
背景在 MySQL 8.0 之前,Server 层和存储引擎(比如 InnoDB)会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。不同存储引擎之间(比如 InnoDB 和 MyISAM)有着不同的元数据存储形式和位置(.FRM, .PAR, .OPT, .TRN and .TRG...
View ArticlePOLARIS · 引擎分析 · 基于单机数据库扩展的分布式查询处理引擎
引言POLARIS是微软Azure Synapse的分布式查询引擎,由于近来数据的数量与多样性都在极快的增长,相较于传统数仓的ETL再进行分析的步骤,直接面向DataLake的数据分析服务在使用体验上较前者会更好,因此微软开发了POLARIS用于取代Azure的SQL DW,该系统主要一个比较有趣的点是系统的设计大量复用了已有的组件,整个引擎几乎到处都可以看到SQL...
View ArticleMySQL · 源码分析 · 参数解析流程
背景mysql有很多参数,innodb存储引擎也有自己独立的参数,这篇文章分析一下参数解析的流程。代码版本:8.0.13 mysql参数sys_vars.cc 里面定义了很多参数,各种类型都有,这些参数都是sys_var的子类,所有的参数在构造函数里面都会加到all_sys_vars链表中。 在看实际参数之前,我们先学习一下 sys_var类的主要成员变量 class sys_var {...
View ArticleMySQL · 源码分析 · 事务锁调度分析
准备MySQL 8.0.25背景数据库内核月报 InnoDB 事务锁系统简介对 InnoDB 的事务锁系统: record lock 和 table lock 做了具体的介绍, 而 InnoDB 事务 sharded 锁系统优化介绍了 MySQL 官方团队针对 InnoDB 事务锁系统进行的拆分优化. InnoDB 采用 2PL + MVCC 的并发控制方式, 以此来提高读写性能....
View ArticlePolarDB · 引擎特性 · DDL物理复制优化
PolarDB通过存储计算分离架构,实现了主节点和只读节点共享同一份存储数据,既降低了存储成本,又提高了集群的可用性和可靠性。为实现这一架构,PolarDB采用了业界领先的物理复制技术,不仅实现了共享存储架构上主节点和只读节点间的数据一致性,而且减少了Binlog fsync操作带来的I/O开销。InnoDB中的数据是通过B-Tree来维护索引的,然而大部分Slow...
View ArticleMySQL · 源码详解 · mini transaction详解
mtr介绍mini-transaction是mysql内部的对底层page的一个原子操作,保证并发事务操作下以及数据库异常时page中数据的一致性。 mini transaction 的信息保存在结构体 mtr_t 中,结构体成员描述详见前文,其中m_memo和m_log最为重要。本文的代码参照mysql 8.0.23。...
View ArticleMySQL · 引擎特性 · 庖丁解InnoDB之UNDO LOG
Undo Log是InnoDB十分重要的组成部分,它的作用横贯InnoDB中两个最主要的部分,并发控制(Concurrency Control)和故障恢复(Crash Recovery),InnoDB中Undo Log的实现上亦日志亦数据。本文将从其作用、设计思路、记录内容、组织结构,以及各种功能实现等方面,整体介绍InnoDB中的Undo...
View Article