高斯数据库(GaussDB)中如何获取表的分布策略

文摘   2024-12-22 21:30   北京  
分布式数据库具备水平扩展、分布式存储提升性能、多节点复制保障高可用性等优势。然而,其性能优化面临数据倾斜、查询协调成本及索引分区策略权衡等挑战。通过合理设计分布策略和优化查询计划,可有效平衡一致性与性能。PawSQL将对分布式数据库性能优化与SQL审核进行重点支持,本文将从分布策略的获取展开讨论。

1. 高斯表的分布策略



分布式高斯数据库(GaussDB)支持以下分布方式:

  • HASH 分布: 基于某些列的哈希值进行分布。

  • RANGE 分布: 按范围分布数据。

  • REPLICATED 分布: 数据在每个节点上复制。

  • RANDOM 分布: 数据随机分布。

在高斯数据库(GaussDB)的分布式架构中,可以通过查询pgxc_class和其他相关系统表来查看表的分布信息。pgxc_class是一个系统表,用于存储表的分布相关信息。这是数据库分布策略的核心元数据表之一,定义了每个表在集群中的分布方式和相关属性。


2. pgxc_class 表定义


以下是pgxc_class表的定义及其字段解释:
\d pgxc_class

输出以下内容:

字段名数据类型
pcrelidoid
pclocatortypechar
pcattnumint2[]
nodeoidsoid[]

字段解释

  1. pcrelid

  • 表示表的 OID(对象标识符),对应于pg_class.oid

  • 用于连接pg_class获取表名(relname)等信息。

  • pclocatortype,定义了表的分布策略

    • 'H'(HASH):基于分布列的哈希值分布到不同的节点。

    • 'R'(RANGE):按范围将数据分布到不同的节点。

    • 'C'(REPLICATED):数据完全复制到所有节点。

    • 'N'(RANDOM):数据随机分布到节点。

  • pcattnum

    • 存储分布列的列号数组,每个列号对应pg_attribute.attnum

    • 如果pclocatortype是 HASH 或 RANGE 分布,则此字段指示哪些列被用作分布键。

  • nodeoids

    • 表存储的节点 OID 数组。

    • 每个 OID 对应一个节点,可以通过查询其他系统表(如pgxc_node)来解析节点信息。


    3. 查看分布式表的分布策略


    以下是查询表 `t` 的分布方式的 SQL:

    SELECT     c.relname AS table_name,    CASE         WHEN x.pclocatortype = 'H' THEN 'HASH'        WHEN x.pclocatortype = 'R' THEN 'RANGE'        WHEN x.pclocatortype = 'C' THEN 'REPLICATED'        WHEN x.pclocatortype = 'N' THEN 'RANDOM'        ELSE 'UNKNOWN'    END AS distribution_typeFROM     pg_class cJOIN     pgxc_class xON     c.oid = x.pcrelidWHERE     c.relname = 't';

    字段解释

    • `pg_class`: 存储表和视图的基本信息,`relname` 是表名。

    • `pgxc_class` : 存储表的分布相关信息。

    • `pclocatortype`定义了表的分布策略, 取值如下

      • 'H'(HASH):基于分布列的哈希值分布到不同的节点。

      • 'R'(RANGE):按范围将数据分布到不同的节点。

      • 'C'(REPLICATED):数据完全复制到所有节点。

      • 'N'(RANDOM):数据随机分布到节点。


      4. 查询分布列


      如果表是 HASH 或 RANGE 分布,可以进一步查询具体的分布列:

      SELECT     c.relname AS table_name,    a.attname AS distribution_columnFROM     pg_class cJOIN     pgxc_class xON     c.oid = x.pcrelidJOIN     pg_attribute aON     a.attrelid = c.oid AND a.attnum = ANY(x.pcattnum)WHERE     c.relname = 't';

      字段解释

      • `pg_attribute`: 存储列的信息,`attname` 是列名。

      • `pcattnum`: 存储分布列的列号。


      5. 应用场景


      通过查询pgxc_class可以确定表的分布类型和分布列。在高斯数据库中,分布类型和列是分布式存储和性能优化的重要因素,尤其是 HASH 和 RANGE 分布,需要根据业务场景选择合适的分布方式。

      1. 分布策略分析:通过查询pgxc_class,可以了解表的分布类型(如 HASH 或 RANGE)以及分布列是否合理,辅助优化数据分布。

      2. 节点定位:结合nodeoids字段和pgxc_node,可以定位表数据所在的物理节点。

      3. 分布调整:如果分布策略不合理,可以使用ALTER TABLE或重新建表的方式调整分布策略。


      🌟关于PawSQL



      PawSQL专注于数据库性能优化自动化和智能化,提供的解决方案覆盖SQL开发、测试、运维的整个流程,广泛支持MySQL、PostgreSQL、OpenGauss、Oracle等主流商用和开源数据库,以及openGauss,人大金仓、达梦等国产数据库,为开发者和企业提供一站式的创新SQL优化解决方案;有效解决了数据库SQL性能及质量问题,提升了数据库系统的稳定性、应用性能和基础设施利用率,为企业节省了大量的运维成本和时间投入。

      获取更多关于PawSQL的信息,欢迎关注公众号👇👇👇

      PawSQL
      PawSQL专注于数据库性能优化的自动化和智能化,支持MySQL、PostgreSQL、openGauss,金仓、达梦、Oracle等主流商用和开源数据库,为开发者和企业提供一站式的创新SQL优化解决方案。
       最新文章