关系型数据库
阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。
RDS MySQL参数time_zone最佳实践
RDS MySQL中,参数time_zone是指实例的当前时区,初始值是'SYSTEM'。本文介绍了在阿里云RDS MySQL中该值的设置的最佳实践
顶会点赞!PolarDB Serverless实现了哪些突破?
云原生的Serverless数据库,正在成为下一个五年的云数据库发展趋势。 近日,在国际数据库顶级会议2021 ACM SIGMOD上,一篇以PolarDB Serverless为主题的论文,被评委会认为指引了下一代数据库服务的发展方向。 这篇题为《PolarDB Serverless: A Cloud Native Database for Disaggregated Data Centers》的论文,介绍了阿里云自研数据库PolarDB基于计算存储分离,实现的最新Serverless技术架构研究进展。 PolarDB Serverless论文的录用,标志着阿里云PolarDB数据库在最新一
一文详解PolarDB披荆斩棘的“秘密武器”
PolarDB由阿里巴巴自主研发的下一代关系型分布式云原生数据库。在兼容传统数据库生态的同时,突破了传统单机硬件的限制,为用户提供大容量,高性能,极致弹性的数据库服务。
分布式系统基本概念--逻辑时钟
本文主要介绍分布式系统的奠基性概念"逻辑时钟". 文章转自原创"https://mp.weixin.qq.com/s/jd205so-j9cCrMrONRgkWA"
mysql index cond push down 索引下推
mysql 索引下推在8.0的代码中进行了重构,目前的逻辑比较清晰。本文对该代码进行相关的分析。本文介绍的代码为mysql-8.0.21版本。
阿里云PolarDB论文入选数据库顶会SIGMOD2021 最新一代架构领先世界
阿里云研发的下一代云原生数据库PolarDB Serverless的论文被ACM SIGMOD录用,标志着阿里云PolarDB数据库在最新一代架构上领先于业界其他云厂商。
深度解析PolarDB的并行查询引擎
PolarDB与开源MySQL及其它类MySQL的产品相比,除了计算与存储分离的先进架构之外,另外一个最核心的技术突破就是开发了其它类MySQL产品没有的并行查询引擎,通过并行查询引擎,PolarDB除了保持自身对OLTP应用的优势之外,还对OLAP的支持能力有了一个质的飞越,遥遥领先于其它类MySQL产品。
MySQL 8.0 Server层最新架构详解
本文基于MySQL 8.0.25源码进行分析和总结。这里MySQL Server层指的是MySQL的优化器、执行器部分。我们对MySQL的理解还建立在5.6和5.7版本的理解之上,更多的是对比PostgreSQL或者传统数据库。然而从MySQL 8.0开始,持续每三个月的迭代和重构工作,使得MySQL Server层的整体架构有了质的飞越。下面来看下MySQL最新的架构。
CockroachDB: The Resilient Geo-Distributed SQL Database
一直以来对CockroachDB(CRDB for short)的设计和实现很感兴趣,最近抽时间研究了下,发现其在技术上还是领先了同类NewSQL产品不少的,个人感觉应该是目前最为先进的类Spanner分布式数据库系统,因此这篇文章会尽可能详细的讨论下其系统的多个方面,重点是事务和一致性相关。 paper中针对的是v.19.2.2版本,不过官方文档中是基于最新的v.21.1.7,两者在描述上有一些冲突的地方,而官方文档中会更为详尽些,因此本文的很多介绍将尽量将paper与官方reference结合,并以reference为准。
从CockroachDB看分布式数据库系统的一致性
最近仔细研究了下CockroachDB的相关文档和paper,感觉在市场上众多的NewSQL分布式数据库系统中,它对于数据的一致性追求应该是最为极致的,由此也回顾了下分布式系统下,所谓的一致性相关概念,由于每次思考起这个东西总感觉有些烧脑,经常会反复走入同一个思维误区,这里感觉记录下自己当前的理解,个人感觉应该是准确的,如果大家看到不对的地方欢迎指正。
Adaptive Execution of Compiled Queries 论文解读
本篇是TUM的内存数据库HyPer针对compile-based执行框架的改进。其中涉及到HyPer的动态编译和并行执行框架 动态编译文章的结尾提到了编译执行系统存在的2个问题,其中之一就是:不可控的编译时间。
Morsel-Driven Parallelism: A NUMA-Aware Query Evaluation Framework for the Many-Core Age 论文解读
这篇paper介绍了TUM的内存数据库系统HyPer中使用的,基于小块数据(morsel)来驱动的并行查询执行框架。用来解决many-cores(NUMA)环境下,分析型查询的scalability问题。
Efficiently Compiling Efficient Query Plans for Modern Hardware 论文解读
这应该是SQL查询编译的一篇经典文章了,作者是著名的Thomas Neumann,主要讲解了TUM的HyPer数据库中对于CodeGen的应用。 在morsel-driven那篇paper 中,介绍了HyPer的整个执行框架,会以task为单位处理一个morsel的数据,而执行的处理逻辑(一个pipeline job)就被编译为一个函数。这篇paper则具体讲如何实现动态编译。
Volcano - An Extensible and Parallel Query Evaluation System 论文解读
前面写了一些关于优化器的文章,现在开个小差,写一些执行器的paper介绍,从这篇开始。 这篇是Graefe的Volcano Project的执行器框架,其概念已被广泛接受和使用,也就是我们最为熟悉的Volcano iterator的执行框架,关于volcano/cascades的优化器介绍
MonetDB/X100: Hyper-Pipelining Query Execution 论文解读
这是关于MonetDB执行引擎的一篇paper,总体分为了2个部分,第一部分主要讲了下modern cpu的工作原理并给出了一个TPC-H Q1的例子,从这部分中我们便可以清晰的看到为什么向量化的执行方式如此有意义。第二部分则主要介绍了MonetDB X/100这个新的向量化执行引擎。这篇paper被引用的极为广泛,启发了后续很多列存数据库在执行引擎上的设计思路。个人感觉第一部分尤其有意义,如果想入门下列存/向量化执行,看看第一部分应该就有些概念了。
Parallel SQL Execution in Oracle 10g 论文解读
这篇简短的paper从非常high level的角度描述了下Oracle 10g对于parallel query所做的重新设计和其中的一些优化,由于Oracle RAC特殊的share-disk架构,使其在并行计算上与普通的MPP数据库有一些不同,例如对于worker的调度和分配方式以及对于资源/数据的动态调整。
The Snowflake Elastic Data WareHouse 论文解读
Snowflake是目前话题度超高的云原生数仓产品,从20年下半年上市到现在已经市值千亿了。它的流行进一步印证了云的重要性。纵观现在大大小小的数据库厂商,上云是必然要走的战略步骤,而snowflake则更加直接,类似于AWS Aurora或我们的PolarDB,它就是围绕着云基础设施构建的OLAP数据库产品。
FoundationDB论文解读 A Distributed Unbundled Transactional Key Value Store
FoundationDB一个具有事务语义的分布式KV存储,是最早的一批把NoSQL和分布式事务结合起来的数据库系统,它提供了NoSQL的高扩展,高可用和灵活性,同时保证了serializable的强ACID语义。
Enhanced Subquery Optimizations in Oracle
在前面的文章中,介绍了Oracle是如何做cost-based query transformation的,其中也包含Oracle基于rules/cost所做的若干种常见的query rewrite。对于CBQT的极简描述是对一个query做deep copy后,尝试一系列transform并利用physical optimizer计算cost,如果cost更低则保留该变换,否则抛弃。详细介绍可以参考之前的文章。 这篇paper算是之前那篇的后续,把重点放在了对subquery的处理上。subquery是一种在分析型query中非常常见的SQL construct,非常便于表达一些语义因此被
WinMagic : Subquery Elimination Using Window Aggregation
这篇精干的paper介绍了IBM DB2基于window function对相关子查询进行解相关的等价变换。
Fundamental Techniques for Order Optimization
这是一篇1996年的老paper了,主要讲解了IBM DB2如何针对query当中的有序性进行优化。但对于后续physical property的优化有较为深远的影响,由于DB2的优化器起源于System-R以及其后续演进的starburst,因此延续了system-R中的interesting order和order property的概念。关于system-R的介绍请看之前的文章。 order这种physical property并不只限于order by算子,基于有序的group by/distinct等,都会利用到数据的排序操作,而排序本身就是比较昂贵的计算,因此应该对其做尽可能的优化
Accelerating Queries with Group-By and Join By Groupjoin
这篇paper介绍了HyPer中引入的groupjoin算子,针对 join + group by这种query,可以在某些前提条件下,在join的过程中同时完成grouping+agg的计算。 比如用hash table来实现hash join和group by,就可以避免再创建一个hash table,尤其当join的数据量很大,产生的group结果又较少时,可以很好的提升执行效率。
Incorporating Partitioning and Parallel Plans into the SCOPE optimizer
这篇paper中讨论是的Microsoft的cosmos DB,其本身是一个海量数据的大规模计算平台,有些类似hadoop,使用的是一种类SQL的脚本,叫做SCOPE,针对SCOPE的优化器负责生成最优的执行计划。在1998年前后Microsoft基本丢弃了Sybase原有的优化器实现,并由Graefe主导重写了基于cascades的优化器。因此和Microsoft所有其他的数据库产品一样,SCOPE optimizer也是基于Cascades的transformation-based的优化器。
Cost-based query transformation in Oracle
这篇paper主要介绍了Oracle从10g开始引入的CBQT(Cost Based Query Transformation)框架。虽然以Oracle历来的风格,无法期待它在paper中讨论很多细节,不过这篇还是可以让我们一窥Oracle对于query rewrite的处理思路和很多非常实用的query rewrite模式,对于开发优化器的同学很有参考意义。 值得一提的是,PolarDB目前也在做这方面的工作,而主要的参考正是这篇paper。此外这篇paper的思路和MemSQL optimizer中对query rewrite的处理思路非常接近,关于MemSQL optimizer的介绍可
TPC-H深入剖析 part2 Quantifying TPC-H Choke Points and Their Optimizations
这篇承接了上一篇对于TPC-H中chockpoint的定性分析,基于Hyrise这个学术系统进行了较为孤立且细致的量化分析,并给出了不同类型chokepoint优化对于TPCH query的相对影响。 TPC-H的chokepoints在上一篇已详细介绍,并介绍了MySQL和PolarDB的对应优化情况。
TPCH 深入剖析 - part1 Hidden Messages and Lessons Learned from an Influential Benchmark
TPC-H可以说是世界上最为流行的OLAP workload的benchmark程序,无论你看什么样的论文或技术文章,只要是和query processing相关的,大多会在evaluation时使用TPC-H作为评估工具。而如果你从事query optimization/query execution的工作,则怎么都会和TPC-H打上交道,即使是TP型的数据库系统。
On the Correct and Complete Enumeration of the Core Search Space
在之前的文章中我们讨论了基于graph的DP-based算法,来解决join ordering的枚举问题。 这些DP算法通过join predicate描述的连通性,解决了枚举可能的表组合问题,但join graph本身(即使hypergraph)是无法完整的描述join语义的,因为连通边本身无法描述不同类型的join语义,例如left outer join/semi join/anti join...,因此即使找到了所谓的csg-cmp-pair,也不一定是有效的plan。 这篇paper讨论的就是这个问题,当枚举出一个csg-cmp-pair (S1 o S2),如何判断这是有效的join
Dynamic Programming Strikes Back - MySQL8.0的新优化器
这篇paper是著名的DPccp算法的延续,仍然是讨论如何最高效的基于Dynamic Programing,实现join ordering这个SQL查询优化中最为核心的功能。
Optimizing Queries over Partitioned Tables in MPP Systems
随着互联网数据的爆炸性增长,传统数据库系统在单表数据容量方面承受了越来越大的压力。以前公司内部的数据库,存放的主要是来自公司业务或内部管理系统的信息,中小型公司甚至一个MySQL实例就搞定了。但现在数据源不仅更丰富,数据量也在指数级增长,从业务的角度,基于hash/range的分区表变得越来越有吸引力。
Adaptive and Big Data Scale Parallel Execution in Oracle
在上篇文章中,主要讨论了SQL Server的MPP数仓系统PDW的分布式优化过程,PolarDB的并行优化从中有所借鉴,本篇文章主要看下这篇介绍Oracle并行执行策略的paper,因为在PolarDB的分布式执行策略中,有很多与其有所重叠。
Query Optimization in Microsoft SQL Server PDW
最近一年一直在做PolarDB的并行优化器,过程中调研了各种分布式数据库系统的优化和执行框架,后续几篇文章将一一分享,首先介绍对PolarDB MySQL的并行优化框架影响最大的,也就是SQL Server PDW。
The MemSQL Query Optimizer: A modern optimizer for real-time analytics in a distributed database
今天我们要介绍的MemSQL就采用这样一种新的形态(Oracle也变为了这种方式 ):即在做transformation时,要基于cost确定其是否可应用。 当然,本篇paper不止讲解了CBQT,还包括一些MemSQL优化器其他方面的介绍,包括一个有意思的heurstic based bushy join的方案。
Testing the Accuracy of Query Optimizers
在前文最后,我们提到了围绕着Orca打造的测试工具集,其中一个就是本篇paper的主角: TAQO。这个测试框架目标是为了测试优化器cost model的精确性,它针对优化的本质目标,提出了一种简单灵活,且易于扩展的方案,且便于实现。目前在PolarDB的分布式优化器中,我们已经采用了这种方法去度量分布式exchange 算子(Enforcer)和复杂计算(aggregation...)的代价因子。 当然,这个框架不局限于Orca,它可以在近乎黑盒的情况下对cost model进行校准,并针对不同optimizer的cost model质量进行横向评估,如果有开发或扩展优化器cost mode
Orca: A Modular Query Optimizer Architecture for Big Data
在之前的几片paper笔记中,对最为主流的两套优化器框架进行了解读,包括bottom-up dynamic programming的search策略和基于Top-down memorization的search策略
The Cascades Framework for Query Optimization
这篇paper是前一篇Volcano optimizer的后续,其涉及的概念和优化思路是一脉相承的,在阅读本篇之前,最好对Volcano optimizer有足够的了解,详见文章Volcano优化器框架。
The Volcano Optimizer Generator : Extensibility and Efficient Search
数据库查询优化器的搜索技术,基本上分为了基于动态规划的bottom-up search(详见文章System-R论文解读)和基于Cascades/Volcano的top-down search两个流派,这篇文章我们来看一下Cascades的前身也就是Volcano优化器框架的paper。
Access Path Selection in a Relational Database Management System
如果说选一篇在优化器框架上,被引用次数最多的文献,应该非这篇论文莫属了,还记得Andy Pavlo在cmu的课程中提到IBM Research的一群大神们,是怎么一人一个模块来负责System R的设计的,而关于Join order enumeration,Selinger可以说是开创了dynamic programing based 的bottom-up的搜索空间算法的先河,直至今日,很多成熟的商业或开源数据库系统仍在沿用这套框架,比如Oracle / DB2 / PostgreSQL ...
数据库查询优化器论文列表
过去一年间,对优化器相关论文做了个系统性的学习,把过程中阅读的论文笔记记录在这里,和大家分享,欢迎大家和我一起讨论,纠错补差,共同进步 ~ 阅读路线基本遵照了pingcap github上的一个Awesome Database Learning的资料,这个资料非常棒,包含了一些基本的课程 + 书籍,还按照内核中不同模块的不同方面做了分类,非常系统化,尤其是SQL层面非常详尽,正好符合需求,因此阅读基本也是按其中的paper来,并扩展到一些没有涉及的内容,总体目录如下(优化器部分),由于内容较多,主要挑选其中影响力较大的或者最有参考意义的。
PolarDB期待,更好的世界,更好的你
PolarDB 作为阿里云的重磅明星产品,是目前唯一 100% 兼容 MySQL 5.6/5.7/8.0 的云原生数据库产品。 通过多节点集群架构,存储与计算分离,共享存储等一系列创新技术, PolarDB 拥有卓越的计算性能,100TB的存储容量,100%兼容MySQL,1/10其他商用数据库的成本,为阿里云客户以及阿里集团提供强有力的数据库服务。我们的技术不仅服务于千万阿里云线上客户,创造PolarDB系列产品的营收神话,还多次登上数据库顶级会议SIGMOD,VLDB等的世界舞台。
一位挪威博士是如何成为阿里云PolarDB资深架构师的?How I ended up working as a senior architect on PolarDB
挪威博士倾心传授对于软件架构师角色至关重要的经验,希望能指导和帮助各位技术同学实现成为资深技术架构师。