1.起源1979年,第一款基于SQL的商业关系型数据库管理系统OracleV2问世,也标志着第一款商用的SQL优化器诞生。理论上,成熟的优化器原型,更早可以追溯到IBM的SystemR项目。现今,很多开源数据库和大数据优化器还是沿用SystemR原型。2.从一条SQL开始SQL(StructuredQueryLanguage)是一种结构化的查询语言。它只描述了用户需要什么样的数据,而没有告诉数据库该如何执行。这使得有很多优化空间蕴含在SQL改写中,我们来看一个简单...
2023-02-24 15:06:36 3432浏览 0点赞 0回复 0收藏
1.背景业务系统中普遍存在这样一种场景:根据给定条件筛选一批记录,这些记录按用户指定的条件排序,以分页的方式展示。例如,筛选出某个商家在售的商品,按商品销量排序,以分页的方式展示。上述场景,反映在数据库上,往往以ORDERBYcolumnLIMITn,m这样的TopK查询实现。例如,假设业务系统中每页展示100条记录,可以通过ORDERBYcolumnLIMIT0,100来展示第1页,通过ORDERBYcolumnLIMIT1000000,100来展示第10001页。在没有索引...
2023-02-24 15:06:12 3190浏览 0点赞 0回复 0收藏
《MySQL的内存分配与管理》上篇和中篇,介绍了MySQL的内存分配、使用和管理。在实际使用的过程中,控制好内存的用量、降低OOM风险十分重要。本篇为下篇,主要对MySQL内存限制特性进行解读,代码基于8.0.28。在MySQL8.0.28中,官方引入了内存限制的新特性WL13458Globalandsessionmemoryallocationlimits,从内核层面对服务运行期间的内存使用进行限制,降低OOM的风险。本文将围绕该项工作的改动、设计实现等方...
2023-02-24 15:04:59 5883浏览 0点赞 0回复 0收藏
1.RuntimeFilter1.1什么是RuntimeFilterRuntimeFilter是通过等价关系传递动态生成的filtercondition以减少参与Join计算数据量的方法,在业界有广泛应用。图1RuntimeFilter优化生效的流程如下:1.根据查询的JoinCondition,生成一条动态过滤条件传递规则:决定生产者(生成过滤条件的子查询)和消费者(应用过滤条件进行过滤的子查询)。2.先执行生产者,用实时结果集动态构建一个RuntimeFilterObject。3.将这个RuntimeFilterObj...
2023-02-24 15:03:12 2594浏览 0点赞 0回复 0收藏
MySQL内存分配与管理总体上分为上中下三篇介绍,上篇中主要介绍了InnoDB层和SQL层内存分配管理器,其中InnoDB的内存分配主要依靠utallocator和memheapallocator完成。本篇为中篇,主要介绍InnoDB的内存构成和使用,代码版本主要基于8.0.25。InnoDB是MySQL默认的存储引擎,而提到InnoDB的内存,就绕不开BufferPool,该结构对性能的影响重大。但事实上InnoDB的内存消耗并不只有BP而已,其内部还有许多重要的结构(如AHI、ChangeBu...
2023-02-24 15:01:46 3928浏览 0点赞 0回复 0收藏
MySQL的内存分配、使用、管理的模块较多,总体上分为上中下三篇介绍:上篇文章主要介绍InnoDB层和SQL层内存分配管理器;中篇介绍InnoDB的内存结构和使用特点;下篇介绍内存使用限制。本篇为上篇,代码版本主要基于8.0.25。1.InnoDB层内存分配管理器1.1utallocator在非UNIVPFSMEMORY模式下,UTNEW等都是调用原始的new、delete、malloc、free等接口进行内存的申请和释放,在UNIVPFSMEMORY编译模式下,采用内部封装的utallocator分...
2023-02-24 15:00:41 3542浏览 0点赞 0回复 0收藏