HTAP系统函数
- gs_global_imcv_info()
描述:该函数用于显示当前数据库内IMCV表的基本信息,例如列存数据的加载情况、内存/磁盘空间占用等。分布式下仅支持在CN节点执行,结果返回所有DN节点的IMCV表的基本信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表1 gs_global_imcv_info参数说明 参数
参数
类型
描述
输出参数
node_name
text
节点名。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
一级分区名。
输出参数
subpartition_name
name
二级分区名。
输出参数
schema_name
name
Schema名。
输出参数
user_name
name
用户名。
输出参数
imcvnattr
smallint
加载列数量。
输出参数
imcvkey
int2vector
加载的列数组。
输出参数
priority
smallint
加载优先级(目前优先级暂不生效)。
- '1':PRIORITY_NONE无优先级。
- '2':PRIORITY_LOW低优先级。
- '3':PRIORITY_HIGH高优先级。
输出参数
rowgroup_num
integer
预期的行组数(即完全加载后应有的行组数)。
输出参数
populated_rowgroup_num
integer
实际加载的行组数(完全加载后该值应等于rowgroup_num)。
输出参数
cu_num_in_mem
integer
内存中的IMCU数量。
输出参数
cu_mem_size
bigint
IMCU占用的内存大小,单位为字节。
输出参数
cu_num_in_disk
integer
磁盘中的IMCU数量。
输出参数
cu_disk_size
bigint
IMCU占用的磁盘大小,单位为字节。
示例htapdb=# SELECT * FROM gs_global_imcv_info(); node_name | rel_name | partition_name | subpartition_name | schema_name | user_name | imcvnattr | imcvkey | priority | rowgroup_num | populated_rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size --------------+--------------------------+-----------------------------+-------------------+-------------+-----------+-----------+-------------+----------+--------------+------------------------+---------------+-------------+----------------+-------------- dn_6003_6004 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 1 | 1 | 7 | 24228 | 0 | 0 dn_6003_6004 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 1 | 1 | 7 | 8048 | 0 | 0 dn_6003_6004 | htap_flush_by_name_part1 | | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 dn_6001_6002 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 dn_6001_6002 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 1 | 1 | 7 | 8048 | 0 | 0 dn_6001_6002 | htap_flush_by_name_part1 | | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 (6 rows)
- gs_htap_imcv_info()
描述:该函数用于显示当前数据库内IMCV表的基本信息,例如列存数据的加载情况、内存/磁盘空间占用等。分布式下执行该函数返回当前节点的信息,查询所有节点信息可使用gs_global_imcv_info()函数。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表2 gs_htap_imcv_info参数说明 参数
参数
类型
描述
输出参数
relname
name
表名。
输出参数
partition_name
name
一级分区名。
输出参数
subpartition_name
name
二级分区名。
输出参数
schema_name
name
Schema的名字。
输出参数
user_name
name
用户名。
输出参数
imcvnattr
smallint
加载列数量。
输出参数
imcvkey
int2vector
加载的列数组。
输出参数
priority
smallint
加载优先级。(目前优先级暂不生效)
- '1':PRIORITY_NONE无优先级。
- '2':PRIORITY_LOW低优先级。
- '3':PRIORITY_HIGH高优先级。
输出参数
rowgroup_num
integer
预期的行组数(即完全加载后应有的行组数)。
输出参数
populated_rowgroup_num
integer
实际加载的行组数(完全加载后该值应等于rowgroup_num)。
输出参数
cu_num_in_mem
integer
内存中的IMCU数量。
输出参数
cu_mem_size
bigint
IMCU占用的内存大小,单位为字节。
输出参数
cu_num_in_disk
integer
磁盘中的IMCU数量。
输出参数
cu_disk_size
bigint
IMCU占用的磁盘大小,单位为字节。
示例:htapdb=# SELECT * FROM gs_htap_imcv_info(); rel_name | partition_name | subpartition_name | schema_name | user_name | imcvnattr | imcvkey | priority | rowgroup_num | populated_rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size --------------------------+-----------------------------+-------------------+-------------+-----------+-----------+-------------+----------+--------------+------------------------+---------------+-------------+----------------+-------------- htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | | | public | *** | 6 | 1 2 3 4 5 6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 (3 rows)
- gs_imcv_flush(reloid oid, partoid oid, parallelism integer, rebuild_mode integer)
描述:对数据库中指定的IMCV表或者分区立即进行一次重建,并显示重建的结果。重建过程将刷新IMCV表,移除旧数据并同步当前表的非活跃数据。在CN节点执行时,重建所有节点上该表的IMCV;在DN节点执行时,重建该节点上该表的IMCV。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或运维管理员才有权限执行此函数。
- 该函数不允许在事务块内执行。
- 在执行并行加载/重建时,每个worker都会额外占用内存、CPU和I/O(开启落盘)等资源,请根据实际硬件资源、系统负载谨慎控制加载或重建的并行度。
表3 gs_imcv_flush参数说明 参数类型
参数名
类型
描述
输入参数
reloid
oid
表oid。
输入参数
partoid
oid
分区oid。当查询分区表所有分区或非分区表时,该值可传入0。
输入参数
parallelism
integer
并行度。即加载/重建任务利用的bgworker数量。取值范围为1~256。实际后台bgworker数量不足时,使用实际能够拉起的bgworker执行重建任务。
输入参数
rebuild_mode
integer
重建模式。取值范围:
- 0:表示非强制重建,仅当列存数据未同步到行存时会触发重建。
- 1:表示强制重建,即无论列存数据是否为最新状态,都会触发重建。
输出参数
total
integer
实际处理的行组数。
输出参数
success
integer
成功处理的行组数。
输出参数
error
integer
处理失败的行组数,例如因为内存不足,未实际发生加载或者重建操作。
输出参数
skip
integer
跳过处理的行组数,例如数据足够新鲜,未发生重建操作。
示例:htapdb=# SELECT * FROM gs_imcv_flush(20834, 20838,1,1); total | success | error | skip -------+---------+-------+------ 1 | 1 | 0 | 0 (1 row)
- gs_imcv_flush(relname text, partname text, parallelism integer, rebuild_mode integer)
描述:对数据库中指定的IMCV表或者分区立即进行一次重建,并显示重建的结果。重建过程将刷新IMCV表,移除旧数据并同步当前表的非活跃数据。在CN节点执行时,重建所有节点上该表的IMCV;在DN节点执行时,重建该节点上该表的IMCV。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或运维管理员才有权限执行此函数。
- 该函数不允许在事务块内执行。
- 在执行并行加载/重建时,每个worker都会额外占用内存、CPU和I/O(开启落盘)等资源,请根据实际硬件资源、系统负载谨慎控制加载或重建的并行度。
表4 gs_imcv_flush参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。可缺省,缺省时如果表包含分区,则处理所有分区。
输入参数
parallelism
integer
并行度。即加载/重建任务利用的bgworker数量。取值范围为1~256。实际后台bgworker数量不足时,使用实际能够拉起的bgworker执行重建任务。可缺省,缺省时默认并行度为1,即无并行。
输入参数
rebuild_mode
integer
重建模式。取值范围:
- 0:表示非强制重建,仅当列存数据未同步到行存时会触发重建。
- 1:表示强制重建,即列存数据是否新鲜都会触发重建。
可缺省,缺省时代表非强制重建。
输出参数
total
integer
实际处理的行组数。
输出参数
success
integer
成功处理的行组数。
输出参数
error
integer
处理失败的行组数,例如因为内存不足,未实际发生加载或者重建操作。
输出参数
skip
integer
跳过处理的行组数,例如数据足够新鲜,未发生重建操作。
示例:--缺省partname、parallelism、rebuild_mode。 htapdb=# SELECT * FROM gs_imcv_flush('htap_flush_by_name_part1'); total | success | error | skip -------+---------+-------+------ 2 | 2 | 0 | 0 (1 row) --缺省parallelism、rebuild_mode。 htapdb=# SELECT * FROM gs_imcv_flush('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p1'); total | success | error | skip -------+---------+-------+------ 1 | 0 | 0 | 1 (1 row) --缺省rebuild_mode。 htapdb=# SELECT * FROM gs_imcv_flush('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p1',1); total | success | error | skip -------+---------+-------+------ 1 | 0 | 0 | 1 (1 row) htapdb=# SELECT * FROM gs_imcv_flush('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p1',1,1); total | success | error | skip -------+---------+-------+------ 1 | 1 | 0 | 0 (1 row)
- gs_global_htap_tmu_data(relname text, partname text, rowgroup_id integer)
描述:查看实时事务单元TMU中的活跃事务数据,只能在分布式CN下执行,返回所有DN节点的信息。当rowgroup_id为0时,返回表中所有活跃事务数据;当rowgroup_id>0时,返回表中指定行组中的活跃事务数据。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表5 gs_global_htap_tmu_data参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输入参数
rowgroup_id
integer
行组唯一标识。
输出参数
node_name
text
节点名。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
一级分区名,如果非一级分区,该字段为空。
输出参数
subpartition_name
name
二级分区名,如果非二级分区,该字段为空。
输出参数
schema_name
name
Schema名。
输出参数
rel_oid
oid
表oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
page_id
integer
所查行组中页面id。
输出参数
flag
smallint
0代表非脏页,1代表脏页。
输出参数
xid
xid
操作该数据的事务id。
示例:htapdb=# SELECT * FROM gs_global_htap_tmu_data('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p1', 0); node_name | rel_name | partition_name | subpartition_name | schema_name | rel_oid | rowgroup_id | page_id | flag | xid -----------+--------------------------+-----------------------------+-------------------+-------------+---------+-------------+---------+------+-------- datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 16389 | 1 | 0 | 0 | 203236 (1 row) - gs_htap_tmu_data(relname text, partname text, rowgroup_id integer)
描述:查看实时事务单元TMU中的活跃事务数据,返回当前节点表中活跃事务数据。当rowgroup_id为0时,返回表中所有活跃事务数据;当rowgroup_id>0时,返回表中指定行组的活跃事务数据。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或运维管理员才有权限执行此函数。
表6 gs_htap_tmu_data参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输入参数
rowgroup_id
integer
行组唯一标识。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
一级分区名,如果非一级分区,该字段为空。
输出参数
subpartition_name
name
二级分区名,如果非二级分区,该字段为空。
输出参数
schema_name
name
Schema名。
输出参数
rel_oid
oid
表oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
page_id
integer
所查行组中页面id。
输出参数
flag
smallint
0代表非脏页,1代表脏页。
输出参数
xid
xid
操作该数据的事务id。
示例:htapdb=# SELECT * FROM gs_htap_tmu_data('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2',0); rel_name | partition_name | subpartition_name | schema_name | rel_oid | rowgroup_id | page_id | flag | xid --------------------------+-----------------------------+-------------------+-------------+---------+-------------+---------+------+----- htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 16390 | 1 | 0 | 0 | 0 (1 row)
- gs_global_htap_tmu_chunk_meta(relname name, partname name, rowgroup_id integer)
描述:查看实时事务单元TMU元数据信息,只能在分布式CN下执行,返回所有DN节点的信息。当rowgroup_id为0时,返回所有行组中的实时事务单元TMU数据信息;当rowgroup_id>0时,返回表中指定行组中的实时事务单元TMU数据信息;当rowgroup_id为-1时,统计所有行组中的实时事务单元TMU数据后以单条返回。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表7 gs_global_htap_tmu_chunk_meta参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输入参数
rowgroup_id
integer
行组唯一标识。
输出参数
node_name
text
数据库节点名。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
一级分区名,如果非一级分区,该字段为空。
输出参数
subpartition_name
name
二级分区名,如果非二级分区,该字段为空。
输出参数
schema_name
name
Schema名。
输出参数
rel_oid
oid
表oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
page_count
bigint unsigned
所查行组中页面数量。
输出参数
dirty_page_count
bigint unsigned
所查行组中脏页面数量。
输出参数
clean_page_count
bigint unsigned
所查行组中非脏页面数量。
输出参数
dirty_ratio
real
所查行组中脏页占全部页面数量比例。
示例:htapdb=# SELECT * FROM gs_global_htap_tmu_chunk_meta('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2', 0); node_name | rel_name | partition_name | subpartition_name | schema_name | rel_oid | rowgroup_id | page_count | dirty_page_count | clean_page_count | dirty_ratio -----------+--------------------------+-----------------------------+-------------------+-------------+---------+-------------+------------+------------------+------------------+------------- datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 16390 | 1 | 1 | 0 | 1 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 16390 | 1 | 1 | 0 | 1 | 0 (2 rows) - gs_htap_tmu_chunk_meta(relname text, partname text, rowgroup_id integer)
描述:查看实时事务单元TMU元数据信息,分布式下执行返回当前节点的信息。当rowgroup_id为0时,返回所有行组中的实时事务单元TMU数据信息;当rowgroup_id>0时,返回表中指定行组中的实时事务单元TMU数据信息;当rowgroup_id为-1时,统计所有行组中的实时事务单元TMU数据后以单条返回。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表8 gs_htap_tmu_chunk_meta参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输入参数
rowgroup_id
integer
行组唯一标识。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
一级分区名,如果非一级分区,该字段为空。
输出参数
subpartition_name
name
二级分区名,如果非二级分区,该字段为空。
输出参数
schema_name
name
Schema名。
输出参数
rel_oid
oid
表oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
page_count
bigint unsigned
所查行组中页面数量。
输出参数
dirty_page_count
bigint unsigned
所查行组中脏页面数量。
输出参数
clean_page_count
bigint unsigned
所查行组中非脏页面数量。
输出参数
dirty_ratio
real
所查行组中脏页占全部页面数量比例。
示例:htapdb=# SELECT * FROM gs_htap_tmu_chunk_meta('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2', 0); rel_name | partition_name | subpartition_name | schema_name | rel_oid | rowgroup_id | page_count | dirty_page_count | clean_page_count | dirty_ratio --------------------------+-----------------------------+-------------------+-------------+---------+-------------+------------+------------------+------------------+------------- htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 16390 | 1 | 1 | 0 | 1 | 0 (1 row) - gs_global_imcv_bgworker_status()
描述:显示执行IMCV表重建的bgworker的状态信息,分布式下仅支持在CN节点执行,结果返回所有DN节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表9 gs_global_imcv_bgworker_status参数说明 参数类型
参数名
类型
描述
输出参数
node_name
text
数据库节点名。
输出参数
worker_pid
bigint
线程号。
输出参数
database_id
oid
数据库id。
输出参数
relation_id
oid
正在处理的IMCV表的oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
worker_status
text
表示init(初始化)、running(进行中)、ready(空闲)三种线程工作状态。
输出参数
worker_type
text
任务类型,包含以下五种:
- background_invalid_worker:无任务在执行。
- background_unknown_worker:未知任务。
- background_rowgroup_rebuild_worker:重建行组。
- background_async_populate_worker:异步加载。
- background_cache_worker:缓存区任务。
输出参数
start_time
timestamp with time zone
线程启动的时间戳。
示例:htapdb=# SELECT * FROM gs_global_imcv_bgworker_status(); node_name | worker_pid | database_id | relation_id | rowgroup_id | worker_status | worker_type | start_time -----------+-----------------+-------------+-------------+-------------+---------------+---------------------------+------------------------------- datanode1 | 140067573069568 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:16.282394+08 datanode1 | 140067645421312 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:12.267694+08 datanode1 | 140067608721152 | 0 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:12.332674+08 datanode2 | 139803070822144 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:16.274911+08 datanode2 | 139803270051584 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:16.284832+08 datanode2 | 139803153659648 | 0 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:12.374876+08 (6 rows)
- gs_imcv_bgworker_status()
描述:显示执行IMCV表重建的bgworker的状态信息,分布式下执行返回当前节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表10 gs_imcv_bgworker_status参数说明 参数类型
参数名
类型
描述
输出参数
worker_pid
bigint
线程号。
输出参数
database_id
oid
数据库id。
输出参数
relation_id
oid
正在处理的IMCV表的oid。
输出参数
rowgroup_id
integer
行组唯一标识。
输出参数
worker_status
cstring
表示init(初始化)、running(进行中)、ready(空闲)三种线程工作状态。
输出参数
worker_type
cstring
任务类型,包含background_invalid_worker(无任务在执行)、background_unknown_worker(未知任务)、background_rowgroup_rebuild_worker(重建行组)、background_async_populate_worker(异步加载)、background_cache_worker(缓存区任务)五种任务类型。
输出参数
start_time
timestamp with time zone
线程启动的时间戳。
示例:htapdb=# SELECT * FROM gs_imcv_bgworker_status(); worker_pid | database_id | relation_id | rowgroup_id | worker_status | worker_type | start_time -----------------+-------------+-------------+-------------+---------------+---------------------------+------------------------------- 140067573069568 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:16.282394+08 140067645421312 | 16384 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:12.267694+08 140067608721152 | 0 | 0 | 0 | ready | background_invalid_worker | 2025-12-02 21:10:12.332674+08 (3 rows)
- gs_global_imcu_meta(rel_name text, partname text)
描述:用于显示当前数据库下指定rel_name的IMCV表下的IMCU元信息,分布式下仅支持在CN节点执行,结果返回所有DN节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表11 gs_global_imcu_meta参数说明 参数类型
参数
类型
描述
输入参数
relname
text
IMCV表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
IMCV分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输出参数
node_name
text
数据库节点名字。
输出参数
rel_name
name
IMCV表名。
输出参数
partition_name
name
IMCV一级分区名。
输出参数
subpartition_name
name
IMCV二级分区名。
输出参数
schema_name
name
Schema名。
输出参数
rowgroup_id
integer
IMCU所在行组id。
输出参数
row_count
integer
IMCU行数。
输出参数
imcu_size
integer
IMCU大小,单位字节。
输出参数
imcu_data_size
integer
IMCU数据大小(不包含IMCU元信息),单位字节。
输出参数
compressed_data_size
integer
IMCU数据压缩后的大小。
输出参数
compressed_ratio
real
IMCU数据的压缩比。
输出参数
compressed_type
text
IMCU的压缩算法:
- none:无IMCU数据,无法压缩。
- uncompressed:未进行压缩。
- delta_plus_rle:IMCU数据采用delta_plus_rle压缩算法进行压缩。
- lz4_compressed:IMCU数据采用lz4压缩算法进行压缩。
- dict_compressed:IMCU数据采用dict压缩算法进行压缩。
输出参数
imcu_mode
integer
IMCU加载列数据特征:
- 1:普通。
- 2:全部为空。
- 3:相同值。
- 4:无最大最小值。
- 8:有空行。
- 16:无求和值。
输出参数
magic
integer
生成IMCU数据时的事务xid值,用于校验IMCU数据是否有效。
输出参数
attnum
smallint
IMCU加载列对应的attnum。
输出参数
scan_cnt
bigint
扫描IMCU的总次数。
输出参数
hit_cnt
bigint
命中内存态IMCU的次数。
输出参数
data_location
smallint
标记IMCU位于内存中、位于磁盘中或处于escape状态。- 0:内存。
- 1:磁盘。
- 2:escape状态,因内存不足,仅创建元数据,查询这部分数据时会回行存读取。
示例:
htapdb=# SELECT * FROM gs_global_imcu_meta('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2'); node_name | rel_name | partition_name | subpartition_name | schema_name | rowgroup_id | row_count | imcu_size | imcu_data_size | compressed_data_size | compressed_ratio | compressed_type | imcu_mode | magic | attnum | scan_cnt | hit_cnt | data_location -----------+--------------------------+-----------------------------+-------------------+-------------+-------------+-----------+-----------+----------------+----------------------+------------------+-----------------+-----------+-------+--------+----------+---------+--------------- datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4016 | 16 | 16 | 1 | uncompressed | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 1 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 2 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 3 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 4 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4032 | 24 | 24 | 1 | uncompressed | 4 | 0 | 5 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 6 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4016 | 16 | 16 | 1 | uncompressed | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 1 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 2 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 3 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 4 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4032 | 24 | 24 | 1 | uncompressed | 4 | 0 | 5 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 6 | 0 | 0 | 0 (14 rows)备注:该示例每一行代表一个IMCU(其中attnum为0的列为CTID列)。
- gs_imcu_meta(rel_name text, partname text)
描述:用于显示当前数据库下指定rel_name的IMCV表下的IMCU元信息,分布式下执行返回当前节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表12 gs_imcu_meta参数说明 参数类型
参数
类型
描述
输入参数
relname
text
IMCV表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
IMCV分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输出参数
rel_name
name
IMCV表名。
输出参数
partition_name
name
IMCV一级分区名。
输出参数
subpartition_name
name
IMCV二级分区名。
输出参数
schema_name
name
Schema名。
输出参数
rowgroup_id
integer
IMCU所在行组id。
输出参数
row_count
integer
IMCU行数。
输出参数
imcu_size
integer
IMCU大小,单位字节。
输出参数
imcu_data_size
integer
IMCU数据大小(不包含IMCU元信息),单位字节。
输出参数
compressed_data_size
integer
IMCU数据压缩后的大小。
输出参数
compressed_ratio
real
IMCU数据的压缩比。
输出参数
compressed_type
text
IMCU的压缩算法:
- none:无IMCU数据,无法压缩。
- uncompressed:未进行压缩。
- delta_plus_rle:IMCU数据采用delta_plus_rle压缩算法进行压缩。
- lz4_compressed:IMCU数据采用lz4压缩算法进行压缩。
- dict_compressed:IMCU数据采用dict压缩算法进行压缩。
输出参数
imcu_mode
integer
IMCU加载列数据特征:
- 1:普通。
- 2:全部为空。
- 3:相同值。
- 4:无最大最小值。
- 8:有空行。
- 16:无求和值。
输出参数
magic
integer
生成IMCU数据时的事务xid值,用于校验IMCU数据是否有效。
输出参数
attnum
smallint
IMCU加载列对应的attnum。
输出参数
scan_cnt
bigint unsigned
扫描IMCU的总次数。
输出参数
hit_cnt
bigint unsigned
命中内存态IMCU的次数。
输出参数
data_location
smallint
标记IMCU位于内存中、位于磁盘中或处于escape状态。- 0:内存。
- 1:磁盘。
- 2:escape状态,因内存不足,仅创建元数据,查询这部分数据时会回行存读取。
示例:
htapdb=# SELECT * FROM gs_imcu_meta('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2'); rel_name | partition_name | subpartition_name | schema_name | rowgroup_id | row_count | imcu_size | imcu_data_size | compressed_data_size | compressed_ratio | compressed_type | imcu_mode | magic | attnum | scan_cnt | hit_cnt | data_location --------------------------+-----------------------------+-------------------+-------------+-------------+-----------+-----------+----------------+----------------------+------------------+-----------------+-----------+-------+--------+----------+---------+--------------- htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4016 | 16 | 16 | 1 | uncompressed | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 1 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 2 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 3 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 4 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 4032 | 24 | 24 | 1 | uncompressed | 4 | 0 | 5 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | 1 | 0 | 0 | 0 | 0 | none | 3 | 0 | 6 | 0 | 0 | 0 (7 rows)备注:该示例每一行代表一个IMCU(其中attnum为0的列为CTID列)。
- gs_global_htap_file_status(db_name text)
描述:查看HTAP列存IMCU落盘文件的使用信息,分布式下仅支持在CN节点执行,结果返回所有DN节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表13 gs_global_htap_file_status参数说明 参数类型
参数
类型
描述
输入参数
db_name
text
数据库名字,输入为''或NULL表示查询所有数据库。
输出参数
node_name
text
数据库节点名字。
输出参数
db_oid
integer
数据库id。
输出参数
file_name
text
数据文件名。
输出参数
file_id
integer
数据文件标识,当前版本返回值只有2。
输出参数
extent_size
integer
数据文件的扩展大小。
输出参数
allocated_blocks
bigint
数据文件已分配给IMCU使用的页面数。
输出参数
total_blocks
bigint
数据文件在磁盘上的总物理页面数。
输出参数
high_water_mark
bigint
数据文件使用页数的高水位线。
输出参数
utilization
real
使用的block数占总block数的百分比。
输出参数
ext
text
扩展字段,当前版本为NULL。
示例:htapdb=# SELECT * FROM gs_global_htap_file_status('htapdb'); node_name | db_oid | file_name | file_id | extent_size | allocated_blocks | total_blocks | high_water_mark | utilization | ext -----------+--------+--------------------------+---------+-------------+------------------+--------------+-----------------+-------------+----- datanode1 | 16384 | global/imcu/16384/2_imcu | 2 | 4 | 0 | 0 | 0 | 1 | datanode2 | 16384 | global/imcu/16384/2_imcu | 2 | 4 | 0 | 0 | 0 | 1 | (2 rows)
- gs_htap_file_status(db_name text)
描述:查看HTAP列存IMCU落盘文件的使用信息,分布式下执行返回当前节点的信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表14 gs_htap_file_status参数说明 参数类型
参数
类型
描述
输入参数
db_name
text
数据库名字,输入为''或NULL表示查询当前节点下所有数据库。
输出参数
db_oid
oid
数据库id。
输出参数
file_name
text
数据文件名。
输出参数
file_id
integer
数据文件标识,当前版本返回值只有2。
输出参数
extent_size
integer
数据文件的扩展大小。
输出参数
allocated_blocks
bigint
数据文件已分配给IMCU使用的页面数。
输出参数
total_blocks
bigint
数据文件在磁盘上的总物理页面数。
输出参数
high_water_mark
bigint
数据文件使用页数的高水位线。
输出参数
utilization
real
使用的block数占总block数的百分比。
输出参数
ext
text
扩展字段,当前版本为NULL。
示例:htapdb=# SELECT * FROM gs_htap_file_status('htapdb'); db_oid | file_name | file_id | extent_size | allocated_blocks | total_blocks | high_water_mark | utilization | ext --------+--------------------------+---------+-------------+------------------+--------------+-----------------+-------------+----- 16384 | global/imcu/16384/2_imcu | 2 | 4 | 0 | 0 | 0 | 1 | (1 row)
- gs_global_htap_scan_hit_status(relname text, partname text)
描述:用于查询表粒度的IMCU命中率信息,分布式下仅支持在CN节点执行,结果返回所有DN节点的信息。当reloid为0时,返回当前数据库下所有IMCV表的命中率信息;当reloid非0时,返回指定表中的命中率信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员才有权限执行此函数。
表15 gs_global_htap_scan_hit_status参数说明 参数类型
参数
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输出参数
node_name
text
数据库节点名。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
分区名。
输出参数
subpartition_name
name
二级分区名。
输出参数
schema_name
name
Schema名。
输出参数
column_number
integer
列序号。
输出参数
column_name
name
列名。
输出参数
imcu_in_cache_cnt
bigint unsigned
该列存放于缓存区的IMCU数。
输出参数
imcu_ave_scan_cnt
bigint unsigned
该列平均每个IMCU的使用次数。
输出参数
imcu_total_scan_cnt
bigint unsigned
该列IMCU总的使用次数。
输出参数
imcu_ave_hit_cnt
bigint unsigned
该列平均每个IMCU的缓存命中数。
输出参数
imcu_total_hit_cnt
bigint unsigned
该列IMCU总的缓存命中数。
输出参数
total_hit_percentage
real
该列IMCU总的缓存命中率。
示例:
htapdb=# SELECT * FROM gs_global_htap_scan_hit_status('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p2'); node_name | rel_name | partition_name | subpartition_name | schema_name | column_number | column_name | imcu_in_cache_cnt | imcu_ave_scan_cnt | imcu_total_scan_cnt | imcu_ave_hit_cnt | imcu_total_hit_cnt | total_hit_percentage -----------+--------------------------+-----------------------------+-------------------+-------------+---------------+-------------+-------------------+-------------------+---------------------+------------------+--------------------+---------------------- datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 0 | ctid | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | c1 | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 2 | c2 | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 3 | c3 | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 4 | c4 | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 5 | c5 | 1 | 0 | 0 | 0 | 0 | 0 datanode1 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 6 | c6 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 0 | ctid | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 1 | c1 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 2 | c2 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 3 | c3 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 4 | c4 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 5 | c5 | 1 | 0 | 0 | 0 | 0 | 0 datanode2 | htap_flush_by_name_part1 | htap_flush_by_name_part1_p2 | | public | 6 | c6 | 1 | 0 | 0 | 0 | 0 | 0 (14 rows) - gs_htap_scan_hit_status(relname text, partname text)
描述:用于查询表粒度的IMCU命中率信息,分布式下执行返回当前节点的信息。当relname与partname均为null或空时,返回当前节点下所有IMCV表的命中率信息;其他情况返回指定表或指定分区的命中率信息。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
表16 gs_htap_scan_hit_status参数说明 参数类型
参数
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名,查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输出参数
rel_name
name
表名。
输出参数
partition_name
name
分区名。
输出参数
subpartition_name
name
二级分区名。
输出参数
schema_name
name
Schema名。
输出参数
column_number
integer
列序号。
输出参数
column_name
name
列名。
输出参数
imcu_in_cache_cnt
bigint unsigned
该列存放于缓存区的IMCU数。
输出参数
imcu_total_cnt
bigint unsigned
该列总的IMCU数。
输出参数
imcu_ave_scan_cnt
bigint unsigned
该列平均每个IMCU的使用次数。
输出参数
imcu_total_scan_cnt
bigint unsigned
该列IMCU总的使用次数。
输出参数
imcu_ave_hit_cnt
bigint unsigned
该列平均每个IMCU的缓存命中数。
输出参数
imcu_total_hit_cnt
bigint unsigned
该列IMCU总的缓存命中数。
输出参数
total_hit_percentage
real
该列IMCU总的缓存命中率。
示例:
gaussdb=# SELECT * FROM gs_htap_scan_hit_status('htap_flush_by_name_part1', 'htap_flush_by_name_part1_p1'); rel_name | partition_name | subpartition_name | schema_name | column_number | column_name | imcu_in_cache_cnt | imcu_total_cnt | imcu_ave_scan_cnt | imcu_total_scan_cnt | imcu_ave_hit_cnt | imcu_total_hit_cnt | tot al_hit_percentage --------------------------+-----------------------------+-------------------+-------------+---------------+-------------+-------------------+----------------+-------------------+---------------------+------------------+--------------------+---- ------------------ htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 0 | ctid | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 1 | c1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 2 | c2 | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 3 | c3 | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 4 | c4 | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 5 | c5 | 1 | 1 | 0 | 0 | 0 | 0 | 0 htap_flush_by_name_part1 | htap_flush_by_name_part1_p1 | | public | 6 | c6 | 1 | 1 | 0 | 0 | 0 | 0 | 0 (7 rows) - gs_imcu_size_estimation(relname text, partname text, colnum_name_array text[])
描述:该函数返回该表指定分区指定列创建IMCV列存数据预估的内存使用值,DN节点执行时返回当前节点预估值,CN节点执行返回各个节点预估值。
返回值类型:record
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
- 不支持备机执行。该函数约束与HTAP DDL保持一致,相关报错信息与实际执行DDL报错信息一致。
表17 gs_imcu_size_estimation参数说明 参数类型
参数名
类型
描述
输入参数
relname
text
表名。如果查询跨Schema的表信息,支持传入'schema.relname'形式。
输入参数
partname
text
分区名。查询分区表所有分区或非分区表时,该值可传入NULL或者''。
输入参数
colnum_name_array
text[]
列名数组。
输出参数
node_name
name
节点名。
输出参数
estimated_size
bigint unsigned
预估内存使用值,单位字节。
示例:
htapdb=# SELECT * FROM gs_imcu_size_estimation('estimate_htap', '', ARRAY['id']); node_name | estimated_size -----------+---------------- datanode1 | 28411 datanode2 | 28089 (2 rows) - gs_htap_data_maintenance(rel_oid oid, type integer)
描述:列存数据的维护接口,提供两项能力(1)卸载列存数据(清理内存和磁盘空间);(2)所有列存数据落盘的逃生手段。
返回值类型:text
该接口会直接卸载IMCV保护行存TP业务,会导致已经使用IMCV Scan的业务报错,使用前需充分确认影响。仅供因配置或其他原因导致IMCV内存等资源使用过量,集群又无法停机时,紧急逃生使用。
- 仅参数enable_htap=on时可用。
- 仅系统管理员或者运维管理人员才有权限执行此函数。
- 该函数不允许在事务内执行。
- 分布式下该函数只能在DN执行,不支持在CN执行。
表18 gs_htap_data_maintenance参数说明 参数类型
参数
类型
描述
输入参数
rel_oid
oid
行存表oid,0表示处理当前DN节点的数据库下所有表。
输入参数
type
integer
处理类型,取值范围:
- 0:表示卸载对应表的所有IMCV数据,包括内存和落盘数据文件,仅保留元数据,gs_imcv系统表还存在信息,通过gs_imcv_status视图查询状态为'E'。入参rel_oid为0时,卸载所有表IMCV数据,落盘文件会被清理,磁盘空间也会释放。使用该接口卸载IMCV后,IMCV状态为'E',此时无法使用HTAP相关功能,需要重新创建IMCV或执行VACUUM FULL将基表与对应分区的IMCV状态转为'F' 。
- 1:该参数已废弃。
- 2:表示将对应表的IMCV数据全部落盘。
示例:htapdb=# SELECT * FROM gs_htap_data_maintenance(16824,0); gs_htap_data_maintenance -------------------------- Maintenance finish. (1 row) htapdb=# SELECT * FROM gs_htap_data_maintenance(16824,2); gs_htap_data_maintenance -------------------------- Maintenance finish. (1 row)