首页 > 其他分享 >GaussDB技术解读高性能——物理优化CBO

GaussDB技术解读高性能——物理优化CBO

时间:2024-12-18 16:54:31浏览次数:3  
标签:估算 优化 GaussDB 路径 CBO 选择 高性能 执行 代价

GaussDB技术解读高性能——物理优化CBO

在优化器处理完RBO的优化以后,路径的选择往往不能通过实现制定好的规则进行变换,而是需要根据数据的分布(统计信息)情况来对查询执行路径进行评估,从可选的路径中选择一个执行代价最小的路劲进行执行,例如是否选择索引SeqScan vs. IndexScan、选择哪个索引,两表关联选择什么样的连接顺序,选择怎样的具体算法等,因此,可以将物理优化总结为对多个可行的物理执行代价进行评估,选择最优的计划输出到执行器进行执行,例如有以下查询:

select * from t1 join t2 on t1.a=t2.b;

可选择的计划有:

在这里插入图片描述
如上图所示,根据T1、T2可访问的执行路径:IndexScan vs. SeqScan,关联算法:HashJoin、MergeJoin、NestLoop;关联内表外表等多个维度的选择,就会生成多达数十种不同的执行计划,由于考虑到T1、T2的表大小,谓词的选择率、是否有索引等因素很难从一个固定的规则里选出一个合理的执行计划,此时需要对T1、T2表的数据特征进行建模,构建代价模型从而选出最优的计划,这个过程按照处理的顺序大体上可以分为:统计信息、行数估算、代价估算、路径搜索、计划生成五个处理步骤:

(1)统计信息,物理优化的依据来源于表信息的统计, 描述基表数据的特征包括唯一值、MCV值等,用于行数估算。

(2)行数估算,代价估算的基础,来源于基表统计信息的推算,估算基表baserel、Join中间结果集joinrel、Aggregation中结果集大小,为代价估算做准备。

(3)代价估算,根据关系的行数,推算出当前算子的执行代价,根据数据量估算不同算子执行代价,各算子代价之和即为计划总代价。

(4)路径搜索,依据若干算子的执行代价对最优路径进行路径搜索,通过求解路径最优算法(e.g. 动态规划、遗传算法)处理连接路径搜索过程,以最小搜索空间找到最优连接路径。

(5)计划生成,将查询的执行路径转换成PlanTree能够输出给执行器做查询执行,在分布式场景下根据数据分布的属性决定Data-Shuffling数据迁移总体方案。

标签:估算,优化,GaussDB,路径,CBO,选择,高性能,执行,代价
From: https://www.cnblogs.com/xiaoxu0211/p/18615353

相关文章

  • GaussDB技术解读高性能——数据分区与分区剪枝
    GaussDB技术解读高性能——数据分区与分区剪枝在数据系统中,数据分区是在一个实例内部按照用户指定的策略对数据做进一步的数据切分,将表按照指定规则划分为多个数据互不重叠的部分。从数据分区的角度来看是一种水平分区(horizontalpartition)分区策略方式。分区表增强了数据库应用......
  • GaussDB技术解读高性能——计划缓存计划技术
    GaussDB技术解读高性能——计划缓存计划技术数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划->执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的......
  • GaussDB技术解读高性能——分布式执行框架
    由于GaussDB采用的是无共享Shared-nothing的架构,由众多独立且互不共享CPU、内存、存储等系统资源的逻辑节点组成。在这样的系统架构中,业务数据被分散存储在多个物理节点上,数据分析任务会被推送到数据所在位置就近执行,通过控制模块的协调,并行地完成大规模的数据处理工作,实现对数据......
  • GaussDB技术解读高性能——分布式优化器
    GaussDB技术解读高性能——分布式优化器分布式数据库场景下表分布在各个节点上,数据的本地性DataLocality是分布式优化器中生成执行计划时重点考虑的因素,基于ShareNothing的分布式数据库中有一个很关键概念就是“移动数据不如移动计算”,之所以有数据本地性就是因为数据在网络中......
  • 高性能计算-Intel IPP库ARM移植示例(20)
    1.简介Intel®IntegratedPerformancePrimitives,即英特尔集成性能基元(简称IPP),为信号、数据和图像处理特定应用领域,提供simd优化的一组全面的函数库。本项目将对exp、cos、sin、tone、Triangle函数用NEON向量化指令实现ARM移植版本,有串行和向量化两个版本。计算使用泰勒展开......
  • 高性能实时分析型数据库Doris
    ApacheDoris是一个基于MPP的现代化、高性能、支持实时的分析型数据库,以极速易用的特性被业内所熟知。以下是对它的详细介绍:发展历程ApacheDoris最早是诞生于百度广告报表业务的Palo项目,2017年正式对外开源,2018年7月由百度捐赠给Apache基金会进行孵化,2022年6月成功从Apache孵化......
  • 【不体系】高性能动态网关APISIX
    文章目录1.概述1.1主要特性1.2主要概念2.安装3.验证3.1前置3.2配置3.3策略1.概述ApacheAPISIX是Apache软件基金会下的云原生API网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认......
  • 在一个svg里进行大量线段的绘制,请问有没有什么可以提高性能的办法,类似 winform里的Sus
    在前端开发中,尤其是在处理SVG图形和大量线段绘制时,性能优化是非常重要的。虽然不像WinForms中的`SuspendLayout`和`ResumeLayout`那样直接控制布局更新的暂停与恢复,但在Web环境中也有多种方法可以提高SVG渲染性能。以下是几种常见的优化策略:###1.使用批量更新尽量减少DOM操作......
  • sylar高性能服务器框架:CMakeLists.txt文件解析
    完整代码先给出完整CMakeLists.txt文件,复制到IDE里面,方便对应行号。注释部分其实和没备注的语法之类的都是一样的,对照例子看就明白了。(下面代码先不用看,直接跳下一节)cmake_minimum_required(VERSION3.0)project(sylar)#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR......
  • 前端 AI 应用开发实战:构建高性能的 AI 辅助编程系统
    "能不能让AI直接在我的代码编辑器里帮我写代码?"两个月前,我们团队接到了这样一个挑战。作为一名前端工程师,我深知在浏览器中构建一个复杂的AI编程助手并非易事。今天,我想分享我们是如何一步步实现这个系统的。......