PolarDB PostgreSQL 基于代价的查询变换框架 (CBQT)
前言 查询变换是指基于等价规则,将一个查询语句改写成语义上等价的另一种形式。例如社区 PostgreSQL 中常用的“子查询上拉”、“外连接消除”、“表达式预处理”、“消除无用连接”、“谓词下推”等都是基于规则的查询变换,并且经过这些查询变换后的计划一定是更优的,因此 PostgreSQL 一定会尝试应用这些变换。 但一些查询变换,如“子连接下推”、“OR 转 UNION...
View ArticleRange-Prefix Skip Scan介绍
背景 在 MySQL 中,当我们访问一个表时,有两种主要的数据访问方式:全表扫描(Full Table Scan)和索引扫描。索引扫描又可以分为全索引扫描(Index Scan)和范围索引扫描(Range Scan)。一般而言,范围索引扫描的效率高于全索引扫描,而全索引扫描的效率又高于全表扫描。当查询的 WHERE...
View ArticlePostgreSQL · 一文搞懂PostgreSQL逻辑复制的全部原理
什么是逻辑复制? 一句话概括,逻辑复制是相对于物理复制的概念,物理复制是把对文件块的改动发送到下游,逻辑复制是把数据的改动(一般是修改前/修改后的行)发送到下游。 逻辑复制架构 逻辑复制的总架构,包含存量数据的复制、增量数据的复制。 图中 1~3 表示存量数据的复制过程。在CREATE SUBSCRIPTION时,可以请求全量的数据。发布端接收和回复COPY数据。...
View ArticlePolarDB 基于共享存储的 Binlog 一写多读
在基于共享存储的 PolarDB 一写多读架构中,只读节点(RO)具备完整的 Binlog 获取能力,实现了计算节点的功能隔离,显著提升了读带宽的上限。 因跨部门业务隔离、权限控制及性能考量,许多大型客户选择创建独立 RO 节点,并赋予大数据团队该节点的只读权限,用于通过 CDC(Change Data Capture)同步数据至分析系统。这一实践已成为客户接入 MySQL...
View Article庖丁解InnoDB之B+Tree
InnoDB采用B+Tree来维护数据,处于非常核心的位置,可以说InnoDB中最重要的并发控制及故障恢复都是围绕着B+Tree来实现的。B+Tree本身是非常基础且成熟的数据结构,但在InnoDB这样一个成熟的工业产品里,面对的是复杂的用户场景,多样的需求,高性能高稳定的要求,以及长达几十年的代码积累,除此之外,InnoDB中的B+Tree在实现上并没有一个清晰的接口分层,这些都让这部分的代码显得...
View Article再演进,更全面、更极致的 PolarIndex 2.0
索引模块是数据库管理系统的核心组件,其设计直接决定了数据库数据操作的性能与效率。如何构建高效高并发的索引结构,始终是数据库领域的研究重点。作为一款先进的云原生数据库,阿里云PolarDB也不断的在索引高并发优化技术上深耕。基于Latching coupling的设计理念,PolarDB实现了PolarIndex 1.0版本:将 SMO...
View Article窗口函数Frame优化思想
窗口函数Frame优化思想 背景 MySQL从8.0开始支持窗口函数(Window Functions),作用是计算一组聚合行的结果。其特点是可以同时具有分组和排序功能,且不改变原表行数,主要应用于数据分析场景。 本文将介绍下窗口函数Frame子句的优化思想,首先看下窗口函数示例: SELECT SUM(c1) OVER (PARTITION BY c2 ORDER BY c3 ROWS...
View Article兼顾高性能 & 高可用:持续演进的 PolarDB-MySQL 存储优化技术
背景 MYSQL是全球最流行的数据库之一,开源易用的特点成为数据库初学者和开发者的选择。许多用户能够自行部署和管理本地 MySQL 服务,但随着业务发展不可避免会遇到了本地部署数据库的性能瓶颈,从而希望MySQL具有更高的性能、可用性和可扩展性,但是受到自有环境的物理限制难以达成。...
View ArticlePolarDB B-tree 并发控制技术演进
作为一款先进的云原生数据库,PolarDB 通过存算分离架构突破传统数据库性能边界的同时,也不断地在索引高并发优化技术上深耕,推出了 PolarIndex 一系列索引优化特性:B-tree 细粒度并发控制、轻量化索引压缩、溢出页预分配等,相关技术参考这篇月报的介绍: 再演进,更全面、更极致的 PolarIndex 2.0 。本文聚焦 PolarDB 的 InnoDB 存储引擎核心数据结构...
View Article