更新时间:2024-12-06 GMT+08:00
分享

其它函数

pgxc_pool_check()

描述:检查连接池中缓存的连接数据是否与pgxc_node一致。8.3.0及以上集群版本中该参数已废弃。

返回值类型:boolean

pgxc_pool_reload()

描述:更新连接池中缓存的连接信息。

返回值类型:boolean

pgxc_lock_for_backup()

描述:备份前给集群加锁,备份是为了在新增节点上执行恢复操作。

返回值类型:boolean

pgxc_lock_for_backup是在使用gs_dump或gs_dumpall工具备份集群前,用来给集群加锁的。当给集群加锁后,不允许有改变系统结构的操作。该函数不影响DML语句。

pg_pool_validate(clear boolean, co_node_name cstring)

描述:清理CN上无效的后台线程(这些后台线程持有无效的pooler连接,这里无效的pooler连接指的是连接到当前DN备实例的连接)。

返回值类型:record

pg_nodes_memory()

描述:查看所有节点的内存占用。

返回值类型:record

table_skewness(text)

描述:查看表数据在所有节点的占比。

参数:表示待查询表的表名,为text类型。

返回值类型:record

table_skewness(table_name text, column_name text[, row_num text])

描述:查看表里某列数据,按hash分布规则,在各节点的占比情况。结果以数据节点上的数据量排序。

参数:table_name为表名;column_name为列名;row_num表示查看当前列所有数据,可缺省,默认为0。非0时,表示抽取指定条数的数据查看占比情况(每次采样结果可能不相同,只保证采集row_num条数据进行占比计算)。

返回值类型:record

示例:

根据tx表中的a列,按hash分布,则在1,2,0编号的DN上分布的数据量分别为7条,2条,1条。

1
2
3
4
5
6
7
SELECT * FROM table_skewness('tx','a');
 seqnum | num |  ratio
--------+-----+----------
 1      | 7   | 70.000%
 2      | 2   | 20.000%
 0      | 1   | 10.000%
(3 row)

table_data_skewness(data_row record, locatorType "char")

描述:计算指定表中列拼接出的record,对应的桶分布索引。

参数:data_row表示指定表中列拼接出的record,locatorType表示分布规则,当前建议指定'H',按hash分布计算。

返回值类型:smallint

示例:

计算tx表中a列拼接的record,按照hash分布规则对应的桶分布索引。

1
2
3
4
5
6
7
8
9
select a, table_data_skewness(row(a), 'H') from tx;
 a | table_data_skewness 
---+---------------------
 3 |                   0
 6 |                   2
 7 |                   2
 4 |                   1
 5 |                   1
(5 rows)

table_distribution(schemaname text, tablename text)

描述:查看指定表在各个节点上占用的存储空间。

参数:表示待查询表的模式名和表名,均为text类型。

返回值类型:record

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。
  • 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。

table_distribution(regclass)

描述:查看指定表在各个节点上占用的存储空间。

参数:表示待查询表的表名或OID,表名可以有模式名限定。为regclass类型。

返回值类型:record

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。
  • 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。

table_distribution()

描述:查看当前库中所有表在各节点的存储空间分布情况。

返回值类型:record

  • 使用本函数涉及全库表信息查询,需要具备管理员权限或预置角色gs_role_read_all_stats权限。
  • 当前基于table_distribution()函数,GaussDB(DWS)提供视图PGXC_GET_TABLE_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。

gs_table_distribution(schemaname text, tablename text)

描述:快速查看指定表在各个节点上占用的存储空间。

返回值类型:record

表1 gs_table_distribution(schemaname text, tablename text)函数返回字段

名称

类型

描述

schemaname

name

模式名称。

tablename

name

表名。

relkind

character

类型。

  • i:索引
  • r:表

nodename

name

节点名称。

dnsize

bigint

表在该节点上的存储空间大小,单位:字节。

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。
  • 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表查询,建议优先使用gs_table_distribution函数。

gs_table_distribution()

描述:快速查看当前库中所有表在各节点的存储空间分布情况。

返回值类型:record

表2 gs_table_distribution()函数返回字段

名称

类型

描述

schemaname

name

模式名称。

tablename

name

表名。

relkind

character

类型,i: 索引,r: 表。

nodename

name

节点名称。

dnsize

bigint

表在该节点上的存储空间大小,单位:字节。

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。
  • 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表查询,建议优先使用gs_table_distribution函数。
  • 基于gs_table_distribution()函数,GaussDB(DWS)自8.2.1集群版本提供了视图PGXC_WLM_TABLE_DISTRIBUTION_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。

check_foreign_key_constraint(schema.table)

描述:检测外键表中的数据是否满足外键约束。该参数仅9.1.0.200及以上集群版本支持。

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
set info_constraint_options = 'foreign_key';

CREATE TABLE ptt1 (a int,b int,e varchar(50),f varchar(50),PRIMARY KEY (a,b)) DISTRIBUTE BY HASH(a,b);
CREATE TABLE tt2 (a int , b int, c int, d int) DISTRIBUTE BY HASH(a,b);

select check_foreign_key_constraint('table_constraints.tt2');
check_foreign_key_constraint
-----------------------------------------
tt2 table has no foreign key constraint

ALTER TABLE tt2 ADD CONSTRAINT fk_tt1_a FOREIGN KEY (a,b) REFERENCES ptt1(a,b);

select check_foreign_key_constraint('table_constraints.tt2');
check_foreign_key_constraint
-------------------------------------------
tt2 satisfied all Foreign key constraints

plan_seed()

描述:获取前一次查询语句的seed值(内部使用)。

返回值类型:integer

pg_stat_get_env()

描述:提供获取当前节点的环境变量信息。

返回值类型:record

pg_stat_get_thread()

描述:提供当前节点下所有线程的状态信息。

返回值类型:record

pgxc_get_os_threads()

描述:提供当前集群中所有正常节点下的线程状态信息。

返回值类型:record

pg_stat_get_sql_count()

描述:提供当前节点中所有用户执行的SELECT/UPDATE/INSERT/DELETE/MERGE INTO语句的计数和响应时间的统计结果以及DDL、DML、DCL语句的计数结果。

返回值类型:record

pgxc_get_sql_count()

描述:提供当前集群所有节点中所有用户执行的SELECT/UPDATE/INSERT/DELETE/MERGE INTO语句的计数和响应时间的统计结果以及DDL、DML、DCL语句的计数结果。

返回值类型:record

pgxc_get_workload_sql_count()

描述:提供当前集群所有CN上所有Workload控制组内执行的SELECT/UPDATE/INSERT/DELETE语句的计数统计结果以及DDL、DML、DCL类型语句的计数统计结果。

返回值类型:record

pgxc_get_workload_sql_elapse_time()

描述:提供当前集群所有CN上所有Workload控制组内执行的SELECT/UPDATE/INSERT/DELETE语句的响应时间统计结果。

返回值类型:record

get_instr_unique_sql()

描述:提供当前节点中收集的Unique SQL的信息。如果是CN节点,将返回该CN上收集的Unique SQL的完整信息,即会收集其他CN和DN上对应Unique SQL的信息并进行汇总展示;如果是DN节点,将返回本DN节点上的Unique SQL信息。详见视图GS_INSTR_UNIQUE_SQL。

返回值类型:record

reset_instr_unique_sql(cstring, cstring, INT8)

描述:清理已收集的Unique SQL信息。输入参数含义如下:

  • GLOBAL/LOCAL:清理范围为所有节点或当前节点。
  • ALL/BY_USERID/BY_CNID/BY_GUC:ALL表示清理所有,BY_USERID/BY_CNID表示按照USERID或CNID进行清理,BY_GUC表示清理操作是由GUC参数instr_unique_sql_count设置值变小引起的。
  • 第三个参数值对应第二个参数设置,ALL/BY_GUC的情况下该值无意义。

返回值类型:bool

pgxc_get_instr_unique_sql()

描述:提供集群中所有CN上收集的Unique SQL的完整信息。该函数只能在CN上执行。

返回值类型:record

get_instr_unique_sql_remote_cns()

描述:提供集群中除正在执行此函数的CN之外的所有CN上收集的Unique SQL的完整信息。该函数只能在CN上执行。

返回值类型:record

pgxc_get_node_env()

描述:提供获取集群中所有节点的环境变量信息。

返回值类型:record

gs_switch_relfilenode()

描述:交换两个表或分区的元信息(重分布工具内部使用,用户直接使用会有错误信息提示)。

返回值类型:integer

copy_error_log_create()

描述:创建COPY FROM容错机制所需要的错误表(public.pgxc_copy_error_log)。

返回值类型:boolean

  • 此函数会尝试创建public.pgxc_copy_error_log表,表的详细信息请参见表3
  • 在relname列上创建B-tree索引,并REVOKE ALL on public.pgxc_copy_error_log FROM public对错误表进行权限控制(与COPY语句权限一致)。
  • 由于尝试创建的public.pgxc_copy_error_log定义是一张行存表,因此集群上必须支持行存表的创建才能够正常运行此函数,并使用后续的COPY容错功能。需要特别注意的是,enable_hadoop_env这个GUC参数开启后会禁止在集群内创建行存表(GaussDB(DWS)默认为off)。
  • 此函数自身权限为Sysadmin及以上(与错误表、COPY权限一致)。
  • 若创建前public.pgxc_copy_error_log表已存在或者copy_error_log_relname_idx索引已存在,则此函数会报错回滚。
表3 错误表public.pgxc_copy_error_log信息

列名称

类型

描述

relname

varchar

表名称。以模式名.表名形式显示。

begintime

timestamp with time zone

出现数据格式错误的时间。

filename

varchar

出现数据格式错误的数据源文件名。

rownum

bigint

在数据源文件中,出现数据格式错误的行号。

rawrecord

text

在数据源文件中,出现数据格式错误的原始记录。为了防止字段长度过大,限制字段的长度不超过1024 byte。

detail

text

详细错误信息。

columnname

varchar

在数据源文件中,出现数据格式错误的字段名称。仅8.2.1.100及以上版本支持。

errcode

varchar

出错信息对应的错误码,使用sqlstate错误码。仅8.2.1.100及以上版本支持。

queryid

bigint

执行copy的sql语句id,用于唯一标识一条sql语句。仅8.2.1.100及以上版本支持。

pv_compute_pool_workload()

描述:提供云上加速集群当前负载信息。

返回值类型:record

pg_stat_get_status(tid, num_node_display)

描述:查询当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况,其返回结果的详细含义参见PG_THREAD_WAIT_STATUS视图。输入参数含义如下:

  • tid:表示线程ID,bigint类型。如果为NULL,则返回所有工作线程和辅助线程的等待情况;否则只返回指定ID线程的等待情况。
  • num_node_display:integer类型。对于等待状态为“wait node”的记录,指定其wait_status列中显示的被等待节点的最大数量。
    • 如果为空或者小于等于0,则只显示一个被等待节点。
    • 如果大于20,则最多只显示20个节点。
    • 如果大于0且小于等于20,则显示数量为num_node_display和实际被等待节点数量的最小者。例如查询“SELECT * from pg_stat_get_status(NULL, 10)”,如果实际被等待节点数量大于10,则只随机显示其中10个节点名称,如果实际被等待节点数量小于等于10,则显示全部被等待节点名称。当实际被等待节点数量大于显示数量时,被显示的节点名称为随机挑选。

返回值类型:record

pgxc_get_thread_wait_status(num_node_display)

描述:查询集群各个节点上所有SQL语句产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态。其返回结果的详细含义参见PGXC_THREAD_WAIT_STATUS视图。输入参数num_node_display的类型和含义与上述函数pg_stat_get_status相同。

返回值类型:record

pgxc_os_run_info()

描述:查询集群中各节点上操作系统运行的状态信息。函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PV_OS_RUN_INFO”章节。

返回值类型:record

get_instr_wait_event()

描述:查询当前实例上各类等待状态和事件的统计信息。函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>GS_WAIT_EVENTS”。如果GUC参数enable_track_wait_event为off,则返回0行。

返回值类型:record

pgxc_wait_events()

描述:查询集群中各节点上各类等待状态和事件的统计信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PGXC_WAIT_EVENTS”视图。如果GUC参数enable_track_wait_event为off,则返回0行。

返回值类型:record

pgxc_stat_bgwriter()

描述:查询集群中各节点上后端写进程活动的统计信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PG_STAT_BGWRITER”视图。

返回值类型:record

pgxc_stat_replication()

描述:查询集群中各节点上日志同步的状态信息,如发起端发送日志位置,收端接收日志位置等,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PG_STAT_REPLICATION”视图。

返回值类型:record

pgxc_replication_slots()

描述:查询集群中各DN上复制的状态信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PG_REPLICATION_SLOTS”视图。

返回值类型:record

pgxc_settings()

描述:查询集群中各节点上运行时参数的相关信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PG_SETTINGS”视图。

返回值类型:record

pgxc_instance_time()

描述:查询集群中各节点的运行时间统计信息及各执行阶段所消耗时间,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PV_INSTANCE_TIME”视图。

返回值类型:record

pg_stat_get_redo_stat()

描述:查询当前节点上的XLOG重做统计信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PV_REDO_STAT”视图。

返回值类型:record

pgxc_redo_stat()

描述:查询集群中各节点上的XLOG重做统计信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>PV_REDO_STAT”视图。

返回值类型:record

get_local_rel_iostat()

描述:查询当前实例上磁盘读写的统计信息。函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>GS_REL_IOSTAT”视图。

返回值类型:record

pgxc_rel_iostat()

描述:查询集群中各节点上磁盘读写的统计信息,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>GS_REL_IOSTAT”视图。

返回值类型:record

get_node_stat_reset_time()

描述:返回当前实例统计信息被重置的时间。

返回值类型:timestamptz

pgxc_node_stat_reset_time()

描述:查询集群中各节点统计信息被重置的时间,函数返回结果信息详见《开发指南》中“系统表和系统视图>系统视图>GS_NODE_STAT_RESET_TIME”视图。

返回值类型:record

实例正常运行过程中,内存中的各类统计数值会逐渐累加,以下情况会导致内存中的统计数值被重置为0:
  • 实例重启或集群发生了切换;
  • 数据库Database被删除(drop);
  • 用户执行了重置操作,如执行pgstat_recv_resetcounter函数会将数据库中的统计计数器清零,执行reset_instr_unique_sql函数会将Unique SQL数据清零。

如果发生了以上事件,GaussDB(DWS)会记录统计信息被重置的时间,可通过get_node_stat_reset_time函数查询。

pgxc_parallel_query(text, text)

描述:在指定类型的数据实例上执行指定的SQL查询语句,并把查询语句的结果返回给当前CN。该函数8.1.2及以上版本支持。

函数有两个参数:

第一个参数:SQL语句在哪些实例上执行。当前支持的有效入参是 'dn', 'datanode','cn', 'coordinator', 'all', 其它值会导致函数执行报错。其中 'dn', 'datanode'表示在所有DN上执行,'cn', 'coordinator'表示在所有CN上执行, all表示在所有的CN和所有的DN上执行。

第二个参数:需要发往远程节点执行的SQL语句,函数内部会对SQL语句中查询的对象进行校验,不支持用户表、分布式表和自定义的多结果集函数。

返回值类型:record

  • 该函数功能仅为便于开发人员高效的收集集群内实例执行信息或者状态的视图,不建议用户直接使用。
  • 该函数为多结果集函数,返回的数据类型为record,所以需要在函数调用后面增加AS语句显示的指出输出的列名和数据类型,如下所示:
    SELECT * FROM pgxc_parallel_query('all', 'select node_name, db_name, thread_name, query_id, tid, lwtid, ptid, tlevel, smpid, wait_status, wait_event from pg_thread_wait_status') AS (node_name text, db_name text, thread_name text, query_id bigint, tid bigint, lwtid integer , ptid integer, tlevel integer , smpid integer, wait_status text, wait_event text);
  • 函数第二个参数指定的SQL语句输出结果的数据类型必须跟AS后面指明的数据类型一致,否则执行时可能会因为类型不匹配而报错。
  • 函数第二个参数指定的SQL语句中不能触发跨节点的查询动作,否则会触发执行报错。
  • 函数第二个参数指定的SQL语句只能是SELECT/UPDATE/DELETE/INSERT语句中的一种,且
    • 不支持语句中有returning语句。
    • 调用函数用户需具有SQL语句中对象相应的操作权限。
    • 如果是INSERT语句,不支持INSERT OVERWRITE、UPSERT、和INSERT INTO。
    • 对于UPDATE/DELETE/INSERT语句,只允许初始化用户在就地升级模式下或者管理员用户在重分布模式下执行;要求语句在每个实例上修改的记录数相同,否则执行会报错;函数会输出一条一列bigint类型的数值,此数值表示语句在每个实例上操作的记录数。
      SELECT * FROM pgxc_parallel_query('cn', 'UPDATE pg_partition SET relpages = 0') AS (updated bigint);

create_wdr_snapshot()

描述:创建性能数据快照。

返回值类型:text

  • 该函数只有数据库管理员SYSADMIN才可以执行,非管理员执行会提示无权限。
  • 该函数只能在CN上执行,在DN上执行会返回:“WDR snapshot can only be created on coordinator.”。
  • 执行该函数前需确认enable_wdr_snapshot参数处于开启状态。如果enable_wdr_snapshot为off,执行该函数会返回:“WDR snapshot request can't be executed, because GUC parameter 'enable_wdr_snapshot' is off.”。
  • 如果执行该函数时,快照线程由于节点重启等原因尚未启动,会提示错误:“WDR snapshot request can not be accepted, please retry later.”。
  • 如果执行该函数失败,会提示:“Cannot respond to WDR snapshot request.”。
  • 如果执行成功,会返回:“WDR snapshot request has been submitted.”。该提示表明创建快照请求已发送至后台快照线程,但不代表创建快照成功。

kill_snapshot(scope cstring)

描述:中止后台快照线程。该函数向后台快照线程发送中止信号并等待线程结束。

输入参数scope:表示操作范围。该参数取值范围为local和global。

  • local表示中止当前CN上的快照线程。
  • global表示不仅会中止当前CN上的快照线程,还会向集群中所有其他CN发送中止快照线程的请求,即中止集群中所有CN上的快照线程。
  • 如果输入其他值,则报错“Scope is invalid, use "local" or "global".”。
  • 输入参数可为空,表示默认取值为local。

返回值类型:无

  • 该函数只有数据库管理员SYSADMIN才有权执行,非管理员执行会提示无权限。
  • 该函数只能在CN上执行,在DN上执行会提示:“kill_snapshot can only be executed on coordinator.”;
  • 执行该函数会向后台快照线程发送中止信号并等待其结束。如果100s内快照线程仍未中止则会报错:“Kill snapshot thread failed”;

generate_wdr_report(begin_snap_id bigint, end_snap_id bigint, report_type cstring, report_scope cstring, node_name cstring)

描述:创建负荷分析报告。

输入参数含义如下:

  • begin_snap_id,end_snap_id:生成报告的起止快照ID,bigint型,要求begin_snap_id < end_snap_id,并且起止快照的时间没有交集。判断快照时间是否有交集可通过查询dbms_om.snapshot表格select s1.end_ts < s2.start_ts from (select * from dbms_om.snapshot where snapshot_id=end_snap_id) as s2;,如果返回true则没有交集,反之有交集。
  • report_type:报告类型,cstring型,包括“summary”,“detail”,“all”三种类型。
  • report_scope:报告范围,cstring型,包括“cluster”和“node”两种。
  • node_name:节点名称,cstring型,如果report_scope="node",该参数必须是pg_catalog. pgxc_node表格中node_name字段里的CN或DN节点名称。
返回值类型:text
  • 该函数只有数据库管理员SYSADMIN才有权执行,非管理员执行会提示无权限。
  • 该函数只能在CN上执行,在DN上执行会提示错误:“WDR report can only be created on coordinator.”。
  • 如果生成报告成功,会返回:“Report %s has been generated”。
  • 生成报告的两个快照期间不能发生统计信息重置事件,否则会提示错误:“Instance reset time is different”。引起统计信息重置的事件参见pgxc_node_stat_reset_time函数。

wdr_xdb_query(db_name text, snapshot_id bigint, view_name text)

描述:查询指定数据库下的指定视图。有的视图在不同数据库中查询结果不同,例如global_table_stat视图用于查询表格的统计信息,由于不同数据库下表格不同,在不同数据库中查询该视图得到的结果也不同。wdr_xdb_query函数可以在当前连接中访问db_name指定的数据库,并在该数据库中查询view_name指定的视图。输入参数含义如下:

  • db_name:指定的数据库名称,text型。
  • snapshot_id:快照ID,bigint型,参见“性能视图快照”。
  • view_name:指定视图名称,text型。视图名称必须在如下白名单中:
    • global_table_stat
    • global_table_change_stat
    • global_column_table_io_stat
    • global_row_table_io_stat

      返回值类型:record,其第一列为snapshot_id bigint,第二列为db_name text,其他列的名称、类型和顺序与view_name指定的视图相同。

      示例:

      1
      2
      select snapshot_id, db_name, schemaname, relname, distribute_mode, seq_scan ,seq_tuple_read ,index_scan ,index_tuple_read ,tuple_inserted
      ,tuple_updated ,tuple_deleted ,tuple_hot_updated ,live_tuples ,dead_tuples from wdr_xdb_query('postgres'::text, 1, 'global_table_stat'::text) as i(snapshot_id bigint, db_name text, schemaname name, relname name, distribute_mode char, seq_scan bigint, seq_tuple_read bigint, index_scan bigint, index_tuple_read bigint, tuple_inserted bigint, tuple_updated bigint, tuplee_deleted bigint, tuple_hot_updated bigint, live_tuples bigint, dead_tuples bigint);
      
      • 该函数仅8.1.2及以上版本支持。
      • 该函数只有数据库管理员SYSADMIN才有权执行,非管理员执行会提示无权限。
      • 该函数只能查询白名单中的视图,如果查询其他视图,会报错:“Input view name is invalid.”。

vac_fileclear_relation(oid)

描述:用于强制清理指定列存表中被VACUUM重写的文件,完成空间回收。

参数:列存表oid。

返回值类型:integer

  • 使用本函数前需要设置参数colvacuum_threshold_scale_factor,并确保VACUUM对指定列存表的文件完成重写后,才会清理文件并回收空间。
  • 本函数将对指定的列存表施加排他锁。

vac_fileclear_all_relation()

描述:用于强制清理所有列存表中被VACUUM重写的文件,完成空间回收。

返回值类型:record

get_col_file_info(table_name)

描述:查询指定列存表的空CU文件数和总CU文件数,该函数仅8.2.0及以上集群版本支持。

参数:列存表名。

返回值类型:int

返回值字段:

  • total_file_num int:总CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为总文件数。
  • empty_file_num int:空CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为空文件数。

示例:

1
2
3
4
5
call get_col_file_info('t4');
 total_file_num | empty_file_num
----------------+----------------
             10 |              7
(1 row)

get_all_col_file_info()

描述:查询所有列存表的空CU文件数和总CU文件数,该函数仅8.2.0及以上集群版本支持。

返回值类型:record

返回值字段:

  • space_name text:列存表所属schema
  • table_name text:列存表名
  • total_file_num int:总CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为总文件数。
  • empty_file_num int:空CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为空文件数。

示例:

1
2
3
4
5
6
7
call get_all_col_file_info();
 space_name | table_name | total_file_num | empty_file_num
------------+------------+----------------+----------------
 public     | t4         |             10 |              7
 public     | t2         |              1 |              1
 public     | t1         |              3 |              0
(3 rows)

pg_get_bucket_epoch(relid)

描述:查询v3表在当前节点上的epoch值。对于分区表,需要输入父表oid,将打印所有子分区的epoch值。该函数只支持在写VW上执行。该函数仅9.1.0.200及以上集群版本支持。

返回值类型:record

返回值字段:

  • relfilenode oid:列存非分区表的relfilenode。对于分区表,此值为0。
  • partfilenode oid:列存分区表的relfilenode。对于非分区表,此值为0。
  • epoch xid:当前节点上该表对应的epoch值。

示例:

1
2
3
4
5
select * from pg_get_bucket_epoch(2147483732);
 relfilenode | partfilenode |  epoch
-------------+--------------+--------
  2137383742 |            0 | 1000001
(1 row)

pg_get_bucket_epoch(tablespaceid, databaseid, relfilenode)

描述:查询v3表在当前节点上的epoch值。输入v3表所在的表空间oid,数据库oid和表对应的relfilenode。该函数在写VW或读VW上均可执行。该函数仅9.1.0.200及以上集群版本支持。

返回值类型:xid

返回值字段:

epoch xid:当前节点上该表对应的epoch值。

示例:

1
2
3
4
5
select * from pg_get_bucket_epoch(2147483729, 16792, 2147483732);
 epoch
-------
1000001
(1 row)

pgxc_get_bucket_epoch(tablespaceid, databaseid, relfilenode)

描述:查询v3表在所有dn节点上的epoch值。输入v3表所在的表空间oid,数据库oid和表对应的relfilenode。该函数在写VW或读VW上均可执行。该函数仅9.1.0.200及以上集群版本支持。

返回值类型:record

返回值字段:

  • nodename text:节点名称。
  • epoch xid:当前节点上该表对应的epoch值。

示例:

1
2
3
4
5
6
7
select * from pgxc_get_bucket_epoch(2147483729, 16792, 2147483732);
  nodename |  epoch
-----------+---------
 datanode3 | 1000001
 datanode1 |       0
 datanode2 |       0
(1 row)

get_volatile_pg_class()

描述:获取当前会话中所有volatile临时表相关的pg_class元数据。该函数仅8.2.0及以上集群版本支持。

返回值类型:record

返回值字段:

  • oid:返回volatile临时表的oid。
  • 其他字段:同pg_class系统表中的基础字段(不包括系统隐藏字段)。

get_volatile_pg_class(relname text)

描述:获取当前会话中指定volatile临时表相关的pg_class元数据。该函数仅8.2.0及以上集群版本支持。

参数:当前会话中volatile临时表的表名。

返回值类型:record

返回值字段:

  • oid:返回volatile临时表的oid。
  • 其他字段:同pg_class系统表中的基础字段(不包括系统隐藏字段)。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT * FROM get_volatile_pg_class('tx1');
  oid  | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | reltoastidxid | reldeltarelid |
 reldeltaidx | relcudescrelid | relcudescidx | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasrules | relhastriggers | relhassub
class | relcmprs | relhasclusterkey | relrowmovement | parttype | relfrozenxid | relacl |            reloptions            | relreplident | relfrozenxid64
-------+---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+---------------+---------------+
-------------+----------------+--------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------
------+----------+------------------+----------------+----------+--------------+--------+----------------------------------+--------------+----------------
 16772 | tx1     |        16770 |   16774 |         0 |       10 |     0 |       16772 |          1665 |        0 |         0 |             0 |         16775 |             0 |             0 |
           0 |              0 |            0 | f           | f           | v              | r       |        2 |         0 | f          | f          | f           | f              | f
      | 1        | f                | f              | n        | 11815        |        | {orientation=row,compression=no} | d            |          11815
(1 row)

get_volatile_pg_attribute()

描述:获取当前会话中所有volatile临时表相关的pg_attribute元数据。该函数仅8.2.0及以上集群版本支持。

返回值类型:record

返回值字段:
  • oid:返回该列信息的oid。
  • 其他字段:同pg_attribute系统表中的基础字段(不包括系统隐藏字段)。

get_volatile_pg_attribute(relname text, attrname text)

描述:获取当前会话中指定volatile临时表相关的pg_attribute元数据。该函数仅8.2.0及以上集群版本支持。

参数:

  • relname:表名(必须在当前会话中)。
  • attrname:列名。

返回值类型:record

返回值字段:

  • oid:返回该列信息的oid。
  • 其他字段:同pg_attribute系统表中的基础字段(不包括系统隐藏字段)。

示例:

1
2
3
4
5
6
7
8
SELECT * FROM get_volatile_pg_attribute('tx1', 'b');
 attrelid | attname | atttypid | attstattarget | attlen | attnum | attndims | attcacheoff | atttypmod | attbyval | attstorage | attalign | attnotnull | atthasdef | attisdropped | attislocal |
 attcmprmode | attinhcount | attcollation | attacl | attoptions | attfdwoptions | attinitdefval | attkvtype
----------+---------+----------+---------------+--------+--------+----------+-------------+-----------+----------+------------+----------+------------+-----------+--------------+------------+
-------------+-------------+--------------+--------+------------+---------------+---------------+-----------
    16772 | b       |       25 |            -1 |     -1 |      2 |        0 |          -1 |        -1 | f        | x          | i        | f          | f         | f            | t          |
 127         |           0 |          100 |        |            |               |               | 0
(1 row)

pg_get_publication_tables(pubname text)

描述:根据发布的名称,返回对应发布要发布的表的relid列表。该函数仅8.2.0.100及以上集群版本支持。

参数:pubname

返回值类型:set of oid

示例:

1
2
3
4
5
6
SELECT * FROM pg_get_publication_tables('mypub');
 relid 
-------
 16757
 16776
(2 rows)

pg_relation_is_publishable(relname regclass)

描述:检查一个表是否可以发布。该函数仅8.2.0.100及以上集群版本支持。

参数:relname

返回值类型:boolean

示例:

1
2
3
4
5
SELECT * FROM pg_relation_is_publishable('t1');
 pg_relation_is_publishable 
----------------------------
 t
(1 row)

get_col_cu_info(schema_name text, table_name text, row_count int8, dirty_percent int8)

描述:查询某张列存表的CU信息,每个分区单独统计。该函数仅8.2.0.100及以上集群版本支持。

参数:模式名(必选),表名(必选),小CU的行数阈值(可选,默认200,取值范围为1~60000), 脏CU的删除百分比阈值(可选,默认70,取值范围1~100)。

返回值类型:record

返回值字段:

node_name:DN节点名。

part_name:分区名,普通表此列为空。

zero_size_cu_count:cuSize=0,且行数小于等于row_count的CU数。

small_cu_count:cuSize=ALIGNOF_CUSIZE(8192),且行数小于等于row_count的CU数。

dirty_cu_count: 因delete,deadtupe占比超过dirty_percent的CU数。

total_cu_count:总CU数。

small_cu_size:8kCU的总大小。

total_cu_size:总CU大小。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 SELECT * FROM get_col_cu_info('public','hs_part');
 node_name | part_name | zero_size_cu_count | small_cu_count | dirty_cu_count | total_cu_count | small_cu_size | total_cu_size
-----------+-----------+--------------------+----------------+----------------+----------------+---------------+---------------
 dn_1      | p1        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
 dn_1      | p2        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
 dn_1      | p3        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
(3 rows)

 SELECT * FROM get_col_cu_info('public','hs_part', 200, 90);
 node_name | part_name | zero_size_cu_count | small_cu_count | dirty_cu_count | total_cu_count | small_cu_size | total_cu_size
-----------+-----------+--------------------+----------------+----------------+----------------+---------------+---------------
 dn_1      | p1        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
 dn_1      | p2        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
 dn_1      | p3        |                  3 |              0 |              0 |              3 | 0 bytes       | 0 bytes
(3 rows)

get_col_file_vacuum_info(schema_name text, table_name text, force_get_rewritten_file_num bool)

描述:查询某张列存表的文件vacuum相关信息,每个分区单独统计。该函数仅8.2.0.100及以上集群版本支持。

参数:模式名(必选),表名(必选),是否强制获取准确的可清理文件数(必选,默认为false)

返回值类型:record

返回值字段:

node_name:DN节点名。

part_name:分区名,普通表此列为空。

total_file_num:总CU文件数。

rewritable_file_num:可重写,但还未重写的文件数。

rewritten_file_num:已重写未清理文件数,此值来源于内存态ClearCache,若由于重启等原因ClearCache丢失,可通过设置force_get_rewritten_file_num=true,消耗额外的时间,强制获取准确的可清理文件数。

empty_file_num:已清理文件数。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT * FROM get_col_file_vacuum_info('public','pa',false);
 node_name | part_name | total_file_num | rewritable_file_num | rewritten_file_num | empty_file_num
-----------+-----------+----------------+---------------------+--------------------+----------------
 datanode1 | pa1       |              1 |                   0 |                  0 |              0
 datanode1 | pa2       |              1 |                   0 |                  0 |              0
 datanode2 | pa1       |              1 |                   0 |                  0 |              0
 datanode2 | pa2       |              1 |                   0 |                  0 |              0
 datanode3 | pa1       |              1 |                   0 |                  0 |              0
 datanode3 | pa2       |              1 |                   0 |                  0 |              0
(6 rows)

get_col_file_vacuum_info(schema_name text, table_name text, colvacuum_threshold_scale_factor int)

描述:查询某张列存表的文件vacuum相关信息,每个分区单独统计。该函数仅8.2.0.100及以上集群版本支持。

参数:模式名(必选),表名(必选),colvacuum_threshold_scale_factor(必选,0-100为dead tuple的比例值)

返回值类型:record

返回值:

node_name:DN节点名。

part_name:分区名,普通表此列为空。

total_file_num:总CU文件数。

rewritable_file_num:可重写,但还未重写的文件数。

rewritten_file_num:已重写未清理文件数,此值来源于内存态ClearCache,若由于重启等原因ClearCache丢失,可通过设置force_get_rewritten_file_num=true,消耗额外的时间,强制获取准确的可清理文件数。

empty_file_num:已清理文件数。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT * FROM get_col_file_vacuum_info('public','pa',10);
 node_name | part_name | total_file_num | rewritable_file_num | rewritten_file_num | empty_file_num
-----------+-----------+----------------+---------------------+--------------------+----------------
 datanode1 | pa1       |              1 |                   0 |                  0 |              0
 datanode1 | pa2       |              1 |                   0 |                  0 |              0
 datanode2 | pa1       |              1 |                   0 |                  0 |              0
 datanode2 | pa2       |              1 |                   0 |                  0 |              0
 datanode3 | pa1       |              1 |                   0 |                  0 |              0
 datanode3 | pa2       |              1 |                   0 |                  0 |              0
(6 rows)

get_all_col_cu_info(row_count int8)

描述:查询全库所有列存表的CU信息。该函数仅8.2.0.100及以上集群版本支持。

参数:小CU的行数阈值(可选,默认值200,取值范围为1~60000。)

返回值类型:record

返回值字段:

node_name:DN节点名。

schema_name:模式名。

table_name:表名。

zero_size_cu_count:cuSize=0,且行数小于等于row_count的CU数。

small_cu_count:cuSize=ALIGNOF_CUSIZE(8192),且行数小于等于row_count的CU数。

total_cu_count:总CU数。

small_cu_size:8kCU的总大小。

total_cu_size:总CU大小。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT * FROM get_all_col_cu_info(200);
 node_name | schema_name |      table_name      | zero_size_cu_count | small_cu_count | total_cu_count | small_cu_size | total_cu_size
-----------+-------------+----------------------+--------------------+----------------+----------------+---------------+---------------
 datanode1 | public      | udi_48076            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
 datanode1 | public      | udi_48077            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
 datanode2 | public      | udi_48076            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
 datanode2 | public      | udi_48077            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
 datanode3 | public      | udi_48076            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
 datanode3 | public      | udi_48077            |                  5 |              1 |              6 | 8192 bytes    | 8192 bytes
(6 rows)

get_all_col_file_vacuum_info(force_get_rewritten_file_num bool)

描述:查询全库所有列存表的文件vacuum相关信息。该函数仅8.2.0.100及以上集群版本支持。

参数:是否强制获取准确的可清理文件数(必选,true或false)

返回值类型:record

返回值字段:

node_name:DN节点名。

schema_name:模式名。

table_name:表名。

total_file_num:总CU文件数。

rewritable_file_num:可重写,但还未重写的文件数。

rewritten_file_num:已重写未清理文件数,此值来源于内存态ClearCache,若由于重启等原因ClearCache丢失,可通过设置force_get_rewritten_file_num=true,消耗额外的时间,强制获取准确的可清理文件数。

empty_file_num:已清理文件数。

示例:

1
2
3
4
5
6
7
8
9
SELECT * FROM get_all_col_file_vacuum_info(false);
 node_name | schema_name |      table_name      | total_file_num | rewritable_file_num | rewritten_file_num | empty_file_num
-----------+-------------+----------------------+----------------+---------------------+--------------------+----------------
 datanode1 | public      | udi_57373            |              2 |                   0 |                  0 |              1
 datanode1 | public      | udi_57374            |              2 |                   0 |                  0 |              1
 datanode2 | public      | udi_57373            |              2 |                   0 |                  0 |              1
 datanode2 | public      | udi_57374            |              2 |                   0 |                  0 |              1
 datanode3 | public      | udi_57373            |              2 |                   0 |                  0 |              1
 datanode3 | public      | udi_57374            |              2 |                   0 |                  0 |              1

show_tsc_info()

描述:查询当前数据库节点已获取的TSC(TimeStamp-Counter)信息。该函数仅8.2.1及以上集群版本支持。

返回值类型:record

表4 返回值字段

名称

类型

描述

node_name

text

节点名称。

tsc_mult

bigint

TSC换算乘数。

tsc_shift

bigint

TSC换算位移数。

tsc_frequency

float8

TSC频率。

tsc_use_freqency

boolean

是否使用TSC频率进行时间换算。

tsc_ready

boolean

是否可以使用TSC频率进行时间换算。

tsc_scalar_error_info

text

获取TSC换算信息的错误信息。

tsc_freq_error_info

text

获取TSC频率的错误信息。

示例:

1
2
3
4
SELECT * FROM show_tsc_info();  
  node_name   | tsc_mult | tsc_shift | tsc_frequency | tsc_use_frequency | tsc_ready |     tsc_scalar_error_info     | tsc_freq_error_info
--------------+----------+-----------+---------------+-------------------+-----------+-------------------------------+---------------------
 coordinator1 |          |           |          2400 | t                 | t         | TSC scalar is not initialized |

get_tsc_info()

描述:重新获取当前数据库节点的TSC(TimeStamp-Counter)信息。该函数仅8.2.1及以上集群版本支持。

返回值类型:record

表5 返回值字段

名称

类型

描述

node_name

text

节点名称。

tsc_mult

bigint

TSC换算乘数。

tsc_shift

bigint

TSC换算位移数。

tsc_frequency

float8

TSC频率。

tsc_use_freqency

boolean

是否使用TSC频率进行时间换算。

tsc_ready

boolean

是否可以使用TSC频率进行时间换算。

tsc_scalar_error_info

text

获取TSC换算信息的错误信息。

tsc_freq_error_info

text

获取TSC频率的错误信息。

示例:

1
2
3
4
SELECT * FROM get_tsc_info();  
  node_name   | tsc_mult | tsc_shift | tsc_frequency | tsc_use_frequency | tsc_ready |     tsc_scalar_error_info     | tsc_freq_error_info
--------------+----------+-----------+---------------+-------------------+-----------+-------------------------------+---------------------
 coordinator1 |          |           |          2400 | t                 | t         | TSC scalar is not initialized |

test_tsc_info(time float8, loops int)

描述:测试当前节点通过TSC(TimeStamp-Counter)换算时间的准确性。该函数仅8.2.1及以上集群版本支持。

输入参数含义如下:

  • time:测试的时间差(单位s),测试时长需要小于或者等于60s
  • loops:测试次数,范围值[1,10]

返回值类型:record

返回值字段:

  • id:循环次数。
  • real_time_diff:通过gettimeofday获取的时间差(单位us)。
  • est_time_scalar:通过TSC换算信息转换得到的时间差(单位us)。
  • est_time_frequency:通过TSC频率转换得到的时间差(单位us)。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
SELECT * FROM test_tsc_info(0.01,10);
 id | real_time_diff | est_time_scalar | est_time_frequency
----+----------------+-----------------+--------------------
  1 |          10057 |                 |            10056.9
  2 |          10057 |                 |   10057.4816666667
  3 |          10056 |                 |   10055.2841666667
  4 |          10054 |                 |   10054.4908333333
  5 |          10055 |                 |         10054.2875
  6 |          10055 |                 |   10054.7483333333
  7 |          10055 |                 |         10054.4725
  8 |          10054 |                 |   10054.0766666667
  9 |          10058 |                 |   10058.1016666667
 10 |          10057 |                 |   10056.3733333333
(10 rows)

相关文档