华为云用户手册

  • ALL_OBJE CTS ALL_OBJECTS视图记录了当前用户可访问的数据库对象。 表1 ALL_OBJECTS字段 名称 类型 描述 owner name 对象的所有者 object_name name 对象的名称 object_id oid 对象的OID object_type name 对象的类型 namespace oid 对象所在的命名空间 created timestamp with time zone 对象的创建时间 last_ddl_time timestamp with time zone 对象的最后修改时间 created和last_ddl_time支持的范围参见PG_OBJECT中的记录范围。 父主题: 系统视图
  • GS_WLM_OPERATOR_STATIS TICS GS_WLM_OPERATOR_STATISTI CS 视图显示当前用户正在执行的作业的算子相关信息。 表1 GS_WLM_OPERATOR_STATISTICS的字段 名称 类型 描述 queryid bigint 语句执行使用的内部query_id。 pid bigint 后端线程ID。 plan_node_id integer 查询对应的执行计划的plan node id。 plan_node_name text 对应于plan_node_id的算子的名称,算子名称长度最大为127字符(不包含空格等格式化字符)。 start_time timestamp with time zone 该算子第一次开始执行的时间。 duration bigint 该算子从开始执行直到结束时总的执行时间(ms)。 status text 当前算子的执行状态,包括waiting、running和finished。 query_dop integer 当前算子执行时的并行度。 estimated_rows bigint 优化器估算的行数信息,若返回的预估行数超过int64_max时,显示为int64_max。 tuple_processed bigint 当前算子在所有DN上的返回的元素个数总和,若返回的预估行数超过int64_max时,显示为int64_max。 min_peak_memory integer 当前算子在所有DN上的最小内存峰值(MB)。 max_peak_memory integer 当前算子在所有DN上的最大内存峰值(MB)。 average_peak_memory integer 当前算子在所有DN上的平均内存峰值(MB)。 memory_skew_percent integer 当前算子在各DN间的内存使用倾斜率。 min_spill_size integer 若发生下盘,所有下盘DN的最小逻辑下盘数据量(MB),默认为0。 max_spill_size integer 若发生下盘,所有下盘DN的最大逻辑下盘数据量(MB),默认为0。 average_spill_size integer 若发生下盘,所有下盘DN的平均逻辑下盘数据量(MB),默认为0。 spill_skew_percent integer 若发生下盘,DN间下盘倾斜率。 min_cpu_time bigint 该算子在所有DN上的最小执行时间(ms)。 max_cpu_time bigint 该算子在所有DN上的最大执行时间(ms)。 total_cpu_time bigint 该算子在所有DN上的总执行时间(ms)。 cpu_skew_percent integer DN间执行时间的倾斜率。 warning text 主要显示如下几类告警信息: Sort/SetOp/HashAgg/HashJoin spill Spill file size large than 256MB Broadcast size large than 100MB Early spill Spill times is greater than 3 Spill on memory adaptive Hash table conflict 父主题: 系统视图
  • PGXC_TOTAL_USER_RESOURCE_INFO PGXC_TOTAL_USER_RESOURCE_INFO视图显示所有实例上用户实时资源消耗信息。该视图仅8.2.0及以上集群版本支持。 表1 PGXC_TOTAL_USER_RESOURCE_INFO字段 名称 类型 描述 nodename name 实例名称,包含CN和DN。 username name 用户名。 used_memory integer 正在使用的内存大小,单位MB。 DN:显示当前DN上对应用户正在使用的内存大小。 CN:显示所有DN上对应用户正在使用的内存累加和。 total_memory integer 可以使用的内存大小,单位MB。值为0表示未限制最大可用内存,其限制取决于数据库最大可用内存。 DN:显示当前DN上对应用户可以使用的内存大小。 CN:显示所有DN上对应用户可以使用的内存大小之和。 used_cpu double precision 正在使用的CPU核数(仅统计非默认资源池上复杂作业的CPU使用情况,且该值为相关控制组的CPU使用统计值)。 DN:显示当前DN上对应用户正在使用的CPU核数。 CN:显示所有DN上对应用户正在使用的CPU核数之和。 total_cpu integer 用户关联控制组的CPU核数总和。 DN:显示当前DN上对应用户能够使用的CPU核数。 CN:显示所有DN上对应用户能够使用的CPU核数之和。 used_space bigint 已使用的永久表存储空间大小,单位KB。 DN:显示当前DN上对应用户已使用的永久表存储空间大小。 CN:显示所有DN上对应用户已使用的永久表存储空间大小之和。 total_space bigint 可使用的永久表存储空间大小,单位KB,值为-1表示未限制永久表存储空间。 DN:显示当前DN上对应用户可使用的永久表存储空间大小。 CN:显示所有DN上对应用户可使用的永久表存储空间大小之和。 used_temp_space bigint 已使用的临时表存储空间大小,单位KB。 DN:显示当前DN上对应用户已使用的临时表存储空间大小。 CN:显示所有DN上对应用户已使用的临时表存储空间大小之和。 total_temp_space bigint 可使用的临时表存储空间大小,单位KB,值为-1表示未限制临时表存储空间。 DN:显示当前DN上对应用户可使用的临时表存储空间大小。 CN:显示所有DN上对应用户可使用的临时表存储空间大小之和。 used_spill_space bigint 已使用的算子落盘空间大小,单位KB。 DN:显示当前DN上对应用户已使用的算子落盘空间大小 CN:显示所有DN上对应用户已使用的算子落盘空间大小之和 total_spill_space bigint 可使用的算子落盘空间大小,单位KB,值为-1表示未限制算子落盘空间。 DN:显示当前DN上对应用户可使用的算子落盘空间大小。 CN:显示所有DN上对应用户可使用的算子落盘空间大小之和。 read_kbytes bigint CN:过去5秒内,该用户在所有DN上逻辑读的字节总数。单位KB。 DN:实例启动至当前时间为止,该用户逻辑读的字节总数。单位KB。 write_kbytes bigint CN:过去5秒内,该用户在所有DN上逻辑写的字节总数。单位KB。 DN:实例启动至当前时间为止,该用户逻辑写的字节总数。单位KB。 read_counts bigint CN:过去5秒内,该用户在所有DN上逻辑读的次数之和。 DN:实例启动至当前时间为止,该用户逻辑读的次数之和。 write_counts bigint CN:过去5秒内,该用户在所有DN上逻辑写的次数之和。 DN:实例启动至当前时间为止,该用户逻辑写的次数之和。 read_speed double precision CN:过去5秒内,该用户在单个DN上逻辑读平均速率。单位KB/s。 DN:过去5秒内,该用户在该DN上逻辑读平均速率。单位KB/s。 write_speed double precision CN:过去5秒内,该用户在单个DN上逻辑写平均速率。单位KB/s。 DN:过去5秒内,该用户在该DN上逻辑写平均速率。单位KB/s。 send_speed double precision CN:过去5秒内,该用户在所有DN上网络发送平均速率之和。单位KB/s。 DN:过去5秒内,该用户在该DN上网络发送平均速率。单位KB/s。 recv_speed double precision CN:过去5秒内,该用户在所有DN上网络接收平均速率之和。单位KB/s。 DN:过去5秒内,该用户在该DN上网络接收平均速率。单位KB/s。 父主题: 系统视图
  • DELETE DELETE函数可以从数组删除数组中的所有元素。 用法如下: varray.DELETE或varray.DELETE() 示例: 1 2 3 4 5 6 7 8 9 10 11 --演示在存储过程中对数组DELETE函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; BEGIN v_varray := varray_type(1, 2, 3, 4, 5); v_varray.delete; DBMS_OUTPUT.PUT_LINE('v_varray.count:' || v_varray.count); END; / 执行结果: 1 2 call test_varray(); v_varray.count:0
  • LIMIT LIMIT函数可以返回数组的最大长度限制。 用法如下: varray.LIMIT或varray.LIMIT() 示例: 1 2 3 4 5 6 7 8 9 10 --演示在存储过程中对数组LIMIT函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; BEGIN v_varray := varray_type(1, 2, 3, 4, 5); DBMS_OUTPUT.PUT_LINE('v_varray.limit:' || v_varray.limit); END; / 执行结果: 1 2 call test_varray(); v_varray.limit:20
  • EXISTS EXISTS函数可以判断数组下标是否存在。 用法如下: varray.EXISTS(index) 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --演示在存储过程中对数组EXISTS函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; BEGIN v_varray := varray_type(1, 2, 3); IF v_varray.EXISTS(1) THEN DBMS_OUTPUT.PUT_LINE('v_varray.EXISTS(1)'); END IF; IF NOT v_varray.EXISTS(10) THEN DBMS_OUTPUT.PUT_LINE('NOT v_varray.EXISTS(10)'); END IF; END; / 执行结果: 1 2 3 call test_varray(); v_varray.EXISTS(1) NOT v_varray.EXISTS(10)
  • NEXT和PRIOR NEXT函数和PRIOR函数主要用于数组的循环遍历中,NEXT函数会根据入参index值,返回下一个数组元素的下标,若已经到达数组下标最大值则返回NULL。PRIOR函数会根据入参index值,返回上一个数组元素的下标,若已经到达数组下标最小值则返回NULL。 用法如下: varray.NEXT(index) varray.PRIOR(index) 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 --演示在存储过程中对数组NEXT和PRIOR函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; i int; BEGIN v_varray := varray_type(1, 2, 3); i := v_varray.COUNT; WHILE i IS NOT NULL LOOP DBMS_OUTPUT.PUT_LINE('test prior v_varray('||i||')=' || v_varray(i)); i := v_varray.PRIOR(i); END LOOP; i := 1; WHILE i IS NOT NULL LOOP DBMS_OUTPUT.PUT_LINE('test next v_varray('||i||')=' || v_varray(i)); i := v_varray.NEXT(i); END LOOP; END; / 执行结果: 1 2 3 4 5 6 7 call test_varray(); test prior v_varray(3)=3 test prior v_varray(2)=2 test prior v_varray(1)=1 test next v_varray(1)=1 test next v_varray(2)=2 test next v_varray(3)=3
  • TRIM TRIM函数可以从数组尾部删除指定数量的元素。 用法如下: varray.TRIM(size) 其中varray.TRIM这种无参的调用会默认入参为1,等价于varray.TRIM(1) 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 --演示在存储过程中对数组TRIM函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; BEGIN v_varray := varray_type(1, 2, 3, 4, 5); v_varray.trim(3); DBMS_OUTPUT.PUT_LINE('v_varray.count' || v_varray.count); v_varray.trim; DBMS_OUTPUT.PUT_LINE('v_varray.count:' || v_varray.count); END; / 执行结果: 1 2 3 call test_varray(); v_varray.count:2 v_varray.count:1
  • EXTEND EXTEND函数主要是为了兼容Oracle的两种用法。在 GaussDB (DWS)中,数组会自动增长,EXTEND函数不是必须的。如果是新写的存储过程,完全没有必要使用EXTEND函数。 EXTEND函数可以对数组进行扩展,EXTEND有两种调用方式。 方式一: EXTEND包含一个整形入参,表示数组向后扩展size大小的长度,EXTEND后COUNT和LAST函数的值也会有相应的变化。 用法如下: varray.EXTEND(size) 其中varray.EXTEND这种无参的调用默认会向后扩展1位等价于varray.EXTEND(1) 方式二: EXTEND包含两个整形入参,第一个参数代表向后扩展size大小的长度,第二个参数表示扩展后的数组元素值和之下标为index的元素相同。 用法如下: varray.EXTEND(size, index) 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --演示在存储过程中对数组EXTEND函数的用法。 CREATE OR REPLACE PROCEDURE test_varray AS TYPE varray_type IS VARRAY(20) OF INT; v_varray varray_type; BEGIN v_varray := varray_type(1, 2, 3); v_varray.extend(3); DBMS_OUTPUT.PUT_LINE('v_varray.count=' || v_varray.count); v_varray.extend(2,3); DBMS_OUTPUT.PUT_LINE('v_varray.count=' || v_varray.count); DBMS_OUTPUT.PUT_LINE('v_varray(7)=' || v_varray(7)); DBMS_OUTPUT.PUT_LINE('v_varray(8)=' || v_varray(7)); END; /
  • 数组类型的使用 在使用数组之前,需要自定义一个数组类型。 在存储过程中紧跟AS关键字后面定义数组类型。定义方法为: TYPE array_type IS VARRAY(size) OF data_type [NOT NULL]; 其中: array_type:要定义的数组类型名。 VARRAY:表示要定义的数组类型。 size:取值为正整数,表示可以容纳的成员的最大数量。 data_type:要创建的数组中成员的类型。 NOT NULL: 可选约束,可以约束该数组中的元素均不为NULL。 在GaussDB(DWS)中,数组会自动增长,访问越界会返回一个NULL,不会报错。越界写入数组会提示:Subscript outside of limit. 在存储过程中定义的数组类型,其作用域仅在该存储过程中。 建议选择上述定义方法的一种来自定义数组类型,当同时使用两种方法定义同名的数组类型时,GaussDB(DWS)会优先选择存储过程中定义的数组类型来声明数组变量。 GaussDB(DWS) 8.1.0之前版本, 由于数组可以自动增长,系统不会校验数组越界以及数组元素的长度限制。当前版本为了兼容Oracle的用法增加了相关约束。如果已经存在越界写入等场景,可通过在behavior_compat_options参数中配置varray_verification,来兼容之前不校验的行为。 示例:
  • ALL_TAB_COLUMNS ALL_TAB_COLUMNS视图存储了当前用户可访问的表和视图的列的描述信息。 表1 ALL_TAB_COLUMNS字段 名称 类型 描述 owner character varying(64) 表或视图的所有者。 table_name character varying(64) 表名或视图名。 column_name character varying(64) 列名。 data_type character varying(128) 列的数据类型。 column_id integer 对象创建或增加列时列的序号。 data_length integer 列的字节长度。 avg_col_len numeric 列的平均长度(单位字节)。 nullable bpchar 该列是否允许为空,对于主键约束和非空约束,该值为n。 data_precision integer 数据类型的精度,对于numeric数据类型有效,其他类型为NULL。 data_scale integer 小数点右边的位数,对于numeric数据类型有效,其他类型为0。 char_length numeric 列的长度(单位字符),只对varchar,nvarchar2,bpchar,char类型有效。 schema character varying(64) 包含该表或视图的命名空间。 kind text 当前记录所属的种类,如果此列属于表,则此字段显示为table;如果此列属于视图,则此字段显示为view。 父主题: 系统视图
  • PG_LIFECYCLE_DATA_DISTRIBUTE PG_LIFECYCLE_DATA_DISTRIBUTE视图查询OBS多温表中冷热数据分布情况。 表1 PG_LIFECYCLE_DATA_DISTRIBUTE字段 名称 类型 描述 schemaname name 模式名 tablename name 当前表名 nodename name 节点名 hotpartition text 该DN节点上的热分区 coldpartition text 该DN节点上的冷分区 switchablepartition text 该DN节点上的可切分区 hotdatasize text 该DN节点上的热分区数据大小 colddatasize text 该DN节点上的冷分区数据大小 switchabledatasize text 该DN节点上的可切分区数据大小 父主题: 系统视图
  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会收集当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例: 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则使用如下命令查看: 1 SELECT datname, usename, state FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID结束会话。 1 SELECT PG_TERMINATE_BACKEND(139834759993104); 显示类似如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示类似如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前会话后台线程时,客户端不会退出而是自动重连。即还会返回“The connection to the server was lost. Attempting reset: Succeeded.” 1 2 3 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
  • 查看数据库中包含的表 例如,在PG_TABLES系统表中查看public schema中包含的所有表。 1 SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public'; 结果类似如下这样: 1 2 3 4 5 6 7 8 9 tablename ------------------- err_hr_staffs test err_hr_staffs_ft3 web_returns_p1 mig_seq_table films4 (6 rows)
  • 前提条件 GUC参数enable_resource_track为on (默认为on)。 GUC参数resource_track_level为query、perf或operator(默认为query)。设置方法详见表2。 GUC参数enable_resource_record为on(默认为on)。 GUC参数resource_track_duration小于作业执行时间(默认为60s)。 GUC参数enable_track_record_subsql控制是否记录存储过程、匿名块内部语句(默认为on)。 GUC参数resource_track_subsql_duration小于存储过程中内部语句的执行时间(默认为180s)。 监控作业类型为:资源监控实时视图(参见表1)中记录的作业结束时的执行时间大于或等于resource_track_duration的作业。 Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。
  • 连接类型介绍 通过SQL完成各种复杂的查询,多表之间的连接是必不可少的。连接分为:内连接和外连接两大类,每大类中还可进行细分。 内连接:标准内连接(INNER JOIN),交叉连接(CROSS JOIN)和自然连接(NATURAL JOIN)。 外连接:左外连接(LEFT OUTER JOIN),右外连接(RIGHT OUTER JOIN)和全外连接(FULL JOIN)。 为了能更好的说明各种连接之间的区别,下面通过具体示例进行详细的阐述。 创建示例表student和math_score,并插入数据,设置enable_fast_query_shipping为off(默认为on)即查询优化器使用分布式框架;参数explain_perf_mode为pretty(默认值为pretty)指定explain的显示格式。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE student( id INTEGER, name varchar(50) ); CREATE TABLE math_score( id INTEGER, score INTEGER ); INSERT INTO student VALUES(1, 'Tom'); INSERT INTO student VALUES(2, 'Lily'); INSERT INTO student VALUES(3, 'Tina'); INSERT INTO student VALUES(4, 'Perry'); INSERT INTO math_score VALUES(1, 80); INSERT INTO math_score VALUES(2, 75); INSERT INTO math_score VALUES(4, 95); INSERT INTO math_score VALUES(6, NULL); SET enable_fast_query_shipping = off; SET explain_perf_mode = pretty;
  • 多表查询中on条件和where条件的区别 从上面各种连接语法中可见,除自然连接和交叉连接外,其他都需要有on条件(using在查询解析过程中会被转为on条件)来限制两表连接的结果。通常在查询的语句中也都会有where条件限制查询结果。这里说的on连接条件和where过滤条件是指不含可以下推到表上的过滤条件。on和where的区别是: on条件是两表连接的约束条件。 where是对两表连接后产生的结果集再次进行过滤。 简单总结就是:on条件优先于where条件,在两表进行连接时被应用;生成两表连接结果集后,再应用where条件。
  • PGXC_BULKLOAD_PROGRESS PGXC_BULKLOAD_PROGRESS显示导入业务的执行进度,仅支持GDS普通文件导入业务。需要有系统管理员权限才可以访问此视图 表1 PGXC_BULKLOAD_PROGRESS字段 名称 类型 描述 session_id bigint GDS的会话ID。 query_id bigint 查询ID,对应debug_query_id。 query text 查询语句。 progress text 进度百分比。 父主题: 系统视图
  • PG_STAT_USER_INDEXES PG_STAT_USER_INDEXES视图显示数据库中用户自定义普通表和TOAST表的索引状态信息。 表1 PG_STAT_USER_INDEXES字段 名称 类型 描述 relid oid 此索引表的OID。 indexrelid oid 索引的OID。 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 通过索引扫描的次数。 idx_tup_read bigint 通过索引上扫描返回的索引条目数量。 idx_tup_fetch bigint 索引扫描抓取的有live数据行的数目。 父主题: 系统视图
  • PG_BULKLOAD_STATISTICS 在集群任一正常节点上,通过查询PG_BULKLOAD_STATISTICS视图可以获取当前登录节点正在进行的导入导出业务执行情况,其中每一个导入/导出业务对应一条记录。需要有系统管理员权限才可以访问此视图。 表1 PG_BULKLOAD_STATISTICS字段 名称 类型 描述 node_name text 节点名称。 db_name text 数据库名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 lwtid integer 当前线程的轻量级线程号。 session_id bigint GDS的会话ID。 direction text 业务类型,取值包括:gds to file、gds from file、gds to pipe、gds from pipe、copy from、copy to。 query text 查询语句。 address text 当前导入导出外表的location。 query_start timestamp with time zone 导入/导出开始时间。 total_bytes bigint 待处理数据的总大小。 仅GDS普通文件导入时,且该行记录来自CN节点才会显示,否则为空。 phase text 当前业务导入导出执行阶段,包括:INITIALIZING、TRANSFER_DATA、RELEASE_RESOURCE。 done_lines bigint 已传输行数。 done_bytes bigint 已传输字节数。 父主题: 系统视图
  • 示例 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 --创建存储过程proc_staffs CREATE OR REPLACE PROCEDURE proc_staffs ( section NUMBER(6), salary_sum out NUMBER(8,2), staffs_count out INTEGER ) IS BEGIN SELECT sum(salary), count(*) INTO salary_sum, staffs_count FROM staffs where section_id = section; END; / --创建存储过程proc_return. CREATE OR REPLACE PROCEDURE proc_return AS v_num NUMBER(8,2); v_sum INTEGER; BEGIN proc_staffs(30, v_sum, v_num); --调用语句 dbms_output.put_line(v_sum||'#'||v_num); RETURN; --返回语句 END; / --调用存储过程proc_return. CALL proc_return(); --清除存储过程 DROP PROCEDURE proc_staffs; DROP PROCEDURE proc_return; --创建函数func_return. CREATE OR REPLACE FUNCTION func_return returns void language plpgsql AS $$ DECLARE v_num INTEGER := 1; BEGIN dbms_output.put_line(v_num); RETURN; --返回语句 END $$; -- 调用函数func_return CALL func_return(); 1 -- 清除函数 DROP FUNCTION func_return;
  • PG_COLLATION PG_COLLATION系统表描述可用的排序规则,本质上从一个SQL名字映射到操作系统本地类别。 表1 PG_COLLATION字段 名字 类型 引用 描述 oid oid - 行标识符(隐藏属性,必须明确选择才会显示) collname name - 排序规则名(每个命名空间和编码唯一) collnamespace oid PG_NAMESPACE.oid 包含该排序规则的命名空间的OID collowner oid PG_AUTHID.oid 排序规则的所有者 collencoding integer - 排序规则可用的编码,如果适用于任意编码为-1 collcollate name - 排序规则对象的LC_COLLATE collctype name - 排序规则对象的LC_CTYPE 父主题: 系统表
  • PGXC_RESPOOL_RESOURCE_INFO PGXC_RESPOOL_RESOURCE_INFO视图显示所有实例上资源池实时监控信息。 DN上仅显示当前DN所属逻辑集群的资源池监控信息。 从8.2.0集群版本开始,新增了内存负反馈机制功能,CCN节点会根据DN节点的实际内存使用情况辅助反向调节语句的估算内存统计值,缓解语句估算内存高估场景,当CCN节点触发通过负反馈机制来减少估算内存统计值来增发作业时,由于CCN节点更新了语句缩减后的估算内存统计值,而CN节点还保留了原先的估算内存统计值,会导致资源池监控视图中的估算内存超过资源池的上限。 语句的算子分为重内存算子和非重内存算子,对于语句的内存管控是重内存算子,非重内存算子的内存开销较小;由于非重内存算子的内存开销、线程初始化的开销、表达式的开销等这些内存不做管控,会导致资源池的used_mem会在一定程度上超过mem_limit值。 表1 PGXC_RESPOOL_RESOURCE_INFO字段 名称 类型 描述 nodename name 实例名称,包含CN和DN。 nodegroup name 资源池所属逻辑集群名称,默认集群显示"installation"。 rpname name 资源池名称。 cgroup name 资源池关联控制组名称。 ref_count int 资源池引用作业数,作业经过资源池不管是否管控都会计数,仅CN上有效。 fast_run int 资源池快车道运行作业数,只在CN上有效。 fast_wait int 资源池快车道排队作业数,只在CN上有效。 fast_limit int 资源池快车道作业并发限制,只在CN上有效。 slow_run int 资源池慢车道运行作业数,只在CN上有效。 slow_wait int 资源池慢车道排队作业数,只在CN上有效。 slow_limit int 资源池慢车道作业并发限制,只在CN上有效。 used_cpu double 资源池5s监控周期内使用CPU个数平均值,保留小数点后2位。 DN:显示当前DN上资源池使用的CPU个数。 CN:显示所有DN上资源池使用CPU的累积和。 cpu_limit int 资源池可用CPU的上限,CPU配额管控情况下为GaussDB(DWS)可用CPU,CPU限额管控情况下为关联控制组CPU可用CPU。 DN:显示当前DN上资源池可用CPU上限。 CN:显示所有DN上资源池可用CPU上限的累积和。 used_mem int 资源池当前使用的内存大小,单位MB。 DN:显示当前DN上资源池使用的内存大小。 CN:显示所有DN上资源池使用内存的累积和。 estimate_mem int 当前CN上,资源池运行作业的估算内存之和,只在CN上有效。 mem_limit int 资源池可用内存上限,单位MB。 DN:显示当前DN上资源池可用内存上限。 CN:显示所有DN上资源池可用内存上限的累积和。 read_kbytes bigint 资源池5s监控周期内逻辑读字节数,单位KB。 DN:显示当前DN上资源池逻辑读字节数。 CN:显示所有DN上资源池逻辑读字节的累积和。 write_kbytes bigint 资源池5s监控周期内逻辑写字节数,单位KB。 DN:显示当前DN上资源池逻辑写字节数。 CN:显示所有DN上资源池逻辑写字节的累积和。 read_counts bigint 资源池5s监控周期内逻辑读次数。 DN:显示当前DN上资源池逻辑读次数。 CN:显示所有DN上资源池逻辑读次数的累积和。 write_counts bigint 资源池5s监控周期内逻辑写次数。 DN:显示当前DN上资源池逻辑写次数。 CN:显示所有DN上资源池逻辑写次数的累积和。 read_speed double 资源池5s监控周期内逻辑读速率的平均值,单位KB/s。 DN:显示当前DN上资源池逻辑读速率。 CN:显示所有DN上资源池逻辑读速率的累积和。 write_speed double 资源池5s监控周期内逻辑写速率平均值,单位KB/s。 DN:显示当前DN上资源池逻辑写速率。 CN:显示所有DN上资源池逻辑写速率的累积和。 send_speed double 资源池5s监控周期内网络发送速率平均值,单位KB/s。 DN:显示当前DN上资源池网络发送速率。 CN:显示所有DN上资源池网络发送速率的累积和。 recv_speed double 资源池5s监控周期内网络发送速率平均值,单位KB/s。 DN:显示当前DN上资源池网络发送速率。 CN:显示所有DN上资源池网络发送速率的累积和。 父主题: 系统视图
  • 示例 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 37 CREATE TABLE t1(a int); INSERT INTO t1 VALUES(1),(10); --RETURN NEXT CREATE OR REPLACE FUNCTION fun_for_return_next() RETURNS SETOF t1 AS $$ DECLARE r t1%ROWTYPE; BEGIN FOR r IN select * from t1 LOOP RETURN NEXT r; END LOOP; RETURN; END; $$ LANGUAGE PLPGSQL; call fun_for_return_next(); a --- 1 10 (2 rows) -- RETURN QUERY CREATE OR REPLACE FUNCTION fun_for_return_query() RETURNS SETOF t1 AS $$ DECLARE r t1%ROWTYPE; BEGIN RETURN QUERY select * from t1; END; $$ language plpgsql; call fun_for_return_next(); a --- 1 10 (2 rows)
  • 语法 创建函数时需要指定返回值SETOF datatype。 return_next_clause::= return_query_clause::= 对以上语法的解释如下: 当需要函数返回一个集合时,使用RETURN NEXT或者RETURN QUERY向结果集追加结果,然后继续执行函数的下一条语句。随着后续的RETURN NEXT或RETURN QUERY命令的执行,结果集中会有多个结果。函数执行完成后会一起返回所有结果。 RETURN NEXT可用于标量和复合数据类型。 RETURN QUERY有一种变体RETURN QUERY EXECUTE,后面还可以增加动态查询,通过USING向查询插入参数。
  • 冷热数据管理的约束限制 目前冷热表只支持列存2.0版本的分区表,外表不支持冷热分区。 对于已经切冷分区再次插入数据,数据直接会进入OBS,不会改变分区的冷热属性。 对于同一分区在同一DN只会存在冷或热的一种情况,对于同一分区在不同DN可能存在部分DN为热数据,部分DN为冷数据。 对于同时存在冷热分区的表,查询时会变慢,因为冷数据存储在OBS上,读写速度和时延都比在本地查询要慢。 只支持修改冷热表的冷热切换策略,不支持修改冷热表的冷数据的表空间。 冷热表的分区操作约束: 不支持对冷分区的数据进行exchange操作。 Merge partition分区只支持热分区和热分区合并、冷分区和冷分区合并,不支持冷热分区合并。 ADD/Merge/Split Partition等分区操作不支持指定表空间为OBS表空间。 不支持创建时指定和修改冷热表分区的表空间。 冷热切换不是只要满足条件就立刻进行冷热数据切换,依赖用户手动调用切换命令,或者通过调度器调用切换命令后才真正进行数据切换。目前自动调度时间为每日0点,可进行修改。 目前冷热切换规则只支持LMT和HPN两种。 冷热数据表不支持物理细粒度备份和恢复,由于物理备份时只备份热数据,在备份恢复前后OBS上冷数据为同一份,不支持truncate和drop table等涉及删除文件操作语句的备份恢复操作。
  • 冷热数据简介 海量大数据场景下,随着业务和数据量的不断增长,数据存储与消耗的资源也日益增长。根据业务系统中用户对不同时期数据的不同使用需求,对膨胀的数据本身进行“冷热”分级管理,不仅可以提高数据分析性能还能降低业务成本。 例如,在网络流量分析系统中,用户可能对最近一个月内安全事件和网络访问情况感兴趣,而很少关注几个月前的数据。针对这样的一些场景,可以将数据按照时间分为:热数据、冷数据。 冷热数据主要从数据访问频率、更新频率进行划分。 Hot(热数据):访问、更新频率较高,未来被调用的概率较高的数据,对访问的响应时间要求很高的数据。 Cold(冷数据):不允许更新或更新频率比较低,访问频率比较低,对访问的响应时间要求不高的数据。 用户可以定义冷热管理表,将符合规则的冷数据切换至OBS上进行存储,可以按照分区自动进行冷热数据的判断和迁移。
  • 冷热数据管理支持功能 支持对冷热表的insert、copy、delete、update、select等表相关的DML操作。 支持对冷热表的权限管理等DCL操作。 支持对冷热表进行analyze、vacuum、merge into等操作和一些分区的操作。 支持从普通列存分区表升级为冷热数据表。 支持带有冷热数据管理表的升级、扩容、缩容和重分布。 支持冷热分区互相转换。该功能仅8.3.0及以上版本支持。
  • 冷热切换策略 目前冷热切换的策略名称支持LMT(last modify time)和HPN(hot partition number),LMT指按分区的最后更新时间切换,HPN指保留热分区的个数切换。 LMT:表示切换[day]时间前修改的热分区数据为冷分区,将该数据迁至OBS表空间中。其中[day]为整型,范围[0,36500],单位为天。 如下图中,设置day为2,即在冷热切换时,根据分区数据的最晚修改时间,保留2日内所修改的分区为热分区,其余数据为冷分区数据。假设当前时间为4月30日,4月30日对[4-26]分区进行了delete操作,4月29日对[4-27]分区进行了insert操作,故在冷热切换时,保留[4-26][4-27][4-29][4-30]四个分区为热分区。 HPN:表示保留HPN个有数据的分区为热分区。分区顺序按照分区的Sequence ID来确定,分区的Sequence ID是根据分区边界值的大小,内置生成的序号,此序号不对外呈现。对于RANGE分区,分区的边界值越大,分区对应的Sequence ID越大;对于LIST分区,分区边界枚举值中的最大值越大,分区对应的Sequence ID越大。在冷热切换时,需要将数据迁移至OBS表空间中。其中HPN为整型,范围为[0,1600]。其中HPN为0时,表示不保留热分区,在进行冷热切换时,将所有有数据的分区都转为冷分区并存储在OBS上。 如下图中,设置HPN为3,即在冷热切换时,保留最新的3个有数据的分区为热分区数据,其余分区均切为冷分区。
  • 使用示例 创建列存冷热数据管理表,指定热数据有效期LMT为100天。 1 2 3 4 5 6 7 8 CREATE TABLE lifecycle_table(i int, val text) WITH (ORIENTATION = COLUMN, storage_policy = 'LMT:100') PARTITION BY RANGE (i) ( PARTITION P1 VALUES LESS THAN(5), PARTITION P2 VALUES LESS THAN(10), PARTITION P3 VALUES LESS THAN(15), PARTITION P8 VALUES LESS THAN(MAXVALUE) )ENABLE ROW MOVEMENT; 切换冷数据至OBS表空间。 自动切换:每日0点调度框架自动触发,无需关注切换情况。 可自定义自动切换时间:根据业务情况调整自动触发时间,修改为每天早晨6点30分。 1 SELECT * FROM pg_obs_cold_refresh_time('lifecycle_table', '06:30:00'); 手动切换。 执行如下操作手动切换单表: 1 ALTER TABLE lifecycle_table refresh storage; 执行如下操作批量切换所有冷热表: 1 SELECT pg_catalog.pg_refresh_storage(); 将冷分区数据转换成热分区。该功能仅8.3.0及以上版本支持。 将冷热表的所有冷分区转换成热分区: 1 SELECT pg_catalog.reload_cold_partition('lifecycle_table'); 将冷热表的指定冷分区转换成热分区: 1 SELECT pg_catalog.reload_cold_partition('lifecycle_table', 'cold_partition_name'); 查看冷热表数据分布情况。 查看单表数据分布情况: 1 SELECT * FROM pg_catalog.pg_lifecycle_table_data_distribute('lifecycle_table'); 查看所有冷热表数据分布情况: 1 SELECT * FROM pg_catalog.pg_lifecycle_node_data_distribute();
共100000条