首页 > 其他分享 >GaussDB技术解读高性能——数据分区与分区剪枝

GaussDB技术解读高性能——数据分区与分区剪枝

时间:2024-12-18 16:54:10浏览次数:4  
标签:剪枝 分区 数据库 分区表 数据 GaussDB 范围

GaussDB技术解读高性能——数据分区与分区剪枝

在数据系统中,数据分区是在一个实例内部按照用户指定的策略对数据做进一步的数据切分,将表按照指定规则划分为多个数据互不重叠的部分。从数据分区的角度来看是一种水平分区(horizontal partition)分区策略方式。分区表增强了数据库应用程序的性能、可管理性和可用性,并有助于降低存储大量数据的总体拥有成本。分区允许将表、索引和索引组织的表细分为更小的部分,使这些数据库对象能够在更精细的粒度级别上进行管理和访问。GaussDB Kernel提供了丰富的分区策略和扩展,以满足不同业务场景的需求。由于分区策略的实现完全由数据库内部实现,对用户是完全透明的,因此它几乎可以在实施分区表优化策略以后做平滑迁移,无需潜在耗费人力物力的应用程序更改:(1)改善查询性能,对分区对象的查询可以仅搜索自己关心的分区,提高检索效率(2)增强可用性,如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。(3)方便维护,如果分区表的某个分区出现故障需要修复数据,只修复该分区即可。

在这里插入图片描述
常见数据库支持的分区表为范围分区表、列表分区表、哈希分区表、间隔分区、组合分区(a.w.k 组合分区)。
(1)范围分区(Range Partition):将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的。范围分区功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
(2)列表分区(List Partition):将数据基于各个分区内包含的键值映射到每一个分区,分区包含的键值在创建分区时指定。列表分区功能,即根据表的一列,将要插入表的记录中出现的键值分为若干个列表(这些列表在不同的分区里没有重叠),然后为每个列表创建一个分区,用来存储相应的数据。
(3)哈希分区(Hash Partition):将数据通过哈希映射到每一个分区,每一个分区中存储了具有相同哈希值的记录。
(4)间隔分区(Interval Partition):可以看成是范围分区的一种增强和扩展方式,相比之下间隔分区定义分区时无需为新增的每个分区指定上限和下限值,只需要确定每个分区的长度,实际插入的过程中会自动进行分区的创建和扩展。间隔分区在创建初始时必须至少指定一个范围分区,范围分区键值确定范围分区的高值称为转换点,数据库为值超出该转换点的数据自动创建间隔分区。每个区间分区的下边界是先前范围或区间分区的非包容性上边界。
(5)二级分区(Sub Partition,也叫组合分区)是基本数据分区类型的组合,将表通过一种数据分布方法进行分区,然后使用第二种数据分布方式将每个分区进一步细分为子分区。给定分区的所有子分区表示数据的逻辑子集。常见的二级分区组合由Range、List、Hash组成。

分区表对查询性能最大的贡献是分区剪枝优化技术,数据库SQL引擎会根据查询条件,只扫描特定的部分分区。分区剪枝是自动触发的,当分区表查询条件符合剪枝场景时,会自动触发分区剪枝。根据剪枝阶段的不同,分区剪枝分为静态剪枝和动态剪枝,静态剪枝在优化器阶段进行,在生成计划之前,数据库已经知道需要访问的分区信息;动态剪枝在执行器阶段进行(执行开始/执行过程中),在生成计划时,数据库并不知道需要访问的分区信息,只是判断“可以进行分区剪枝”,具体的剪枝信息由执行器决定。
在这里插入图片描述

注意,分区表由于相比普通表多了一层分区选择的处理逻辑,一般而言在数据导入场景下会有一定的性能损耗。

标签:剪枝,分区,数据库,分区表,数据,GaussDB,范围
From: https://www.cnblogs.com/xiaoxu0211/p/18615352

相关文章

  • GaussDB技术解读高性能——计划缓存计划技术
    GaussDB技术解读高性能——计划缓存计划技术数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划->执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的......
  • GaussDB技术解读高性能——分布式执行框架
    由于GaussDB采用的是无共享Shared-nothing的架构,由众多独立且互不共享CPU、内存、存储等系统资源的逻辑节点组成。在这样的系统架构中,业务数据被分散存储在多个物理节点上,数据分析任务会被推送到数据所在位置就近执行,通过控制模块的协调,并行地完成大规模的数据处理工作,实现对数据......
  • GaussDB技术解读高性能——分布式优化器
    GaussDB技术解读高性能——分布式优化器分布式数据库场景下表分布在各个节点上,数据的本地性DataLocality是分布式优化器中生成执行计划时重点考虑的因素,基于ShareNothing的分布式数据库中有一个很关键概念就是“移动数据不如移动计算”,之所以有数据本地性就是因为数据在网络中......
  • 多个Partition的消费顺序主要取决于消费者组(Consumer Group)中的分区分配策略
    在Kafka中,多个Partition的消费顺序主要取决于消费者组(ConsumerGroup)中的分区分配策略。以下是两种主要的分区分配策略及其消费顺序:1.**RangeAssignor(范围分配器)**:-这是Kafka消费者默认的分区分配策略。它按照消费者和分区的编号进行排序,然后顺序分配分区给消费者。这种方式......
  • Centos /root /home分区大小修改
    1.  lsblk-f查看磁盘分区情况NAMEFSTYPELABELUUIDMOUNTPOINTsda├─sda1vfat......
  • 2-2-18-16 QNX系统架构之自适应分区
    阅读前言本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引......
  • esp32-将flash分区进行内存映射
    1.前言为什么需要将flash分区映射到内存区域在某些情况下,我们需要在单片机中保存一个较大的数组,比如字库、图片等,使用const将其编译到代码中,可以指针访问他们。但是,在线刷或者OTA更新时,也不可避免的需要更新他们,造成了时间或者空间上的浪费。但是如果将其按照静态数据存放在fl......
  • 8.mysql表分区
    MySQL表分区 表分区是将⼀个表的数据按照⼀定的规则⽔平划分为不同的逻辑块,并分别进⾏物理存储,这个规则就叫做分区函数,可以有不同的分区规则 5.7可以通过showplugins语句查看当前MySQL是否⽀持表分区功能 MySQL8.0移除了showplugins⾥对partition的显示,但社区版本的表分区......
  • 分区表(Partition Table)是存储在磁盘上的一块数据区域,用于记录磁盘上各个分区的位置和
    分区表是什么?分区表(PartitionTable)是存储在磁盘上的一块数据区域,用于记录磁盘上各个分区的位置和大小信息。它是操作系统管理硬盘的基础,是硬盘和操作系统之间的“桥梁”。分区表包含有关磁盘上每个分区的关键信息,如起始位置、结束位置、分区大小、分区类型等。分区表的作用是什......
  • 分区对齐(Partition Alignment)是指磁盘分区表中的分区起始位置与硬盘的物理扇区(或磁盘
    分区对齐(PartitionAlignment)是指磁盘分区表中的分区起始位置与硬盘的物理扇区(或磁盘块)进行对齐的技术。具体来说,分区的起始位置会与磁盘的物理块大小对齐,通常是以512字节、4KB等为单位的。为什么分区需要对齐?提高性能:现代硬盘(尤其是固态硬盘,SSD)通常具有更大的扇区大小(例如4KB......