开启和使用向量化引擎

本文介绍如何开启向量化引擎,以及开启功能后的使用方式。

使用限制

  • PolarDB PostgreSQL版14.10.20.0及以上版本支持向量化引擎。

  • 原表必须有主键,且必须将主键列加入到加速索引中。

  • 目前只针对静态数据,创建加速索引后,新增的动态数据无法通过加速索引查询。

  • 目前支持的一致性级别为最终一致性。

  • 一张表只能创建一个加速索引,加速索引中可以包含多个列。

  • 不支持自定义数据类型,即通过CREATE TYPE语句创建的数据类型无法使用加速索引。

  • 不支持存储过程的加速。

  • 当查询语句使用的内存超过polar_csi.memory_limit指定的内存容量时会失败。

开启方式

PolarDB PostgreSQL版向量化引擎是一个内部的功能模块,与PolarDB PostgreSQL版已有的所有功能完全融合,可以在现有的PolarDB PostgreSQL版集群中免费开启/关闭该功能,无需为该功能单独付费或额外购买新集群。

PolarDB PostgreSQL版向量化引擎作为插件(polar_csi)部署在数据库集群中,在使用之前需要在指定的数据库中创建插件。

具体步骤如下:

  1. 通过psql命令连接到现有集群的数据库,使用时请将{}中的内容替换为集群的连接信息,查看连接信息请参考查看或申请连接地址

    psql -h {host} -p {port} -U {user_name} {dbname}
  2. 登录到数据库后,创建polar_csi插件。

    说明

    需要注意的是,polar_csi插件的作用域是database级别,如果需要在一个集群的多个database中使用向量化引擎能力,需要为每个database分别创建polar_csi插件。

    CREATE EXTENSION polar_csi;
  3. 开启向量化引擎功能(创建polar_csi插件后默认为关闭状态)。

    SET polar_csi.enable_query = ON;

语法说明

  • 创建/删除polar_csi插件:

    ------创建polar_csi插件
    CREATE EXTENSION polar_csi;
    
    ------删除polar_csi插件
    DROP EXTENSION polar_csi;
  • 开启/关闭向量化引擎功能,生效范围为会话或数据库。

    SET polar_csi.enable_query = [on|off];
    SET polar_csi.enable_query to [on|off];
  • 创建加速索引,与PostgreSQL现有的CREATE INDEX语法一致,下列语句中primary_key是原表的主键列。

    CREATE INDEX xxx ON xxx USING CSI(primary_key,c1,c2,c3);
  • 查看加速索引创建速度。

    SELECT * FROM pg_stat_progress_create_index;
  • 查看某张表是否存在加速索引,可以使用\d命令。下列示例中,source_table_csi即为表source_table的加速索引。

    image

  • 删除加速索引。

    DROP INDEX xxx;
  • 重建加速索引。

    REINDEX INDEX xxx;
  • 查看Query是否使用加速索引:explain结果出现CSI Executor关键词时即表示使用加速索引。

    EXPLAIN SELECT COUNT(*) FROM source_table;
      QUERY PLAN  
    --------------
     CSI Executor
    (1 row)
  • 使用Hint方式开启/关闭,生效范围为SQL语句。

    说明

    需要依赖pg_hint_plan插件,创建对应插件请使用CREATE EXTENSION

    /*+ SET (polar_csi.enable_query on/off) */ SELECT ....

配置参数

参数名

取值范围

默认值

说明

polar_csi.enable_query

on|off

off

是否启用向量化引擎。

polar_csi.exec_parallel

1~512

2

向量化引擎执行单条查询语句的并行度。

请根据集群规格来调整该参数的值,建议polar_csi.exec_parallel参数值与polar_csi.scan_parallel参数值之和不超过集群的CPU数量,且polar_csi.exec_parallel的值大于等于polar_csi.scan_parallel的值。

polar_csi.scan_parallel

1~16

2

向量化引擎执行单条查询语句时,scan算子的并行度。

请根据集群规格来调整该参数的值,建议polar_csi.exec_parallel参数值与polar_csi.scan_parallel参数值之和不超过集群的CPU数量,且polar_csi.exec_parallel的值大于等于polar_csi.scan_parallel的值。

polar_csi.memory_limit

1~1048576

1024

向量化引擎可以使用的内存,单位:MB。

请根据集群规格来调整该参数的值,建议不超过集群内存的25%。

polar_csi.cost_threshold

1~1000000000

1000

当查询代价小于该阈值时,查询语句不会使用向量化引擎来加速。

建议调大该参数的值,否则可能会影响TP类查询的性能。

数据类型

  • 完全支持的数据类型如下:

    类别

    数据类型

    bool 型

    BOOLEAN

    字符与二进制

    CHARVARCHARBPCHARTEXTBYTEAARRAYNAMEINTERVAL

    时间型

    DATETIMETIMESTAMPTIMESTAMP WITH ZONE

    数值型

    SHORTSMALLINTINTEGERBIGINTDECIMAL(需要指定精度)、NUMERICSERIALUUIDENUMFLOAT4FLOAT8

  • 有限支持的数据类型如下:JSONBJSON