PolarDB MySQL · 持续补强的全局二级索引

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 继我们去年年底发布内核原生的全局二级索引([用户文档](https://help.aliyun.com/document_detail/461220.html))以来,陆续有客户过来咨询和使用。目前已经有客户在生产实例上大规模使用全局二级索引(Global Secondary Index,下文用GSI代替),大大优化了分区表场景下不含分区键的Query/DML性能以及支持不含分区键的Unique

继我们去年年底发布内核原生的全局二级索引(用户文档)以来,陆续有客户过来咨询和使用。目前已经有客户在生产实例上大规模使用全局二级索引(Global Secondary Index,下文用GSI代替),大大优化了分区表场景下不含分区键的Query/DML性能以及支持不含分区键的Unique Key能力。阅读我们文章的读者,大部分都是数据库资深使用者和开发人员,应该能体会到这样一个从无到有的功能,在保持MySQL 100%兼容的情况下持续演进,存在大量的工程问题需要解决。因此,在全局二级索引上线之后的这段时间,我们不断补强它的各方面能力,本文将介绍PolarDB内核团队在全局二级索引方面的持续演进工作,并简单总结了目前用户的使用经验。

传统分布式数据库/中间件的平替方案

在需要使用GSI的客户里,我们发现除了本身MySQL分区表的客户以外,有多个客户是从传统的分布式数据库/分布式中间件迁移过来的。这部分客户选择迁移PolarDB MySQL的原因非常清晰:

  • 分布式数据库的易用性/稳定性问题,MySQL的流行很大原因来自于它的简单易用。虽然很多分布式数据库都是宣称MySQL/PG兼容,但是很多情况下SQL的表现和性能,与MYSQL大相径庭。此外,使用者往往需要修改业务来完成数据库的适配兼容,甚至业务上频繁踩坑后才能有所感知。进一步的,业务往往需要感知数据库分库分表的方式,从而尽可能减少跨机交互的开销,这非常考验使用者的学习成本和学习能力;
  • 分布式数据库昂贵的成本问题,为了提升scale-out能力,分布式数据库往往采用Share-Nothing的架构,有专门的计算节点/存储节点/元数据节点等等,存在大量的跨机交互。然而,这种设计并不是free lunch,在达到相同性能的情况下,分布式数据库往往需要消耗更多的硬件资源,导致更高的数据库成本。
  • PolarDB MySQL强大的计算/存储能力,已经能支撑远超传统MySQL数据处理规模的业务。

    PolarDB MySQL演进到今天,支持一写多读(最多15个读节点)和多主(最多16个写节点)形态,每个节点最大高达88cores(最新的高性能处理器),存储支持高达100TB的规模(多副本自带修复能力)。在如此强的计算/存储能力场景下,PolarDB MySQL 100%兼容MySQL,又通过Share-Storage的方式减少了大量的跨机交互成本,在成本、性能、易用性之间都做到了极致。

    很多传统分布式数据库的客户,往往对传统MySQL只能处理千万行规模的表、本地盘停留在TB级别(难以备份和还原)的印象非常深刻,但这也是PolarDB MySQL数年来一直在优化的问题。我们发现,这些从传统分布式数据库迁移过来的客户,在测试了PolarDB强大的处理(16*88cores的读写能力)和百TB规模的存储能力,在评估了效率、易用性、成本、满足业务负载等多个因素后,都选择迁移到了PolarDB MySQL。

用户迁移到了PolarDB MySQL后,根据业务的负载情况和表结构特征,可以选择单表或者分区表的方式。不管是单表还是分区表,我们都提供和MySQL单表/分区表完全一致的使用方式。PolarDB之前有一系列针对大表场景做优化的文章(单表/大表优化),读者可以自行查阅。本文主要侧重PolarDB MySQL在全局二级索引方面的情况,也就是分区表加强方面,读者在阅读之前可以阅读以下文章:分区表增强全局二级索引,对PolarDB分区表&全局索引有更深入的理解。

针对全局二级索引的DDL增强

  • 并行创建全局二级索引

PolarDB早在3年前就已经推出了并行DDL(链接)能力。不管是在稳定性还是性能上,PolarDB并行DDL早已经历了大量线上实例的考验和打磨。我们基于PolarDB的并行DDL能力,构建了并行创建GSI的能力。相比于单线程创建GSI,并行创建二级索引最高有15-20倍的性能提升。

  • Online创建全局二级索引

与局部索引的创建一样,在全局二级索引的创建过程中,不会阻塞住并发的DML操作。

  • 支持带全局二级索引的表做秒级加字段
    大量用户反馈加字段是刚性需求,老板本在有全局二级索引的情况下不支持instant add column,新版本将会支持instant add column,即加字段瞬间就能完成。
  • 支持带全局二级索引的表做Interval Add Partition / Partition MDL
    分区表往往需要根据时间等字段的递增增加分区。带全局二级索引的表,支持interval add partition,并且在增加分区时仅持有新分区的MDL锁,不堵塞其它分区的DML操作。
  • 支持分区老化等场景下异步重构GSI(WIP)
    PolarDB分区表支持通过分区老化等操作,将一些不再高频访问的分区,存储到冷存储中来降低成本。在老版本中,带GSI的分区表在做分区老化等操作时,需要重建整个GSI,这导致分区老化操作的延迟大大增加。
    为了优化这一操作的体验,我们正在开发异步重构GSI的能力,当分区表做了分区老化等操作时,PolarDB会在后台清理掉这些老化分区的GSI数据,在保证分区老化等操作延迟不变的同时,让用户几乎感知不到GSI的重构操作,目前这一功能还在实现中(WIP)。

针对全局二级索引的其它方面增强

  • 优化器方面增强
    原本优化器不感知全局索引的存在,这块同样做了大量工作,即优化器自动根据全局索引和局部索引的统计信息,根据SQL生成最优的执行计划。
  • 支持带全局二级索引的表做库表恢复
    在部分情况下,用户需要将特定的表恢复到具体的时间点,新版本将会支持带全局索引的表恢复到任意一个时间点。然而,由于恢复出来的表的table id已经发生变化,而全局二级索引上存储了老表的table id,所以恢复出来的表需要重建GSI。这一块可以通过并行创建全局二级索引来加速。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
存储 自然语言处理 关系型数据库
MySQL高级篇——索引的创建与设计原则
索引的分类与使用、MySQL8.0索引新特性、适合创建索引的情况、不适合创建索引的情况
MySQL高级篇——索引的创建与设计原则
|
6天前
|
存储 SQL 关系型数据库
MySQL高级篇——索引失效的11种情况
索引优化思路、要尽量满足全值匹配、最佳左前缀法则、主键插入顺序尽量自增、计算、函数导致索引失效、类型转换(手动或自动)导致索引失效、范围条件右边的列索引失效、不等于符号导致索引失效、is not null、not like无法使用索引、左模糊查询导致索引失效、“OR”前后存在非索引列,导致索引失效、不同字符集导致索引失败,建议utf8mb4
MySQL高级篇——索引失效的11种情况
|
15天前
|
存储 关系型数据库 MySQL
MySQL基础:索引
MySQL中的索引是一种数据结构,能大幅提升数据库查询效率和减少I/O成本,类似于书的目录帮助快速定位内容。其优势包括提高检索效率和降低排序成本,但会占用空间并影响更新表的效率。鉴于查询远多于更新,索引仍被推荐使用。索引分为多种类型,如B+树和哈希索引,其中B+树因其较低的高度和稳定的查询开销成为常用选择。创建和删除索引需谨慎,以免影响性能。
40 4
MySQL基础:索引
|
6天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
6天前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
6天前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
26天前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
54 5
|
29天前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
16 1
|
1月前
|
缓存 关系型数据库 MySQL
在Linux中,如何优化MySQL性能,包括索引优化和查询分析?
在Linux中,如何优化MySQL性能,包括索引优化和查询分析?
|
1月前
|
SQL 关系型数据库 MySQL
MySQL索引你用对了吗?
本文从遇到的问题出发,分析了tddl优化器、MySQL索引、分表拆分键的选择相关知识。

热门文章

最新文章