华为云用户手册

  • hudi_show_sync_state() 描述:获取Hudi自动同步任务的同步状态。 返回值类型:setof record 示例: 1 2 3 4 5 SELECT * FROM hudi_show_sync_state(); target_tbl | source_ftbl | payload_type | precombine_key | latest_commit --------------------+--------------------+-------------------------------------------------------------+----------------+------------------- public.hudi_sync_i | public.hudi_mor_ft | org.apache.hudi.common.model.OverwriteWithLatestAvroPayload | col_int | 20230511114021573 (1 row)
  • hudi_sync_task_submit(regclass, regclass) 描述:提交Hudi自动同步任务。第一个入参为同步目标表,第二个入参为HUDI外表。提交任务成功会返回任务的task-id。 返回值类型:text 同步目标表必须包含主键,且主键需要与hudi recordkey一致。 如果hudi表包含precombine字段,那么同步目标表也必须包含与之对应的字段。 如果同步目标表只包含主键(除了主键外没有其他字段),则无法正常提交同步任务。 用户需要有同步目标表的insert和update权限、HUDI外表的select权限,否则无法正常提交同步任务。 示例: 1 2 3 4 5 SELECT hudi_sync_task_submit('public.hudi_sync_i','public.hudi_mor_ft'); hudi_sync_task_submit -------------------------------------- 6465efe2-3ea1-0b00-dde5-b57dfb30fffe (1 row)
  • hudi_get_commit(regclass, cstring, int) 描述:获取当前Hudi外表从指定commit开始,到第N个commit的时间戳和对应commit数据写入时间。当第N个commit不存在,则返回最新的commit和对应数据写入时间。该函数仅9.1.0.100及以上版本支持。 返回值类型:record 示例: 1 2 3 4 5 SELECT * FROM hudi_get_commit('public.hudi_mor_ft', '20230329174744657', 3); end_commit | write_time -------------------+------------------------ 20230329174808908 | 2023-08-31 15:43:08+08 (1 row)
  • hudi_get_max_commit(regclass) 描述:获取当前Hudi外表最新commit的时间戳和数据写入时间。 返回值类型:record 示例: 1 2 3 4 5 SELECT * FROM hudi_get_max_commit('public.hudi_mor_ft'); max_commit | write_time ----------------+------------------------ 20221207141822 | 2022-12-07 14:18:30+08 (1 row)
  • hudi_sync_task_submit(regclass, regclass, text, text) 描述:功能与hudi_sync_task_submit(regclass, regclass)一致,不同之处在于,用户可以额外指定两个text入参,表示用户期望哪些字段被同步。字段之间使用','分隔,支持引号和转义字符的解析。两个text参数的字段数量和顺序应当一致,表示同步字段之间的对应关系。提交任务成功会返回任务的task-id。 返回值类型:text 同步目标表必须包含主键,且主键需要与hudi recordkey一致。 如果hudi表包含precombine字段,那么同步目标表也必须包含与之对应的字段。 如果同步目标表只包含主键(除了主键外没有其他字段),则无法正常提交同步任务。 用户需要有同步目标表的insert和update权限、HUDI外表的select权限,否则无法正常提交同步任务。 示例: 1 2 3 4 5 SELECT hudi_sync_task_submit('public.hudi_sync_i','public.hudi_mor_ft','_hoodie_commit_time, col_bigint, col_text', '_hoodie_commit_time, col_bigint, col_text'); hudi_sync_task_submit -------------------------------------- 646610bc-cdd1-0d00-d07d-b57e89a0fffe (1 row)
  • hudi_sync_task_submit(regclass, regclass, text, text, interval) 描述:功能与hudi_sync_task_submit(regclass, regclass, text, text)一致,不同之处在于,用户可以额外指定一个interval类型入参,用于指定任务的调度周期,取值范围为5秒至24小时。该函数仅8.2.1.300及以上版本支持。 返回值类型:text 同步目标表必须包含主键,且主键需要与hudi recordkey一致。 如果hudi表包含precombine字段,那么同步目标表也必须包含与之对应的字段。 如果同步目标表只包含主键(除了主键外没有其他字段),则无法正常提交同步任务。 用户需要有同步目标表的insert和update权限、HUDI外表的select权限,否则无法正常提交同步任务。 示例: 1 2 3 4 5 SELECT hudi_sync_task_submit('public.hudi_sync_i','public.hudi_mor_ft','_hoodie_commit_time, col_bigint, col_text', '_hoodie_commit_time, col_bigint, col_text', '10 minute 30second'); hudi_sync_task_submit -------------------------------------- 646610bc-cdd1-0d00-d07d-b57e89a0fffe (1 row)
  • pg_show_custom_settings() 描述:查询Hudi外表参数设置详情。 返回值类型:setof record 示例: 1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM pg_show_custom_settings(); name | setting | unit | category | short_desc | extra_desc | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | sourcefile | sourceline ----------------------------------------------------+-------------------+------+--------------------+--------------------------+------------+---------+---------+---------+---------+---------+ ----------+----------+-----------+------------+------------ hoodie.public.hudi_mor_ft.consume.ending.timestamp | 20230404172329544 | | Customized Options | GUC placeholder variable | | user | string | session | | | | | | | hoodie.public.hudi_mor_ft.consume.mode | incremental | | Customized Options | GUC placeholder variable | | user | string | session | | | | | | | hoodie.public.hudi_mor_ft.consume.start.timestamp | 20230404172329543 | | Customized Options | GUC placeholder variable | | user | string | session | | | | | | | (3 rows)
  • 注意事项 LOCK TABLE只能在一个事务块的内部有用,因为锁在事务结束时就会被释放。出现在任意事务块外面的LOCK TABLE都会报错。 如果没有声明锁模式,缺省为最严格的模式AC CES S EXCLUSIVE。 LOCK TABLE ... IN ACCESS SHARE MODE需要在目标表上有SELECT权限。所有其他形式的LOCK需要UPDATE和/或DELETE权限。 没有UNLOCK TABLE命令,锁总是在事务结束时释放。 LOCK TABLE只处理表级的锁,因此那些带“ROW”字样的锁模式都是有歧义的。这些模式名字通常可理解为用户试图在一个被锁定的表中获取行级的锁。同样,ROW EXCLUSIVE模式也是一个可共享的表级锁。注意,只要是涉及到LOCK TABLE ,所有锁模式都有相同的语意,区别仅在于规则中锁与锁之间是否冲突,规则请参见表1。
  • 语法格式 1 2 3 LOCK [ TABLE ] {[ ONLY ] name [, ...]| {name [ * ]} [, ...]} [ IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE | UPDATE EXCLUSIVE} MODE ] [ NOWAIT ] [LOCAL COORDINATOR ONLY];
  • 功能描述 LOCK TABLE获取表级锁。 当自动获取引用表的命令的锁时, GaussDB (DWS)会始终使用限制最小的锁模式。如果用户需要一种更为严格的锁模式,可以使用LOCK命令。例如,某个应用是在Read Committed隔离级别上运行事务,并且需要保证表中的数据在事务运行期间保持稳定。为实现这个目的,则可以在查询之前对表使用SHARE锁模式进行锁定。这样将防止并发数据更改,并确保后续的查询可以读到已提交的持久化的数据。因为SHARE锁模式与任何写操作需要的ROW EXCLUSIVE模式冲突,并且LOCK TABLE name IN SHARE MODE语句将等到所有当前持有ROW EXCLUSIVE模式锁的事务提交或回滚后才能执行。因此,一旦获得该锁,就不会存在未提交的写操作,此外其他操作也只能等到该锁释放之后才能开始。
  • 参数说明 表1 冲突的锁模式 请求的锁模式/当前锁模式 ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE UPDATE EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE UPDATE EXCLUSIVE ACCESS SHARE - - - - - - - X - ROW SHARE - - - - - - X X - ROW EXCLUSIVE - - - - X X X X - SHARE UPDATE EXCLUSIVE - - - X X X X X - SHARE - - X X - X X X X SHARE ROW EXCLUSIVE - - X X X X X X X EXCLUSIVE - X X X X X X X X ACCESS EXCLUSIVE X X X X X X X X X UPDATE EXCLUSIVE - - - - X X X X X LOCK的参数说明如下所示: name 要锁定的表的名字,可以有模式修饰。 LOCK TABLE命令中声明的表的顺序就是上锁的顺序。 取值范围:已存在的表名。 ONLY 如果指定ONLY只有该表被锁定,如果没有声明该表和他的所有子表将都被锁定。 ACCESS SHARE ACCESS锁只允许对表进行读取,而禁止对表进行修改。所有对表进行读取而不修改的SQL语句都会自动请求这种锁。例如,SELECT命令会自动在被引用的表上请求一个这种锁。 ROW SHARE ROW SHARE锁允许对表进行并发读取,禁止对表进行其他操作。 SELECT FOR UPDATE和SELECT FOR SHARE命令会自动在目标表上请求ROW SHARE锁(且所有被引用但不是FOR SHARE/FOR UPDATE的其他表上,还会自动加上ACCESS SHARE锁)。 ROW EXCLUSIVE 与ROW SHARE锁不同,ROW EXCLUSIVE允许并发读取表,也允许修改表中的数据。UPDATE,DELETE,INSERT命令会自动在目标表上请求这个锁(且所有被引用的其他表上还会自动加上的ACCESS SHARE锁)。通常情况下,所有会修改表数据的命令都会请求表的ROW EXCLUSIVE锁。 SHARE UPDATE EXCLUSIVE 这个模式保护一个表的模式不被并发修改,以及禁止在目标表上执行垃圾回收命令(VACUUM )。 VACUUM(不带FULL选项),ANALYZE,CREATE INDEX CONCURRENTLY命令会自动请求这样的锁。 SHARE SHARE锁允许并发的查询,但是禁止对表进行修改。 CREATE INDEX(不带CONCURRENTLY选项)语句会自动请求这种锁。 SHARE ROW EXCLUSIVE SHARE ROW EXCLUSIVE锁禁止对表进行任何的并发修改,而且是独占锁,因此一个会话中只能获取一次。 任何SQL语句都不会自动请求这个锁模式。 EXCLUSIVE EXCLUSIVE锁允许对目标表进行并发查询,但是禁止任何其他操作。 这个模式只允许并发加ACCESS SHARE锁,也就是说,只有对表的读动作可以和持有这个锁模式的事务并发执行。 任何SQL语句都不会在用户表上自动请求这个锁模式。然而在某些操作的时候,会在某些系统表上请求它。 ACCESS EXCLUSIVE 这个模式保证其所有者(事务)是可以访问该表的唯一事务。 ALTER TABLE,DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL命令会自动请求这种锁。 在LOCK TABLE命令没有明确声明需要的锁模式时,它是缺省锁模式。 UPDATE EXCLUSIVE UPDATE EXCLUSIVE锁允许并发(AUTO)VACUUM和(AUTO)ANALYZE,但不允许多个(AUTO)VACUUM并发。 该参数仅8.2.1.300及以上集群版本支持。 UPDATE EXCLUSIVE锁模式仅在VACUUM语法中使用。 NOWAIT 声明LOCK TABLE不去等待任何冲突的锁释放,如果无法立即获取该锁,该命令退出并且发出一个错误信息。 在不指定NOWAIT的情况下获取表级锁时,如果有其他互斥锁存在的话,则等待其他锁的释放。 LOCAL COORDINATOR ONLY 声明LOCK TABLE只在接收当前会话请求的CN上执行,而不会下发给其他CN和所有DN。该选项仅针对元数据的操作,以提高效率。 该参数仅8.2.0.100以上集群版本支持。 当前仅支持ACCESS SHARE锁模式,其他锁模式会报错。
  • 参数说明 VOLATILE { TEMPORARY | TEMP } 表示释放当前会话中VOLATILE临时表相关资源。 执行DISCARD VOLATILE { TEMPORARY | TEMP }操作后,当前session内所有volatile临时表资源都会被清理,不支持清理单个volatile临时表资源。 TEMP | TEMPORARY 释放当前会话中所有临时表的相关资源,包括VOLATILE临时表和GLOBAL临时表。 PLANS 释放当前会话中所有缓存的查询计划,强制在下次使用相关prepare语句时重新规划。 SEQUENCES 丢弃缓存的所有序列相关的状态,包括currval()/lastval()信息和任何至今还未通过nextval()返回的预先分配的序列值。 ALL 释放所有与当前会话相关的临时资源,并重置到其初始状态,这与执行以下语句序列有几乎相同的效果: SET SESSION AUTHORIZATION DEFAULT; RESET ALL; DEALLOCATE ALL; CLOSE ALL; UNLISTEN *; SELECT pg_advisory_unlock_all(); DISCARD PLANS; DISCARD SEQUENCES; DISCARD TEMP; 执行DISCARD ALL成功之后,以pg_temp和pg_toast_temp开头的schema也会被删除。 DISCARD ALL不允许在事务中执行。
  • 示例 DISCARD VOLATILE临时表 DISCARD操作后,清理当前会话中所有volatile临时表相关资源。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE VOLATILE TEMP TABLE TX1(A INT) DISTRIBUTE BY HASH(A); CREATE TABLE CREATE VOLATILE TEMP TABLE TX2(A INT) DISTRIBUTE BY HASH(A); CREATE TABLE SELECT * FROM TX1; a --- (0 rows) SELECT * FROM TX2; a --- (0 rows) DISCARD VOLATILE TEMP; SELECT * FROM TX1; ERROR: relation "tx1" does not exist LINE 1: SELECT * FROM TX1; ^ SELECT * FROM TX2; ERROR: relation "tx2" does not exist LINE 1: SELECT * FROM TX2; DISCARD TEMP DISCARD TEMP操作后,清理当前会话中所有临时表相关资源。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE GLOBAL TEMP TABLE t_global_temp(a int,b int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE INSERT INTO t_global_temp VALUES(1,1),(2,2); INSERT 0 2 CREATE VOLATILE TEMP TABLE t_volatile_temp(a int,b int); CREATE TEMP TABLE t_temp(a int,b int); DISCARD TEMP; SELECT * FROM t_global_temp; a | b ---+--- (0 rows) SELECT * FROM t_volatile_temp; ERROR: relation "t_volatile_temp" does not exist LINE 1: select * from t_volatile_temp; SELECT * FROM t_temp; ERROR: relation "t_temp" does not exist LINE 1: select * from t_temp;
  • 示例 清理当前数据库中的所有表: 1 VACUUM; 仅回收表tpcds.web_returns_p1分区P2的空间,不更新统计信息: 1 VACUUM FULL tpcds.web_returns_p1 PARTITION(P2); 回收表tpcds.web_returns_p1空间,并更新统计信息: 1 VACUUM FULL ANALYZE tpcds.web_returns_p1; 清理当前数据库中的所有表并收集查询优化器的统计信息: 1 VACUUM ANALYZE; 仅清理特定表reason: 1 VACUUM (VERBOSE, ANALYZE) tpcds.reason; 对列存表table_delta进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta; 仅对列存表table_delta的分区p1进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta partition(p1);
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的那个表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者,被授予了指定表VACUUM权限的用户或者被授予了gs_role_vacuum_any角色的用户,系统管理员默认拥有此权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 语法格式中含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 VACUUM列存表内部执行的操作包括四个:VACUUM主表、VACUUM主表的desc表、VACUUM主表的delta表、迁移delta表中的数据到主表。该操作不会回收delta表的存储空间,如果要回收delta表的冗余存储空间,需要对该列存表执行VACUUM DELTAMERGE。VACUUM主表操作默认开启,可以通过调节参数colvacuum_threshold_scale_factor来关闭该功能。 VACCUM列存主表功能不支持临时表、冷热表和时序表。 VACUUM列存主表功能对空间的回收是延后的,若需要立即回收空间,在执行VACUUM后,运行vac_fileclear_relation函数,将会对指定表施加排他锁,完成空间回收。 VACUUM FULL系统表只能离线操作,在线VACUUM FULL系统表除了会锁表,还可能导致一些异常情况并产生报错。 如果有长查询访问系统表,此时执行VACUUM FULL,长查询可能会阻塞VACUUM FULL连接访问系统表,导致连接超时报错。 对列存分区表执行VACUUM FULL,会同时锁表和锁分区。 VACUUM FULL操作分区表时与用户DML语句在如下特定场景有并发时可能发生分布式死锁,请谨慎操作: VACUUM FULL子分区与insert/update/delete主表。 VACUUM FULL全表与select全表/select子分区。 在存算分离架构下,对于全库VACCUM/全库VACUUM FULL/全库VACUUM DELTAMERGE提示不支持。 对表执行VACUUM FULL操作时会触发表重建(表重建过程中会先把数据转储到一个新的数据文件中,重建完成之后会删除原始文件),当表比较大时,重建会消耗较多的磁盘空间。当磁盘空间不足时,要谨慎对待大表VACUUM FULL操作,防止触发集群只读。 定期对脏页率、小CU占比超过25%的表执行VACUUM FULL,普通表需在低峰期执行,系统表需离线执行。 更多开发设计规范参见总体开发设计规范。
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 FULL选项还可以带有COMPACT参数,该参数只针对HDFS表,指定该参数的VACUUM FULL操作性能要好于未指定该参数的VACUUM FULL操作。 COMPACT和PARTITION参数不能同时使用。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 PARTITION HDFS表不支持PARTITION参数,PARTITION参数不能和COMPACT同时使用。 PARTITION参数和COMPACT同时使用会报错:COMPACT can not be used with PARTITION. partition_name 要清理的表的分区名称。缺省时为所有分区。 DELTAMERGE 只针对HDFS表和列存表,将HDFS表或者列存表的delta table中的数据转移到主表存储上。对HDFS表而言,当delta表中数据量小于六万行,则不作迁移,只有在大于或者等于六万行数据时,将delta表中所有数据迁移到HDFS上,并通过truncate清理delta表的存储空间。对列存表而言,此操作总是会将delta表中的数据全部转移到CU中。 为了检查列存delta表中的信息(HDFS表的delta表数据可以通过explain analyze查到),提供下述DFX函数,用于获取某个列存表的delta表中数据存储情况: pgxc_get_delta_info(TEXT),传入参数为列存表名,搜集并显示各个节点上的对应delta表信息,包括当前存活tuple数量、表大小、使用的最大block ID。 get_delta_info(TEXT),传入参数为列存表名,汇总pgxc_get_delta_info得到的结果,返回其delta表整体的当前存活tuple数量、表大小、使用的最大block ID。查询临时表delta信息时,需要显示指定临时表的schema,否则会报错找不到表。 HDFSDIRECTORY 只针对HDFS表,删除HDFS表在HDFS存储上表目录下的空值分区目录。
  • 语法格式 回收空间并更新统计信息,关键字顺序必须按语法显示的顺序给出。 1 2 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 仅回收空间,不更新统计信息。 1 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name ] [ PARTITION ( partition_name ) ]; 回收空间并更新统计信息,且对关键字顺序有要求。 1 2 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 针对HDFS表和列存表,将delta table中的数据转移到主表存储。(partition_name参数仅8.2.1.300及以上集群版本支持) 1 VACUUM DELTAMERGE [ table_name ][partition_name]; 针对HDFS表,删除HDFS表在HDFS存储上的空值分区目录。 1 VACUUM HDFSDIRECTORY [ table_name ];
  • 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)
  • 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频率的错误信息。
  • 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_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)
  • 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)
  • 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)
  • 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(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)
  • 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)
共100000条