MySQL · 内核特性 · Automatic connection failover

简介 从MySQL 8.0.22开始,官方对主备复制链路的容错性做了进一步的增强,支持了一个称为“Automatic Asynchronous Replication connection failover”的自动连接容错功能。该功能在两个版本中分两个阶段进行了实现,具体来说: 在MySQL 8.0.22版本上,我们可以为某个异步复制链路配置多个备用的源端,若当前使用的源端和目的端之间的连接不可用,如源节点宕机或者网络故障导致IO线程报错,备库能够自动地尝试连接备用的

MySQL · 源码阅读 · 白话Online DDL

发展历程 MySQL Online DDL 功能从 5.6 版本开始正式引入,发展到现在的 8.0 版本,经历了多次的调整和完善。本文主要就 Online DDL 的发展过程,以及各版本的区别进行总结。其实早在 MySQL 5.5 版本中就加入了 INPLACE DDL 方式,但是因为实现的问题,依然会阻塞 INSERT、UPDATE、DELETE 操作,这也是 MySQL 早期版本长期被吐槽的原因之一。 在 MySQL 5.6 中,官方开始支持更多的 ALTER TAB

DataBase · 引擎特性 · OLAP/HTAP列式存储引擎概述

本文简要从存储结构、索引结构和数据更新方式等几个方面介绍当前比较热门的OLAT/HATP列式存储引擎,包括TiFlash、AnalyticDB、ClickHouse和SqlServer。 TiFlash 存储结构和索引结构 TiFlash的列式存储引擎Delta Tree参考了B+ Tree和LSM Tree的设计思想。Delta Tree将数据按照主键划分为Range分区,每个分区称为Segment。Segment通过B+ Tree作为索引。也就是说,B+ Tree索引

PolarDB · 引擎特性 · 物理复制热点页优化

PolarDB采用物理复制的方式来实现朱从节点间的数据同步,区别于Mysql官方的binlog复制,PolarDB在主从节点间通过传输Redo Log,并在从节点上对Redo Log进行Replay,从而完成用户在主节点上写入或更新的数据,在从节点上能被完整的访问到。但物理复制的架构本身也会带来一些新的挑战和约束,具体笔者将在本篇文章详细道来。 背景 物理复制是PolarDB的核心技术之一,结合底层分布式文件系统PolarStore,构建起了物理复制+共享存储的新一代云原

PolarDB · 最佳实践 · 并行查询优化器的应用实践

PolarDB MySQL8.0重磅推出了并行查询引擎,充分利用硬件多核多CPU的优势,基于COST自动选择并行查询计划,显著提升了查询性能,查询耗时呈>指数级下降,体现了自研PolarDB数据库极高的性价比。 下面我们以TPCH的query-10为例,详细解析并行查询引擎对复杂查询的优化能力,为用户指引一条并行执行的性能高速公路。 Q10的SQL如下所示: SELECT c_custkey, c_name, sum(l_extendedprice *

MySQL · 源码阅读 · Decimal 的实现方法

背景 数字运算在数据库中是很常见的需求, 例如计算数量、重量、价格等, 为了满足各种需求, 数据库系统通常支持精准的数字类型和近似的数字类型. 精准的数字类型包含 int, decimal 等, 这些类型在计算过程中小数点位置是固定的, 其结果和行为比较可预测. 当涉及钱时, 这个问题尤其重要, 因此部分数据库实现了专门的 money 类型. 近似的数字类型包含 float, double 等, 这些数字的精度是浮动的. 本文将简要介绍 decimal 类型的数据结构和计算

MySQL · 引擎特性 · InnoDB Faster truncate/drop table space

问题 在InnoDB 现有的版本里面, 如果一个table space 被truncated 或者 drop 的时候, 比如有一个连接创建了临时表, 连接断开以后, 对应的临时表都需要进行drop 操作. InnoDB 是需要将该tablespace 对应的所有的page 从LRU/FLUSH list 中删除, 如果没有这个操作, 新的table 的table spaceid 如果重复的话, 那么就可能访问到脏数据. 为了将这些page 删除, 那么就需要全部遍历LR

PolarDB · 优化改进 · 使用窗口聚合函数来将子查询解关联

简介 关联子查询是大多数现代关系型数据库都支持的一类SQL,这种形式的SQL具有很强的语义表达能力,能够让用户在子查询中直接引用到外层查询中的列,来计算子查询的结果。关联子查询在决策支持系统和在线分析处理的场景中被广泛使用,例如在决策支持基准TPC-H的22个查询中,有1/3的查询都包含关联子查询。因此能够高效地执行关联子查询是衡量一个数据库是否先进的标准。 子查询解关联是数据库对关联子查询进行优化的一个重要手段。在没有解关联时,子查询是按照语义进行迭代式执行,即外层查询每

MySQL · 源码阅读 · X-plugin的传输协议

本文主要通过阅读MySQL8.0源码来介绍X plugin如何通过X protocol与客户端建立连接 背景 MySQL5.7发布时自带了一个MySQL X插件,启用插件后,可以通过X protocol提供一个类似于MongoDB的服务。这个插件是默认加载的,show plugins可以看到。 mysql>SHOW PLUGINS; +---------------------------------+----------+--------------------+