华为云用户手册

  • 现象描述 查询与销售部所有员工的信息: 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 TABLE staffs (staff_id NUMBER(6) NOT NULL, first_name VARCHAR2(20), last_name VARCHAR2(25), employment_id VARCHAR2(10), section_id NUMBER(4), state_name VARCHAR2(10), city VARCHAR2(10)); CREATE TABLE sections(section_id NUMBER(4), place_id NUMBER(4), section_name VARCHAR2(20)); CREATE TABLE states(state_id NUMBER(4)); CREATE TABLE places(place_id NUMBER(4), state_id NUMBER(4)); --优化前查询 EXPLAIN SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id; --创建索引 CREATE INDEX loc_id_pk ON places(place_id); CREATE INDEX state_c_id_pk ON states(state_id); --优化后查询 EXPLAIN SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id;
  • GS_ADM_ILMPOLICIES GS_ADM_ILMPOLICIES视图反映ILM策略的概要信息,包含策略名称、类型、启用禁用状态、删除状态。需要有系统管理员权限才可以访问此系统视图。 表1 GS_ADM_ILMPOLICIES字段 名称 类型 描述 policy_name character varying(128) ADO策略名称,系统自动生成,规则为:p+策略ID。 policy_type character varying(13) 策略类型。 tablespace character varying(30) 表空间名称。当该策略制定在表空间上时此处有值。当前版本值为null。 enabled character varying(6) 策略是否开启。 deleted character varying(7) 策略是否被删除。 父主题: OLTP表压缩
  • MY_SCHEDULER_PROG RAM _ARGS MY_SCHEDULER_PROGRAM_ARG视图显示当前用户拥有的程序的有关参数信息。该视图所有用户可访问,仅可查看当前用户所属信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_SCHEDULER_PROGRAM_ARGS字段 名称 类型 描述 program_name character varying(128) 参数所属程序名。 argument_name character varying(128) 参数名称。 argument_position numeric 参数在参数列表中的位置。 argument_type character varying(257) 参数的数据类型,可以是用户的自定义数据类型。 metadata_attribute character varying(19) 暂不支持,值为NULL。 default_value character varying(4000) 参数默认值。 default_anydata_value character varying(4000) 暂不支持,值为NULL。 out_argument character varying(5) 保留字段,值为NULL。 父主题: 其他系统视图
  • GS_ADM_ILMRESULTS GS_ADM_ILMRESULTS视图反映ADO JOB的执行详情信息,包含Task ID,JOB名称、JOB状态、JOB时间信息等。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。 表1 GS_ADM_ILMRESULTS字段 名称 类型 描述 task_id bigint ADO Task的ID。 job_name character varying(128) ADO Job的任务名称。 job_state character varying(35) ADO Job的状态。 start_time timestamp with time zone JOB开始被调度的时间。 completion_time timestamp with time zone 完成时间。 comments character varying(4000) JOB失败后此处记录失败原因。 statistics clob 统计信息。 父主题: OLTP表压缩
  • GS_DB_PRIVILEGE GS_DB_PRIVILEGE系统表记录ANY权限的授予情况,每条记录对应一条授权信息。 表1 GS_DB_PRIVILEGE字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 roleid oid 用户标识。 privilege_type text 用户拥有的ANY权限,取值参考表1。 admin_option boolean 是否具有privilege_type列记录的ANY权限的再授权权限。 t:表示具有。 f:表示不具有。 父主题: 用户和权限管理
  • PG_FOREIGN_TABLE PG_FOREIGN_TABLE系统表存储外部表的辅助信息。 表1 PG_FOREIGN_TABLE字段 名称 类型 描述 ftrelid oid 外部表的ID。 ftserver oid 外部表的所在服务器。 ftwriteonly boolean 外部表是否可写。取值如下: t(true):表示可写 f(false):表示不可写 ftoptions text[] 外部表的可选项,具体参考7.13.8.22 CREATE FOREIGN TABLE语法说明。 父主题: 其他系统表
  • 示例 --创建拥有系统管理员权限的用户。 gaussdb=# CREATE USER user1 WITH SYSADMIN PASSWORD '********'; gaussdb=# SET ROLE user1 PASSWORD '********'; --创建私有dblink,host也可以是IPv6地址。 gaussdb=# CREATE DATABASE LINK private_dblink CONNECT TO 'user1' IDENTIFIED BY '********' USING (host '192.168.11.11',port '54399',dbname 'db01'); --删除私有dblink。 gaussdb=# DROP DATABASE LINK private_dblink; --创建公共dblink,host也可以是IPv6地址。 gaussdb=# CREATE PUBLIC DATABASE LINK public_dblink CONNECT TO 'user1' IDENTIFIED BY '********' USING (host '192.168.11.11',port '54399',dbname 'db01'); --删除公共dblink。 gaussdb=# DROP PUBLIC DATABASE LINK public_dblink; --删除创建出的用户。 gaussdb=# RESET ROLE; gaussdb=# DROP USER user1;
  • GS_SESSION_ALL_SETTINGS GS_SESSION_ALL_SETTINGS显示本节点上所有session的全量GUC参数配置。该视图只有sysadmin和monadmin权限可以查看。在多租场景下,在PDB中返回本PDB的结果,在Non-PDB中返回全部的信息。 表1 GS_SESSION_ALL_SETTINGS字段 名称 类型 描述 sessionid bigint 会话的ID。 pid bigint 后端线程的ID。 name text 参数名称。 setting text 参数当前值。 unit text 参数的隐式单位。 父主题: 其他系统视图
  • PG_CURSORS PG_CURSORS视图列出了当前可用的游标。 表1 PG_CURSORS字段 名称 类型 描述 name text 游标名。 statement text 声明该游标时的查询语句。 is_holdable boolean 如果该游标是持久的(就是在声明该游标的事务结束后仍然可以访问该游标)则为TRUE,否则为FALSE。 is_binary boolean 如果该游标被声明为BINARY则为TRUE,否则为FALSE。 is_scrollable boolean 如果该游标可以滚动(就是允许以不连续的方式检索)则为TRUE,否则为FALSE。 creation_time timestamp with time zone 声明该游标的时间戳。 父主题: 其他系统视图
  • 示例 --创建表空间。 gaussdb=# CREATE TABLESPACE tbs_location1 RELATIVE LOCATION 'test_tablespace/test_tablespace_1'; --创建表空间指定最大值。 gaussdb=# CREATE TABLESPACE tbs_location2 RELATIVE LOCATION 'test_tablespace/test_tablespace_2' MAXSIZE '10G'; --查询表空间信息。 gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_location2'; spcname | spcowner | spcacl | spcoptions | spcmaxsize | relative ---------------+----------+--------+------------+------------+---------- tbs_location2 | 10 | | | 10485760 K | t (1 row) --创建用户joe。 gaussdb=# CREATE ROLE joe IDENTIFIED BY '********'; --创建表空间,且所有者指定为用户joe。 gaussdb=# CREATE TABLESPACE tbs_location3 OWNER joe RELATIVE LOCATION 'test_tablespace/test_tablespace_3'; --创建表空间指定绝对路径(请根据实际情况修改路径)。 gaussdb=# CREATE TABLESPACE tbs_location4 LOCATION '/tmp/tbs_location4'; --删除表空间及用户。 gaussdb=# DROP TABLESPACE tbs_location1; gaussdb=# DROP TABLESPACE tbs_location2; gaussdb=# DROP TABLESPACE tbs_location3; gaussdb=# DROP TABLESPACE tbs_location4; gaussdb=# DROP ROLE joe;
  • 语法格式 CREATE TABLESPACE tablespace_name [ OWNER user_name ] [ RELATIVE ] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause]; 其中普通表空间的with_option_clause为: WITH ({filesystem= { ' general ' | " general " | general } | address = { ' ip:port [, ... ] ' | " ip:port [, ... ] " } | cfgpath = { ' path ' | " path " } | storepath = { ' rootpath ' | " rootpath " } | random_page_cost = { ' value ' | " value " | value } | seq_page_cost = { ' value ' | " value " | value }}[, ... ])
  • 注意事项 系统管理员或者继承了内置角色gs_role_tablespace权限的用户可以创建表空间。 不允许在一个事务块内部执行CREATE TABLESPACE。 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。 CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。 在公有云场景下一般不建议用户使用自定义的表空间。原因:用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的I/O资源,而在公有云场景下,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。 每个PDB拥有自己的表空间对象。在PDB中创建表空间仅支持使用相对路径。
  • 示例 1 2 3 4 5 6 7 8 9 --创建安全标签sec_label。 gaussdb=# CREATE SECURITY LABEL sec_label 'L1:G4'; --删除不存在的安全标签sec_label2。 gaussdb=# DROP SECURITY LABEL sec_label2; ERROR: security label "sec_label2" does not exist --删除已存在的安全标签sec_label。 gaussdb=# DROP SECURITY LABEL sec_label;
  • 参数说明 TABLE | TABLES TABLE和TABLES可以互相替换使用,与语句中操作表的个数无关。 table_name TO new_table_name [, table_name2 TO new_table_name2, ...] table_name、table_name2等为需要修改的表名。 new_table_name、new_table_name2等为修改后的新表名。 TO为中间连接词。
  • 修改表示例 单表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1; gaussdb=# DROP TABLE test_alt1; 多个表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# CREATE TABLE bb(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1, bb TO test_alt2; gaussdb=# DROP TABLE test_alt1,test_alt2;
  • MY_IND_PARTITIONS MY_IND_PARTITIONS视图显示当前用户下一级分区表Local索引的索引分区信息(不包含分区表全局索引)。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_IND_PARTITIONS字段 名称 类型 描述 index_owner character varying(64) 索引分区所属分区表索引的所有者的名称。 index_name character varying(64) 索引分区所属分区表索引的名称。 partition_name character varying(64) 索引分区的名称。 def_tablespace_name name 索引分区的表空间名称。 high_value text 索引分区所对应分区的上边界。 index_partition_usable boolean 索引分区是否可用: t(true):表示可用。 f(false):表示不可用。 schema character varying(64) 索引分区所属分区表索引的模式。 high_value_length integer 索引分区所对应分区的边界的字符长度。 composite character varying(3) 索引是否属于二级分区表上的本地索引,该表不存储二级分区信息,所以该值为NO。 subpartition_count numeric 分区中的二级分区数,该表不存储二级分区信息,所以该值为0。 partition_position numeric 索引分区在索引中的位置。 status character varying(8) 索引分区是否可用。 tablespace_name name 分区所在表空间的名称。 pct_free numeric 块中最小可用空间百分比。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 是否记录对索引的更改。 compression character varying(13) 分区索引是否启用索引压缩。 blevel numeric 暂不支持,值为NULL。 leaf_blocks numeric 暂不支持,值为NULL。 distinct_keys numeric 暂不支持,值为NULL。 avg_leaf_blocks_per_key numeric 暂不支持,值为NULL。 avg_data_blocks_per_key numeric 暂不支持,值为NULL。 clustering_factor numeric 根据索引的值表示表中行的顺序。需要通过执行analyze进行统计。 num_rows numeric 分区中的行数。需要通过执行vacuum进行统计。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。数据库重启后,数据会丢失。 buffer_pool character varying(7) 分区的实际缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 pct_direct_access numeric 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 索引分区段是否已创建。 orphaned_entries character varying(3) 暂不支持,值为NULL。 父主题: 分区表
  • Wait Events Wait Events列名称及描述如表1所示。 表1 Wait Events报表主要内容 列名称 描述 Type Wait Event类别名称: STATUS。 LWLOCK_EVENT。 LOCK_EVENT。 IO_EVENT。 Event Wait Event名称。 Total Wait Time (us) 总Wait时间(us)。 Waits 总Wait次数。 Failed Waits Wait失败次数。 Avg Wait Time (us) 平均Wait时间(us)。 Max Wait Time (us) 最大Wait时间(us)。 父主题: WDR报告信息介绍
  • SNAPSHOT.TABLES_SNAP_TIMESTAMP TABLES_SNAP_TIMESTAMP表记录所有存储的WDR Snapshot中数据库、表对象以及WDR快照的开始和结束时间,WDR Snapshot在启动后(打开GUC参数enable_wdr_snapshot)会触发创建该表,如表1所示。 表1 TABLES_SNAP_TIMESTAMP表属性 名称 类型 描述 示例 snapshot_id bigint WDR快照序号。 1 node_name name WDR快照的表信息所属的节点名。 dn_6001 db_name text WDR Snapshot对应的database。 tpcc1000 tablename text WDR Snapshot对应的table。 snap_xc_statio_all_indexes start_ts timestamp WDR快照的开始时间。 2019-12-28 17:11:27.425849+08 end_ts timestamp WDR快照的结束时间。 2019-12-28 17:11:27.707398+08 父主题: WDR Snapshot原信息
  • SUMMARY_STATIO_SYS_INDEXES SUMMARY_STATIO_SYS_INDEXES视图显示数据库内命名空间中所有系统表上索引的I/O状态汇总信息,如表1所示。 表1 SUMMARY_STATIO_SYS_INDEXES字段 名称 类型 描述 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 父主题: Cache/IO
  • 建议 推荐使用两个表*的hint。对于两个表采用*操作符的hint,只要两个表出现在join的两端,都会触发hint。例如:设置hint为rows(t1 t2 * 3),对于(t1 t3 t4)和(t2 t5 t6)join时,由于t1和t2出现在join的两端,所以其join的结果集也会应用该hint规则乘以3。 rows hint支持在单表、多表、function table及subquery scan table的结果集上指定hint。
  • 参数说明 @queryblock请参见指定Hint所处于的查询块Queryblock,可省略,表示在当前查询块生效。 “#”、“+”、“-”、“*”,进行行数估算hint的四种操作符号。#表示直接使用后面的行数进行hint。“+”、“-”、“*”表示对原来估算的行数进行加、减、乘操作,运算后的行数最小值为1行。table_list为hint对应的单表或多表join结果集,与Join方式的Hint中table_list相同。
  • 存储过程支持自治事务 自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,请参见CREATE PROCEDURE,示例如下。 --建表 gaussdb=# CREATE TABLE t2(a INT, b INT); CREATE TABLE gaussdb=# INSERT INTO t2 VALUES(1,2); INSERT 0 1 gaussdb=# SELECT * FROM t2; a | b ---+--- 1 | 2 (1 row) --创建包含自治事务的存储过程 gaussdb=# CREATE OR REPLACE PROCEDURE autonomous_4(a INT, b INT) AS DECLARE num3 INT := a; num4 INT := b; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO t2 VALUES(num3, num4); DBE_OUTPUT.PRINT_LINE('JUST USE CALL.'); END; / CREATE PROCEDURE --创建调用自治事务存储过程的普通存储过程 gaussdb=# CREATE OR REPLACE PROCEDURE autonomous_5(a INT, b INT) AS DECLARE BEGIN DBE_OUTPUT.PRINT_LINE('JUST NO USE CALL.'); INSERT INTO t2 VALUES(666, 666); autonomous_4(a,b); ROLLBACK; END; / CREATE PROCEDURE --调用普通存储过程 gaussdb=# SELECT autonomous_5(11,22); JUST NO USE CALL. JUST USE CALL. autonomous_5 -------------- (1 row) --查看表结果 gaussdb=# SELECT * FROM t2 ORDER BY a; a | b ----+---- 1 | 2 11 | 22 (2 rows) gaussdb=# DROP TABLE t2; DROP TABLE gaussdb=# DROP PROCEDURE autonomous_4; DROP PROCEDURE gaussdb=# DROP PROCEDURE autonomous_5; DROP PROCEDURE 上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚不会影响自治事务已经提交的内容。 父主题: 自治事务
  • DV_SESSION_LONGOPS DV_SESSION_LONGOPS视图显示当前正在执行的操作的进度。该视图需要授权访问。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 DV_SESSION_LONGOPS字段 名称 类型 描述 sid bigint 当前正在执行的后台线程的OID。 serial# integer 当前正在执行的后台线程的序号,在 GaussDB 中为0。 sofar integer 目前完成的工作量,在GaussDB中为空。 totalwork integer 工作总量,在GaussDB中为空。 父主题: 其他系统视图
  • HTAP系统函数 gs_htap_tmu_data(rel_oid oid, rowgroup_id integer) 描述:查看实时事务单元TMU中的活跃事务数据。当rowgroup_id为0时,返回表中所有活跃事务数据;当rowgroup_id非0时,返回表中指定行组中的活跃事务数据。 返回值类型:record 备注:必须是系统管理员或运维管理员才能执行此函数。 本函数对OLTP业务有一定影响,仅作为运维接口使用,且不建议频繁执行。 表1 gs_htap_tmu_data参数说明 参数类型 参数名 类型 描述 输入参数 rel_oid oid 行存表oid信息。 输入参数 rowgroup_id integer unsigned 行组唯一标识。 输出参数 rel_oid oid 行存表oid信息。 输出参数 rowgroup_id integer unsigned 行组唯一标识。 输出参数 xid xid 操作该数据的事务id。 输出参数 ctid cstring 该数据在页面上的位置。 输出参数 flag smallint unsigned 二进制标记位,每一数位表示TMU记录的不同操作属性。其中: 第4位为1时,表示该记录是一条更新操作。 第3位为1时,表示该记录是一条删除操作。 第2位为1时,表示该记录是一条插入操作。 示例: 当enable_htap=off时: gaussdb=# select * from gs_htap_tmu_data(16796,0); ERROR: Query failed due to ENABLE_HTAP is not enabled. 当enable_htap=on时: gaussdb=# select * from gs_htap_tmu_data(16796,0); rel_oid | rowgroup_id | xid | ctid | flag ---------+-------------+-------+-------+------- 16796 | 1 | 78437 | (0,1) | 16385 16796 | 1 | 78437 | (0,2) | 16385 16796 | 1 | 78439 | (0,1) | 4097 16796 | 1 | 78439 | (0,2) | 4097 (4 rows) gs_htap_tmu_chunk_meta(rel_oid oid, rowgroup_id integer) 描述:查看实时事务单元TMU元数据信息。当rowgroup_id为0时,返回所有行组中的实时事务单元TMU数据信息;当rowgroup_id非0时,返回表中指定行组中的实时事务单元TMU数据信息。 返回值类型:record 备注:必须是系统管理员或运维管理员才能执行此函数。 表2 gs_htap_tmu_chunk_meta参数说明 参数类型 参数名 类型 描述 输入参数 rel_oid oid 行存表oid信息。 输入参数 rowgroup_id integer unsigned 行组唯一标识。 输出参数 rel_oid oid 行存表oid信息。 输出参数 rowgroup_id integer unsigned 行组唯一标识。 输出参数 status smallint unsigned 表示TMU的状态。 1表示TMU没有被清理过。 2表示TMU被清理过。 输出参数 row_count integer unsigned 数据行数。 输出参数 buffer_count integer unsigned 包含的buffer个数。 输出参数 mem_usage bigint 申请内存大小。 输出参数 inprogress cstring 表示插入TMU数据的事务处于活跃状态的占比。 输出参数 completed cstring 表示插入TMU数据的事务处于提交或回滚状态的占比。 示例: 当enable_htap=off时: gaussdb=# select * from gs_htap_tmu_chunk_meta(16796,0); ERROR: Query failed due to ENABLE_HTAP is not enabled. 当enable_htap=on时: gaussdb=# select * from gs_htap_tmu_chunk_meta(16796,0); rel_oid | rowgroup_id | status | row_count | buffer_count | mem_usage | inprogress | completed ---------+-------------+--------+-----------+--------------+-----------+------------+----------- 16796 | 1 | 1 | 4 | 1 | 65536 | 0.00% | 100.00% (1 row) gs_imcv_bgworker_status() 描述:显示执行IMCV表重建的bgworker的状态信息。 返回值类型:record 备注:必须是系统管理员或运维管理员才能执行此函数。 表3 gs_imcv_bgworker_status参数说明 参数类型 参数名 类型 描述 输出参数 worker_pid bigint 线程号。 输出参数 relation_id oid 正在处理的IMCV表的oid。 输出参数 worker_status cstring 表示idle(准备)、running(进行中)、finished(完成)三种线程工作状态。 输出参数 start_time timestamp with time zone 重建开始的时间戳。 示例: 当enable_htap=off时: gaussdb=# select * from gs_imcv_bgworker_status(); ERROR: Query failed due to ENABLE_HTAP is not enabled. 当enable_htap=on时: gaussdb=# select * from gs_imcv_bgworker_status(); worker_pid | relation_id | worker_status | start_time ------------+-------------+---------------+------------ 0 | 0 | finished | 0 | 0 | idle | 0 | 0 | idle | (3 rows) gs_imcv_flush(reloid oid) 描述:对数据库中指定的IMCV表立即进行一次重建,并显示重建的结果。重建过程将刷新IMCV表,移除旧数据并同步当前表的非活跃数据。 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 当IMCV表内的数据足够新鲜时,可能会跳过重建。本函数对OLTP业务有一定影响,仅作为运维接口使用,且不建议频繁执行。 表4 gs_imcv_flush参数说明 参数类型 参数名 类型 描述 输入参数 reloid oid 行存表oid。 输出参数 output text 返回本次重建的结果。显示行组重建成功的数量以及跳过重建的数量。 示例: 当enable_htap=off时: gaussdb=# select * from gs_imcv_flush(16796); ERROR: Manual row group rebuilding failed due to ENABLE_HTAP is not enabled. 当enable_htap=on时: gaussdb=# select * from gs_imcv_flush(16796); gs_imcv_flush ------------------------------------------------ 2 row groups rebuilt successfully, 1 skipped. (1 row) gs_imcv_taskbuffer_view() 描述:gs_imcv_taskbuffer_view显示HTAP业务中重建任务队列使用情况,入参为空。 返回值类型:record 备注:必须是系统管理员或运维管理员才能执行此函数。 表5 gs_imcv_taskbuffer_view参数说明 参数类型 参数名 类型 描述 输出参数 buffer_is_empty boolean 任务队列是否为空。默认值为t。 输出参数 buffer_is_full boolean 任务队列是否存满。默认值为f。 输出参数 buffer_used_space integer 任务已使用空间。默认值为0。 输出参数 buffer_free_space integer 任务剩余空间。默认值为999。 示例: 当enable_htap=off时: gaussdb=# select * from gs_imcv_taskbuffer_view(); ERROR: Query failed due to ENABLE_HTAP is not enabled. 当enable_htap=on时: gaussdb=# select * from gs_imcv_taskbuffer_view(); buffer_is_empty | buffer_is_full | buffer_used_space | buffer_free_space -----------------+----------------+-------------------+------------------- t | f | 0 | 999 (1 row) gs_imcu_meta(rel_name) 描述:gs_imcu_meta用于显示指定rel_name的IMCV表下的IMCU元信息。 返回值类型:record 表6 gs_imcu_meta参数列表 参数类型 参数 类型 描述 输入参数 relname text IMCV表名。 输出参数 reloid oid 表id。 输出参数 relname text 表名。 输出参数 imcu_xmin xid 预留,暂不使用。 输出参数 imcu_id integer IMCU id。 输出参数 row_count integer IMCU行数。 输出参数 imcu_size integer IMCU大小,单位字节。 输出参数 imcu_mode integer IMCU加载列数据特征: 普通。 全部为空。 相同值。 无最大最小值。 有空行。 输出参数 imcu_pointer bigint 预留,暂不使用。 输出参数 magic integer IMCU校验magic。 输出参数 attnum smallint IMCU加载列对应的attnum。 示例: gaussdb=# SELECT * FROM gs_imcu_meta('test2'); I reloid | relname | imcu_xmin | imcu_id | row_count | imcu_size | imcu_mode | imcu_pointer | magic | attnum --------+---------+-----------+---------+-----------+-----------+-----------+--------------+-------+-------- 115114 | test2 | 0 | 1 | 9 | 8192 | 1 | 0 | 74802 | 0 115114 | test2 | 0 | 1 | 9 | 8192 | 1 | 0 | 74802 | 1 115114 | test2 | 0 | 1 | 9 | 8192 | 1 | 0 | 74802 | 2 115114 | test2 | 0 | 1 | 9 | 8192 | 1 | 0 | 74802 | 3 115114 | test2 | 0 | 1 | 9 | 8192 | 0 | 0 | 74802 | 4 115114 | test2 | 0 | 1 | 9 | 8192 | 0 | 0 | 74802 | 5 (6 rows) 备注:该示例表示共有1个行组(imcu_id为1),每一行代表一个cu(其中attnum为0的列为ctid列),每个cu行数为9行。 gs_imcv_status() 描述:gs_imcv_status函数用于显示当前所有IMCV表的状态信息。 返回值类型:record 表7 gs_imcv_status参数列表 参数 参数 类型 描述 输出参数 reloid oid 表id。 输出参数 relname name 表名。 输出参数 dbname name 数据库名。 输出参数 username name 用户名。 输出参数 parentoid oid 父表id。 输出参数 imcvstatus char IMCV表状态: 'I': POPULATE_STAT_INIT初始化。 'L': POPULATE_STAT_LOAD_START开始加载。 'M': POPULATE_STAT_LOAD_META_DONE加载元数据。 'F': POPULATE_STAT_LOAD_FINISH加载完成。 'D': POPULATE_STAT_DROP已删除。 'E': POPULATE_STAT_ERROR异常。 输出参数 imcvnattr smallint 加载列数量。 输出参数 imcvkey int2vector 加载的列数组。 输出参数 priority smallint 加载优先级。 输出参数 rowgroup_num integer 行组数。 输出参数 cu_num_in_mem integer 内存中的IMCU数量。 输出参数 cu_mem_size bigint IMCU占用的内存大小,单位字节。 输出参数 cu_num_in_disk integer 暂不支持,值为0。 输出参数 cu_disk_size bigint 暂不支持,值为0。 示例: gaussdb=# SELECT * FROM gs_imcv_status(); reloid | relname | dbname | username | parentoid | imcvstatus | imcvnattr | imcvkey | priority | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size --------+---------+----------+----------+-----------+------------+-----------+-----------+----------+--------------+---------------+-------------+----------------+-------------- 115114 | test2 | postgres | lqy | 0 | F | 5 | 1 2 3 4 5 | 1 | 1 | 6 | 49152 | 0 | 0 (1 row) gs_imcu_slot_status() 描述:gs_imcu_slot_status记录了IMCV表下的IMCU对应的缓存slot信息。 返回值类型:record 表8 gs_imcu_slot_status参数列表 参数类型 参数 类型 描述 输出参数 reloid oid 表id。 输出参数 cu_id integer IMCU id。 输出参数 col_id integer IMCU 所属列id。 输出参数 slot_id integer 缓存区slot id。 输出参数 block_size integer IMCU内存大小,单位字节。 输出参数 flag char 缓存块标志位。 示例(flag为\x01表示缓存slot包含有效数据): gaussdb=# SELECT * FROM gs_imcu_slot_status(); reloid | cu_id | col_id | slot_id | block_size | flag --------+-------+--------+---------+------------+------ 115114 | 1 | 1 | 0 | 8192 | \x01 115114 | 1 | 2 | 1 | 8192 | \x01 115114 | 1 | 3 | 2 | 8192 | \x01 115114 | 1 | 4 | 3 | 8192 | \x01 115114 | 1 | 5 | 4 | 8192 | \x01 115114 | 1 | 0 | 5 | 8192 | \x01 (6 rows) 父主题: 系统管理函数
  • PG_STAT_BGWRITER PG_STAT_BGWRITER视图显示后端写进程活动的统计信息。 表1 PG_STAT_BGWRITER字段 名称 类型 描述 checkpoints_timed bigint 定期执行的检查点数。 checkpoints_req bigint 主动执行的检查点数。 checkpoint_write_time double precision 将文件写入到磁盘时,在检查点处理部分花费的时间总量,以毫秒为单位。 checkpoint_sync_time double precision 将文件同步到磁盘时,在检查点处理部分花费的时间总量,以毫秒为单位。 buffers_checkpoint bigint 检查点写入的缓冲区的数量。 buffers_clean bigint 后端写进程写入的缓冲区的数量。 maxwritten_clean bigint 后端写进程因写入的缓冲区过多导致的清理扫描停止的次数。 buffers_backend bigint 后端直接写入的缓冲区的数量。 buffers_backend_fsync bigint 后端自己执行fsync调用的次数 (通常情况下,即使后端自己执行了这些写入动作,后端写进程也会再处理一次)。 buffers_alloc bigint 分配的缓冲区数量。 stats_reset timestamp with time zone 这些统计被重置的时间。 父主题: 其他系统视图
  • SUMMARY_WORKLOAD_TRANSACTION 显示数据库内汇聚的负载事务信息,如表1所示。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 SUMMARY_WORKLOAD_TRANSACTION字段 名称 类型 描述 workload name 负载的名称。 commit_counter numeric 用户事务commit数量。 rollback_counter numeric 用户事务rollback数量。 resp_min bigint 用户事务最小响应时间(单位:微秒)。 resp_max bigint 用户事务最大响应时间(单位:微秒)。 resp_avg bigint 用户事务平均响应时间(单位:微秒)。 resp_total numeric 用户事务总响应时间(单位:微秒)。 bg_commit_counter numeric 后台事务commit数量。 bg_rollback_counter numeric 后台事务rollback数量。 bg_resp_min bigint 后台事务最小响应时间(单位:微秒)。 bg_resp_max bigint 后台事务最大响应时间(单位:微秒)。 bg_resp_avg bigint 后台事务平均响应时间(单位:微秒)。 bg_resp_total numeric 后台事务总响应时间(单位:微秒)。 dbid oid 统计信息所属的数据库id。 父主题: Workload
  • 示例 清理表数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 --创建表reason。 gaussdb=# CREATE TABLE reason (r_reason_sk int,r_reason_id varchar(16),r_reason_desc varchar(100)); --向表中插入多条记录。 gaussdb=# INSERT INTO reason values(1,'AAAAAAAABAAAAAAA','reason 1'), (5,'AAAAAAAABAAAAAAA','reason 2'), (15,'AAAAAAAABAAAAAAA','reason 3'), (25,'AAAAAAAABAAAAAAA','reason 4'), (35,'AAAAAAAABAAAAAAA','reason 5'), (45,'AAAAAAAACAAAAAAA','reason 6'); --查看表的信息,大小约为8kB gaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+------------+------------------------------------------------------------------+------------- public | reason | table | omm1 | 8192 bytes | {orientation=row,compression=no,storage_type=USTORE,segment=off} | (1 row) --使用DELETE语句不带WHERE条件,清空表的数据,并查看表的大小。 gaussdb=# DELETE FROM reason; gaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+------------+------------------------------------------------------------------+------------- public | reason | table | omm1 | 8192 bytes | {orientation=row,compression=no,storage_type=USTORE,segment=off} | (1 row) --使用TRUNCATE清空表reason,并查看表的大小 gaussdb=# TRUNCATE TABLE reason; gaussdb=# \d+ List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------+-------+-------+---------+------------------------------------------------------------------+------------- public | reason | table | omm1 | 0 bytes | {orientation=row,compression=no,storage_type=USTORE,segment=off} | (1 row) --删除表。 gaussdb=# DROP TABLE reason; 清理分区表数据。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 --创建分区表。 gaussdb=# CREATE TABLE reason_p( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) )PARTITION BY RANGE (r_reason_sk)( partition p_05_before values less than (05), partition p_15 values less than (15), partition p_25 values less than (25), partition p_35 values less than (35), partition p_45_after values less than (MAXVALUE) ); --插入数据。 gaussdb=# INSERT INTO reason_p values(1,'AAAAAAAABAAAAAAA','reason 1'), (5,'AAAAAAAABAAAAAAA','reason 2'), (15,'AAAAAAAABAAAAAAA','reason 3'), (25,'AAAAAAAABAAAAAAA','reason 4'), (35,'AAAAAAAABAAAAAAA','reason 5'), (45,'AAAAAAAACAAAAAAA','reason 6'); --清空分区p_05_before。 gaussdb=# ALTER TABLE reason_p TRUNCATE PARTITION p_05_before UPDATE GLOBAL INDEX; --清空分区p_15。 gaussdb=# ALTER TABLE reason_p TRUNCATE PARTITION for (13) UPDATE GLOBAL INDEX; --清空分区表。 gaussdb=# TRUNCATE TABLE reason_p; --删除表reason_p。 gaussdb=# DROP TABLE reason_p;
  • 参数说明 ONLY 如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 CONTINUE IDENTITY 不改变序列的值。这是缺省值。 CASCADE | RESTRICT CASCADE:级联清空所有由于CASCADE而被添加到组中的表。 RESTRICT(缺省值):如果其他表在该表上有外键引用则拒绝清空。 PURGE 默认将表数据放入回收站中,PURGE直接清理。 partition_name 目标分区表的分区名。 取值范围:已存在的分区名。 partition_value 指定的分区键值。 通过PARTITION FOR子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行删除数据分区的分区键的取值范围。 使用PARTITION FOR子句时,partition_value所在的整个分区会被清空。
  • 注意事项 TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。 TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少: DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。 TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE、DELETE和DROP三者的差异如下: TRUNCATE TABLE:删除内容,释放空间,但不删除定义。 DELETE TABLE:删除内容,不删除定义,不释放空间。 DROP TABLE:删除内容和定义,释放空间。
  • 语法格式 清理表数据。 TRUNCATE [ TABLE ] [ ONLY ] {table_name [ * ]} [, ... ] [ CONTINUE IDENTITY ] [ CASCADE | RESTRICT] [ PURGE ]; 清理表分区的数据。 ALTER TABLE [ IF EXISTS ] { [ ONLY ] table_name | table_name * | ONLY ( table_name ) } TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ];
共100000条