PolarDB PostgreSQL版(以下简称 PolarDB-PG)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容 PostgreSQL 与 Oracle。PolarDB-PG 的存储与计算能力均可横向扩展,具有高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB-PG 具有大规模并行计算能力,可以应对 OLTP 与 OLAP 混合负载;还具有时空、向量、搜索、图谱等多模创新特性,可以满足企业对数据处理日新月异的新需求。
使用说明
PolarDB-PG HTAP 适用于日常业务中的 轻分析类业务,例如:对账业务,报表业务。
使用 MPP 进行分析型查询
PolarDB-PG 引擎默认不开启 MPP 功能。若您需要使用此功能,请使用如下参数:
polar_enable_px
:指定是否开启 MPP 功能。默认为OFF
,即不开启。polar_px_max_workers_number
:设置单个节点上的最大 MPP Worker 进程数,默认为30
。该参数限制了单个节点上的最大并行度,节点上所有会话的 MPP workers 进程数不能超过该参数大小。polar_px_dop_per_node
:设置当前会话并行查询的并行度,默认为1
,推荐值为当前 CPU 总核数。若设置该参数为N
,则一个会话在每个节点上将会启用N
个 MPP Worker 进程,用于处理当前的 MPP 逻辑polar_px_nodes
:指定参与 MPP 的只读节点。默认为空,表示所有只读节点都参与。可配置为指定节点参与 MPP,以逗号分隔px_worker
:指定 MPP 是否对特定表生效。默认不生效。MPP 功能比较消耗集群计算节点的资源,因此只有对设置了px_workers
的表才使用该功能。例如:ALTER TABLE t1 SET(px_workers=1)
表示 t1 表允许 MPPALTER TABLE t1 SET(px_workers=-1)
表示 t1 表禁止 MPPALTER TABLE t1 SET(px_workers=0)
表示 t1 表忽略 MPP(默认状态)
本示例以简单的单表查询操作,来描述 MPP 的功能是否有效。
-- 创建 test 表并插入基础数据。
CREATE TABLE test(id int);
INSERT INTO test SELECT generate_series(1,1000000);
-- 默认情况下 MPP 功能不开启,单表查询执行计划为 PG 原生的 Seq Scan
EXPLAIN SELECT * FROM test;
QUERY PLAN
--------------------------------------------------------
Seq Scan on test (cost=0.00..35.50 rows=2550 width=4)
(1 row)
复制
开启并使用 MPP 功能:
-- 对 test 表启用 MPP 功能
ALTER TABLE test SET (px_workers=1);
-- 开启 MPP 功能
SET polar_enable_px = on;
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 2:1 (slice1; segments: 2) (cost=0.00..431.00 rows=1 width=4)
-> Seq Scan on test (scan partial) (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
配置参与 MPP 的计算节点范围:
-- 查询当前所有只读节点的名称
CREATE EXTENSION polar_monitor;
SELECT name,host,port FROM polar_cluster_info WHERE px_node='t';
name | host | port
-------+-----------+------
node1 | 127.0.0.1 | 5433
node2 | 127.0.0.1 | 5434
(2 rows)
-- 当前集群有 2 个只读节点,名称分别为:node1,node2
-- 指定 node1 只读节点参与 MPP
SET polar_px_nodes = 'node1';
-- 查询参与并行查询的节点
SHOW polar_px_nodes;
polar_px_nodes
----------------
node1
(1 row)
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 1:1 (slice1; segments: 1) (cost=0.00..431.00 rows=1 width=4)
-> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
使用 MPP 进行分区表查询
当前 MPP 对分区表支持的功能如下所示:
- 支持 Range 分区的并行查询
- 支持 List 分区的并行查询
- 支持单列 Hash 分区的并行查询
- 支持分区裁剪
- 支持带有索引的分区表并行查询
- 支持分区表连接查询
- 支持多级分区的并行查询
--分区表 MPP 功能默认关闭,需要先开启 MPP 功能
SET polar_enable_px = ON;
-- 执行以下语句,开启分区表 MPP 功能
SET polar_px_enable_partition = true;
-- 执行以下语句,开启多级分区表 MPP 功能
SET polar_px_optimizer_multilevel_partitioning = true;
复制
使用 MPP 加速索引创建
当前仅支持对 B-Tree 索引的构建,且暂不支持 INCLUDE
等索引构建语法,暂不支持表达式等索引列类型。
如果需要使用 MPP 功能加速创建索引,请使用如下参数:
polar_px_dop_per_node
:指定通过 MPP 加速构建索引的并行度。默认为1
。polar_px_enable_replay_wait
:当使用 MPP 加速索引构建时,当前会话内无需手动开启该参数,该参数将自动生效,以保证最近更新的数据表项可以被创建到索引中,保证索引表的完整性。索引创建完成后,该参数将会被重置为数据库默认值。polar_px_enable_btbuild
:是否开启使用 MPP 加速创建索引。取值为OFF
时不开启(默认),取值为ON
时开启。polar_bt_write_page_buffer_size
:指定索引构建过程中的写 I/O 策略。该参数默认值为0
(不开启),单位为块,最大值可设置为8192
。推荐设置为4096
。
PolarDB-PG HTAP 适用于日常业务中的 轻分析类业务,例如:对账业务,报表业务。
使用 MPP 进行分析型查询
PolarDB-PG 引擎默认不开启 MPP 功能。若您需要使用此功能,请使用如下参数:
polar_enable_px
:指定是否开启 MPP 功能。默认为OFF
,即不开启。polar_px_max_workers_number
:设置单个节点上的最大 MPP Worker 进程数,默认为30
。该参数限制了单个节点上的最大并行度,节点上所有会话的 MPP workers 进程数不能超过该参数大小。polar_px_dop_per_node
:设置当前会话并行查询的并行度,默认为1
,推荐值为当前 CPU 总核数。若设置该参数为N
,则一个会话在每个节点上将会启用N
个 MPP Worker 进程,用于处理当前的 MPP 逻辑polar_px_nodes
:指定参与 MPP 的只读节点。默认为空,表示所有只读节点都参与。可配置为指定节点参与 MPP,以逗号分隔px_worker
:指定 MPP 是否对特定表生效。默认不生效。MPP 功能比较消耗集群计算节点的资源,因此只有对设置了px_workers
的表才使用该功能。例如:ALTER TABLE t1 SET(px_workers=1)
表示 t1 表允许 MPPALTER TABLE t1 SET(px_workers=-1)
表示 t1 表禁止 MPPALTER TABLE t1 SET(px_workers=0)
表示 t1 表忽略 MPP(默认状态)
本示例以简单的单表查询操作,来描述 MPP 的功能是否有效。
-- 创建 test 表并插入基础数据。
CREATE TABLE test(id int);
INSERT INTO test SELECT generate_series(1,1000000);
-- 默认情况下 MPP 功能不开启,单表查询执行计划为 PG 原生的 Seq Scan
EXPLAIN SELECT * FROM test;
QUERY PLAN
--------------------------------------------------------
Seq Scan on test (cost=0.00..35.50 rows=2550 width=4)
(1 row)
复制
开启并使用 MPP 功能:
-- 对 test 表启用 MPP 功能
ALTER TABLE test SET (px_workers=1);
-- 开启 MPP 功能
SET polar_enable_px = on;
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 2:1 (slice1; segments: 2) (cost=0.00..431.00 rows=1 width=4)
-> Seq Scan on test (scan partial) (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
配置参与 MPP 的计算节点范围:
-- 查询当前所有只读节点的名称
CREATE EXTENSION polar_monitor;
SELECT name,host,port FROM polar_cluster_info WHERE px_node='t';
name | host | port
-------+-----------+------
node1 | 127.0.0.1 | 5433
node2 | 127.0.0.1 | 5434
(2 rows)
-- 当前集群有 2 个只读节点,名称分别为:node1,node2
-- 指定 node1 只读节点参与 MPP
SET polar_px_nodes = 'node1';
-- 查询参与并行查询的节点
SHOW polar_px_nodes;
polar_px_nodes
----------------
node1
(1 row)
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 1:1 (slice1; segments: 1) (cost=0.00..431.00 rows=1 width=4)
-> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
使用 MPP 进行分区表查询
当前 MPP 对分区表支持的功能如下所示:
- 支持 Range 分区的并行查询
- 支持 List 分区的并行查询
- 支持单列 Hash 分区的并行查询
- 支持分区裁剪
- 支持带有索引的分区表并行查询
- 支持分区表连接查询
- 支持多级分区的并行查询
--分区表 MPP 功能默认关闭,需要先开启 MPP 功能
SET polar_enable_px = ON;
-- 执行以下语句,开启分区表 MPP 功能
SET polar_px_enable_partition = true;
-- 执行以下语句,开启多级分区表 MPP 功能
SET polar_px_optimizer_multilevel_partitioning = true;
复制
使用 MPP 加速索引创建
当前仅支持对 B-Tree 索引的构建,且暂不支持 INCLUDE
等索引构建语法,暂不支持表达式等索引列类型。
如果需要使用 MPP 功能加速创建索引,请使用如下参数:
polar_px_dop_per_node
:指定通过 MPP 加速构建索引的并行度。默认为1
。polar_px_enable_replay_wait
:当使用 MPP 加速索引构建时,当前会话内无需手动开启该参数,该参数将自动生效,以保证最近更新的数据表项可以被创建到索引中,保证索引表的完整性。索引创建完成后,该参数将会被重置为数据库默认值。polar_px_enable_btbuild
:是否开启使用 MPP 加速创建索引。取值为OFF
时不开启(默认),取值为ON
时开启。polar_bt_write_page_buffer_size
:指定索引构建过程中的写 I/O 策略。该参数默认值为0
(不开启),单位为块,最大值可设置为8192
。推荐设置为4096
。- 当该参数设置为不开启时,在索引创建的过程中,对于索引页写满后的写盘方式是 block-by-block 的单个块写盘。
- 当该参数设置为开启时,内核中将缓存一个
polar_bt_write_page_buffer_size
大小的 buffer,对于需要写盘的索引页,会通过该 buffer 进行 I/O 合并再统一写盘,避免了频繁调度 I/O 带来的性能开销。该参数会额外提升 20% 的索引创建性能。## 使用说明
PolarDB-PG HTAP 适用于日常业务中的 轻分析类业务,例如:对账业务,报表业务。
使用 MPP 进行分析型查询
PolarDB-PG 引擎默认不开启 MPP 功能。若您需要使用此功能,请使用如下参数:
polar_enable_px
:指定是否开启 MPP 功能。默认为OFF
,即不开启。polar_px_max_workers_number
:设置单个节点上的最大 MPP Worker 进程数,默认为30
。该参数限制了单个节点上的最大并行度,节点上所有会话的 MPP workers 进程数不能超过该参数大小。polar_px_dop_per_node
:设置当前会话并行查询的并行度,默认为1
,推荐值为当前 CPU 总核数。若设置该参数为N
,则一个会话在每个节点上将会启用N
个 MPP Worker 进程,用于处理当前的 MPP 逻辑polar_px_nodes
:指定参与 MPP 的只读节点。默认为空,表示所有只读节点都参与。可配置为指定节点参与 MPP,以逗号分隔px_worker
:指定 MPP 是否对特定表生效。默认不生效。MPP 功能比较消耗集群计算节点的资源,因此只有对设置了px_workers
的表才使用该功能。例如:ALTER TABLE t1 SET(px_workers=1)
表示 t1 表允许 MPPALTER TABLE t1 SET(px_workers=-1)
表示 t1 表禁止 MPPALTER TABLE t1 SET(px_workers=0)
表示 t1 表忽略 MPP(默认状态)
本示例以简单的单表查询操作,来描述 MPP 的功能是否有效。
-- 创建 test 表并插入基础数据。
CREATE TABLE test(id int);
INSERT INTO test SELECT generate_series(1,1000000);
-- 默认情况下 MPP 功能不开启,单表查询执行计划为 PG 原生的 Seq Scan
EXPLAIN SELECT * FROM test;
QUERY PLAN
--------------------------------------------------------
Seq Scan on test (cost=0.00..35.50 rows=2550 width=4)
(1 row)
复制
开启并使用 MPP 功能:
-- 对 test 表启用 MPP 功能
ALTER TABLE test SET (px_workers=1);
-- 开启 MPP 功能
SET polar_enable_px = on;
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 2:1 (slice1; segments: 2) (cost=0.00..431.00 rows=1 width=4)
-> Seq Scan on test (scan partial) (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
配置参与 MPP 的计算节点范围:
-- 查询当前所有只读节点的名称
CREATE EXTENSION polar_monitor;
SELECT name,host,port FROM polar_cluster_info WHERE px_node='t';
name | host | port
-------+-----------+------
node1 | 127.0.0.1 | 5433
node2 | 127.0.0.1 | 5434
(2 rows)
-- 当前集群有 2 个只读节点,名称分别为:node1,node2
-- 指定 node1 只读节点参与 MPP
SET polar_px_nodes = 'node1';
-- 查询参与并行查询的节点
SHOW polar_px_nodes;
polar_px_nodes
----------------
node1
(1 row)
EXPLAIN SELECT * FROM test;
QUERY PLAN
-------------------------------------------------------------------------------
PX Coordinator 1:1 (slice1; segments: 1) (cost=0.00..431.00 rows=1 width=4)
-> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4)
Optimizer: PolarDB PX Optimizer
(3 rows)
复制
使用 MPP 进行分区表查询
当前 MPP 对分区表支持的功能如下所示:
- 支持 Range 分区的并行查询
- 支持 List 分区的并行查询
- 支持单列 Hash 分区的并行查询
- 支持分区裁剪
- 支持带有索引的分区表并行查询
- 支持分区表连接查询
- 支持多级分区的并行查询
--分区表 MPP 功能默认关闭,需要先开启 MPP 功能
SET polar_enable_px = ON;
-- 执行以下语句,开启分区表 MPP 功能
SET polar_px_enable_partition = true;
-- 执行以下语句,开启多级分区表 MPP 功能
SET polar_px_optimizer_multilevel_partitioning = true;
复制
使用 MPP 加速索引创建
当前仅支持对 B-Tree 索引的构建,且暂不支持 INCLUDE
等索引构建语法,暂不支持表达式等索引列类型。
如果需要使用 MPP 功能加速创建索引,请使用如下参数:
polar_px_dop_per_node
:指定通过 MPP 加速构建索引的并行度。默认为1
。polar_px_enable_replay_wait
:当使用 MPP 加速索引构建时,当前会话内无需手动开启该参数,该参数将自动生效,以保证最近更新的数据表项可以被创建到索引中,保证索引表的完整性。索引创建完成后,该参数将会被重置为数据库默认值。polar_px_enable_btbuild
:是否开启使用 MPP 加速创建索引。取值为OFF
时不开启(默认),取值为ON
时开启。polar_bt_write_page_buffer_size
:指定索引构建过程中的写 I/O 策略。该参数默认值为0
(不开启),单位为块,最大值可设置为8192
。推荐设置为4096
。- 当该参数设置为不开启时,在索引创建的过程中,对于索引页写满后的写盘方式是 block-by-block 的单个块写盘。
- 当该参数设置为开启时,内核中将缓存一个
polar_bt_write_page_buffer_size
大小的 buffer,对于需要写盘的索引页,会通过该 buffer 进行 I/O 合并再统一写盘,避免了频繁调度 I/O 带来的性能开销。该参数会额外提升 20% 的索引创建性能。```language
SET polar_px_enable_btbuild = on; -- 使用如下语法创建索引 CREATE INDEX t ON test(id) WITH(px_build = ON); -- 查询表结构 \d test Table "public.test" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- id | integer | | | id2 | integer | | | Indexes: "t" btree (id) WITH (px_build=finish)
复制