华为云用户手册

  • GS_AUDITING_AC CES S GS_AUDITING_ACCESS视图显示对数据库DML相关操作的所有审计信息。需要有系统管理员或安全策略管理员权限才可以访问此视图。 表1 GS_AUDITING_ACCESS字段 名称 类型 描述 polname name 策略名称,需要唯一,不可重复。 pol_type text 审计策略类型,值为‘access’,表示审计DML操作。 polenabled boolean 用来表示策略启动开关。 t(true):表示启动。 f(false):表示不启动。 access_type name DML数据库操作相关类型。例如SELECT、INSERT、DELETE等。 label_name name 资源标签名称。对应系统表gs_auditing_policy中的polname字段。 access_object text 用来描述数据库资产的路径。 filter_name text 过滤条件的逻辑字符串。 父主题: 系统视图
  • SUMMARY_FILE_REDO_IOSTAT 集群内汇聚所有的Redo(WAL)相关的统计信息。 表1 SUMMARY_FILE_REDO_IOSTAT字段 名称 类型 描述 phywrts numeric 向wal buffer中写的次数。 phyblkwrt numeric 向wal buffer中写的block的块数。 writetim numeric 向xLog文件中写操作的时间(单位:微秒)。 avgiotim bigint 平均写xLog的时间(writetim/phywrts,单位:微秒)。 lstiotim bigint 最后一次写xLog的时间(单位:微秒)。 miniotim bigint 最小的写xLog时间(单位:微秒)。 maxiowtm bigint 最大的写xLog时间(单位:微秒)。 父主题: File
  • PG_STAT_REPLICATION PG_STAT_REPLICATION视图显示日志同步线程的信息,如发起端发送日志位置,接收端接收日志位置等。 表1 PG_STAT_REPLICATION字段 名称 类型 描述 pid bigint 线程的PID。 usesysid oid 用户系统ID。 usename name 用户名。 application_name text 程序名称。 client_addr inet 客户端地址。 client_hostname text 客户端名。 client_port integer 客户端端口。 backend_start timestamp with time zone 程序启动时间。 state text 日志同步线程的状态。 startup:线程正在启动。 catchup:线程正在建立备用服务器和主服务器的连接。 streaming:线程已建立备用服务器和主服务器的连接,正在进行数据的流复制。 backup:线程正在发送备份。 stopping:线程正在停止。 sender_sent_location text 发送端发送日志位置。 receiver_write_location text 接收端write日志位置。 receiver_flush_location text 接收端flush日志位置。 receiver_replay_location text 接收端replay日志位置。 sync_priority integer 同步复制的优先级(0表示异步)。 sync_state text 同步状态: async:异步复制。 sync:同步复制。 potential:该备用服务器现在是异步的,但假如一个当前的同步服务器发生故障,该服务器会变成同步的。 qurom:在同步与异步之间切换,保证备机中有大于一定数量的同步备机,同步备机数量一般为(n+1)/2-1,n为总副本个数。是否为同步备机取决于是否先接到了日志。详情可参考synchronous_standby_names参数描述。 父主题: 系统视图
  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 ISOLATION_LEVEL_CLAUSE 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,当前事务的隔离级别就不能再次设置。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,可能会读到未提交的数据。提供这个隔离级别可用于在存在某协调节点CN故障等情况下应急使用,建议这种隔离级别下仅做只读操作,避免造成数据不一致。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE: GaussDB 目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。 会话的默认事务特性的访问模式只能在启动数据库时或者通过发送HUP信号进行设置。
  • 语法格式 设置事务的隔离级别、读写模式。 1 2 3 { SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERIS TICS AS TRANSACTION } { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [, ...]
  • GLOBAL_RECOVERY_STATUS GLOBAL_RECOVERY_STATUS视图显示关于主机和备机的日志流控信息。 表1 GLOBAL_RECOVERY_STATUS字段 名称 类型 描述 node_name text 节点的名称,包含主机和备机。 standby_node_name text 备机节点的名称。 source_ip text 主机的IP地址。 source_port integer 主机的端口号。 dest_ip text 备机的IP地址。 dest_port integer 备机的端口号。 current_rto bigint 备机当前的日志流控时间,单位秒。 target_rto bigint 备机通过GUC参数设置的预期流控时间,单位秒。 current_sleep_time bigint 为了达到此RTO预期,主机所需要执行的睡眠时间,单位微秒。 父主题: Utility
  • GLOBAL_REPLICATION_STAT GLOBAL_REPLICATION_STAT视图用于获得各节点描述日志同步状态信息,如发起端发送日志位置、收端接收日志位置等。 表1 GLOBAL_REPLICATION_STAT字段 名称 类型 描述 node_name name 节点名称。 pid bigint 线程的PID。 usesysid oid 用户系统ID。 usename name 用户名。 application_name text 程序名称。 client_addr inet 客户端地址。 client_hostname text 客户端名。 client_port integer 客户端端口。 backend_start timestamp with time zone 程序启动时间。 state text 日志复制的状态: 追赶状态。 一致的流状态。 sender_sent_location text 发送端发送日志位置。 receiver_write_location text 接收端write日志位置。 receiver_flush_location text 接收端flush日志位置。 receiver_replay_location text 接收端replay日志位置。 sync_priority integer 同步复制的优先级(0表示异步)。 sync_state text 同步状态: 异步复制。 同步复制。 潜在同步者。 父主题: Utility
  • 统计信息调优介绍 GaussDB是基于代价估算生成的最优执行计划。优化器需要根据analyze收集的统计信息进行行数估算和代价估算,因此统计信息对优化器行数估算和代价估算起着至关重要的作用。通过analyze收集全局统计信息,主要包括:pg_class表中的relpages和reltuples;pg_statistic表中的stadistinct、stanullfrac、stanumbersN、stavaluesN、histogram_bounds等。
  • STATEMENT_COUNT 显示数据库当前节点当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)和(DDL、DML、DCL)统计信息。 普通用户查询STATEMENT_COUNT视图仅能看到该用户当前节点的统计信息;管理员权限用户查询STATEMENT_COUNT视图则能看到所有用户当前节点的统计信息。当集群或该节点重启时,计数将清零,并重新开始计数。计数以节点收到的查询数为准,包括集群内部进行的查询。例如,CN收到一条查询,如果一条查询语句包含多个子查询,这些子查询内容下发到DN时会被分别计数(无论单个DN还是多个DN)。 表1 STATEMENT_COUNT字段 名称 类型 描述 node_name text 节点名称。 user_name text 用户名。 select_count bigint select语句统计结果。 update_count bigint update语句统计结果。 insert_count bigint insert语句统计结果。 delete_count bigint delete语句统计结果。 mergeinto_count bigint merge into语句统计结果。 ddl_count bigint DDL语句的数量。 dml_count bigint DML语句的数量。 dcl_count bigint DCL语句的数量。 total_select_elapse bigint 总select的时间花费(单位:微秒)。 avg_select_elapse bigint 平均select的时间花费(单位:微秒)。 max_select_elapse bigint 最大select的时间花费(单位:微秒)。 min_select_elapse bigint 最小select的时间花费(单位:微秒)。 total_update_elapse bigint 总update的时间花费(单位:微秒)。 avg_update_elapse bigint 平均update的时间花费(单位:微秒)。 max_update_elapse bigint 最大update的时间花费(单位:微秒)。 min_update_elapse bigint 最小update的时间花费(单位:微秒)。 total_insert_elapse bigint 总insert的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均insert的时间花费(单位:微秒)。 max_insert_elapse bigint 最大insert的时间花费(单位:微秒)。 min_insert_elapse bigint 最小insert的时间花费(单位:微秒)。 total_delete_elapse bigint 总delete的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均delete的时间花费(单位:微秒)。 max_delete_elapse bigint 最大delete的时间花费(单位:微秒)。 min_delete_elapse bigint 最小delete的时间花费(单位:微秒)。 父主题: Query
  • 选择分布列 Hash分布表的分布列选取至关重要,需要满足以下原则: 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001’),那么就应当尽量不用zqdh做分布列。 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。 对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性 1 2 3 4 5 select xc_node_id, count(1) from tablename group by xc_node_id order by xc_node_id desc; 其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。 GaussDB支持多分布列特性,可以更好地满足数据分布的均匀性要求。 Range/List分布表的分布列由用户根据实际需要进行选择。除了需要选择合适的分布列,还需要注意分布规则对数据分布的影响。 父主题: 审视和修改表定义
  • PKG_SERVICE PKG_SERVICE支持的所有接口请参见表1。 表1 PKG_SERVICE 接口名称 描述 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 确认该CONTEXT是否已注册。 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 取消所有注册的CONTEXT。 PKG_SERVICE.SQL_REGISTER_CONTEXT 注册一个CONTEXT。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT 取消注册该CONTEXT。 PKG_SERVICE.SQL_SET_SQL 向CONTEXT设置一条SQL语句,目前只支持SELECT。 PKG_SERVICE.SQL_RUN 在一个CONTEXT上执行设置的SQL语句。 PKG_SERVICE.SQL_NEXT_ROW 读取该CONTEXT中的下一行数据。 PKG_SERVICE.SQL_GET_VALUE 读取该CONTEXT中动态定义的列值 PKG_SERVICE.SQL_SET_RESULT_TYPE 根据类型OID动态定义该CONTEXT的一个列。 PKG_SERVICE.JOB_CANCEL 通过任务ID来删除定时任务。 PKG_SERVICE.JOB_FINISH 禁用或者启用定时任务。 PKG_SERVICE.JOB_SUBMIT 提交一个定时任务。作业号由系统自动生成或由用户指定。 PKG_SERVICE.JOB_UPDATE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.SUBMIT_ON_NODES 提交一个任务到所有节点,作业号由系统自动生成。 PKG_SERVICE.ISUBMIT_ON_NODES 提交一个任务到所有节点,作业号由用户指定。 PKG_SERVICE.SQL_GET_ARRAY_RESULT 获取该CONTEXT中返回的数组值。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT 获取该CONTEXT中返回的列值。 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 该函数用来确认一个CONTEXT是否已注册。该函数传入想查找的CONTEXT ID,如果该CONTEXT存在返回TRUE,反之返回FALSE。 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE函数原型为: 1 2 3 4 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE( context_id IN INTEGER ) RETURN BOOLEAN; 表2 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 该函数用来取消所有CONTEXT PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS函数原型为: 1 2 3 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS( ) RETURN VOID; PKG_SERVICE.SQL_REGISTER_CONTEXT 该函数用来打开一个CONTEXT,是后续对该CONTEXT进行各项操作的前提。该函数不传入任何参数,内部自动递增生成CONTEXT ID,并作为返回值返回给integer定义的变量。 PKG_SERVICE.SQL_REGISTER_CONTEXT函数原型为: 1 2 3 DBE_SQL.REGISTER_CONTEXT( ) RETURN INTEGER; PKG_SERVICE.SQL_UNREGISTER_CONTEXT 该函数用来关闭一个CONTEXT,是该CONTEXT中各项操作的结束。如果在存储过程结束时没有调用该函数,则该CONTEXT占用的内存仍然会保存,因此关闭CONTEXT非常重要。由于异常情况的发生会中途退出存储过程,导致CONTEXT未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT函数原型为: 1 2 3 4 PKG_SERVICE.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER ) RETURN INTEGER; 表3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT接口说明 参数名称 描述 context_id 打算关闭的CONTEXT ID号 PKG_SERVICE.SQL_SET_SQL 该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持SELECT查询语句的解析,且语句参数仅可通过text类型传递,长度不大于1G。 PKG_SERVICE.SQL_SET_SQL函数的原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_SET_SQL( context_id IN INTEGER, query_string IN TEXT, language_flag IN INTEGER ) RETURN BOOLEAN; 表4 PKG_SERVICE.SQL_SET_SQL接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID query_string 执行的查询语句 language_flag 版本语言号,目前只支持1 PKG_SERVICE.SQL_RUN 该函数用来执行一个给定的CONTEXT。该函数接收一个CONTEXT ID,运行后获得的数据用于后续操作。目前仅支持SELECT查询语句的执行。 PKG_SERVICE.SQL_RUN函数的原型为: 1 2 3 4 PKG_SERVICE.SQL_RUN( context_id IN INTEGER, ) RETURN INTEGER; 表5 PKG_SERVICE.SQL_RUN接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID PKG_SERVICE.SQL_NEXT_ROW 该函数返回执行SQL实际返回的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。 PKG_SERVICE.SQL_NEXT_ROW函数的原型为: 1 2 3 4 PKG_SERVICE.SQL_NEXT_ROW( context_id IN INTEGER, ) RETURN INTEGER; 表6 PKG_SERVICE.SQL_NEXT_ROW接口说明 参数名称 描述 context_id 执行的CONTEXT ID PKG_SERVICE.SQL_GET_VALUE 该函数用来返回给定CONTEXT中给定位置的CONTEXT元素值,该接口访问的是PKG_SERVICE.SQL_NEXT_ROW获取的数据。 PKG_SERVICE.SQL_GET_VALUE函数的原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_GET_VALUE( context_id IN INTEGER, pos IN INTEGER, col_type IN ANYELEMENT ) RETURN ANYELEMENT; 表7 PKG_SERVICE.SQL_GET_VALUE接口说明 参数名称 描述 context_id 执行的CONTEXT ID pos 动态定义列在查询中的位置 col_type 任意类型变量,定义列的返回值类型 PKG_SERVICE.SQL_SET_RESULT_TYPE 该函数用来定义从给定CONTEXT返回的列,该接口只能应用于SELECT定义的CONTEXT中。定义的列通过查询列表的相对位置来标识,PKG_SERVICE.SQL_SET_RESULT_TYPE函数的原型为: 1 2 3 4 5 6 7 PKG_SERVICE.SQL_SET_RESULT_TYPE( context_id IN INTEGER, pos IN INTEGER, coltype_oid IN ANYELEMENT, maxsize IN INTEGER ) RETURN INTEGER; 表8 PKG_SERVICE.SQL_SET_RESULT_TYPE接口说明 参数名称 描述 context_id 执行的CONTEXT ID。 pos 动态定义列在查询中的位置。 coltype_oid 任意类型的变量,可根据变量类型得到对应类型OID。 maxsize 定义的列的长度。 PKG_SERVICE.JOB_CANCEL 存储过程CANCEL删除指定的定时任务。 PKG_SERVICE.JOB_CANCEL函数原型为: 1 2 PKG_SERVICE.JOB_CANCEL( job IN INTEGER); 表9 PKG_SERVICE.JOB_CANCEL接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 示例: SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); job_submit ------------ 101 (1 row) CALL PKG_SERVICE.JOB_CANCEL(101); job_cancel ------------ (1 row) PKG_SERVICE.JOB_FINISH 存储过程FINISH禁用或者启用定时任务。 PKG_SERVICE.JOB_FINISH函数原型为: 1 2 3 4 PKG_SERVICE.JOB_FINISH( id IN INTEGER, broken IN BOOLEAN, next_time IN TIMESTAMP DEFAULT sysdate); 表10 PKG_SERVICE.JOB_FINISH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 broken Boolean IN 否 状态标志位,true代表禁用,false代表启用。根据true或false值更新当前job;如果为空值,则不改变原有job的状态。 next_time timestamp IN 是 下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为'4000-1-1';如果参数broken状态为false,且如果参数next_time不为空值,则更新指定job的next_time值,如果next_time为空值,则不更新next_time值。该参数可以省略,为默认值。 PKG_SERVICE.JOB_SUBMIT 存储过程JOB_SUBMIT提交一个系统提供的定时任务。 PKG_SERVICE.JOB_SUBMIT函数原型为: 1 2 3 4 5 6 PKG_SERVICE.JOB_SUBMIT( id IN BIGINT, content IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, interval_time IN TEXT DEFAULT 'null', job OUT INTEGER); 当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中,则需要通过perform调用该接口函数。如果提交的sql语句任务使用到非public的schema,应该指定表或者函数的schema,或者在sql语句前添加set current_schema = xxx;语句。 表11 PKG_SERVICE.JOB_SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id bigint IN 否 作业号。如果传入id为NULL,则内部会生成作业ID。 context text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 next_time timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用pkg_service.job_submit时,该参数可以省略。 示例: 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 CREATE TABLE test_table(a int); CREATE TABLE CREATE OR REPLACE PROCEDURE test_job(a in int) IS BEGIN INSERT INTO test_table VALUES(a); COMMIT; END; / CREATE PROCEDURE SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1'); job_submit ------------ 28269 (1 row) SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24'); job_submit ------------ 1506 (1 row) CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid); job ------- 14131 (1 row) SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); job_submit ------------ 101 (1 row) PKG_SERVICE.JOB_UPDATE 存储过程UPDATE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.JOB_UPDATE函数原型为: 1 2 3 4 5 PKG_SERVICE.JOB_UPDATE( id IN BIGINT, next_time IN TIMESTAMP, interval_time IN TEXT, content IN TEXT); 表12 PKG_SERVICE.JOB_UPDATE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 next_time timestamp IN 是 下次运行时间。如果该参数为空值,则不更新指定job的next_time值,否则更新指定job的next_time值。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval_time值;如果该参数不为空值,会校验interval_time是否为有效的时间类型或interval类型,则更新指定job的interval_time值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 content text IN 是 执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的content值,否则更新指定job的content值。 示例: 1 2 3 4 5 6 7 8 CALL PKG_SERVICE.JOB_UPDATE(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440'); job_update ------------ (1 row) CALL PKG_SERVICE.JOB_UPDATE(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440'); job_update ------------ (1 row) PKG_SERVICE.SUBMIT_ON_NODES 存储过程SUBMIT_ON_NODES创建一个所有CN/DN上的定时任务,仅sysadmin/monitor admin有此权限。 PKG_SERVICE.SUBMIT_ON_NODES函数原型为: 1 2 3 4 5 6 7 PKG_SERVICE.SUBMIT_ON_NODES( node_name IN NAME, database IN NAME, what IN TEXT, next_date IN TIMESTAMP WITHOUT TIME ZONE, job_interval IN TEXT, job OUT INTEGER); 表13 PKG_SERVICE.SUBMIT_ON_NODES接口参数说明 参数 类型 入参/出参 是否可以为空 描述 node_name text IN 否 指定作业的执行节点,当前仅支持值为'ALL_NODE'(在所有节点执行)与'CCN'(在central coordinator执行)。 database text IN 否 集群作业所使用的database,节点类型为'ALL_NODE'时仅支持值为'postgres'。 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 nextdate timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 job_interval text IN 否 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd'不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用dbms.submit_on_nodes时,该参数可以省略。 示例: 1 2 3 4 5 6 7 8 9 10 select pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); submit_on_nodes ----------------- 25376 (1 row) select pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); submit_on_nodes ----------------- 4973 (1 row) PKG_SERVICE.ISUBMIT_ON_NODES ISUBMIT_ON_NODES与SUBMIT_ON_NODES语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。仅sysadmin/monitor admin有此权限。 PKG_SERVICE.SQL_GET_ARRAY_RESULT 该函数用来返回绑定的数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。 PKG_SERVICE.SQL_GET_ARRAY_RESULT函数原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_GET_ARRAY_RESULT( context_id in int, pos in VARCHAR2, column_value inout anyarray, result_type in anyelement ); 表14 PKG_SERVICE.SQL_GET_ARRAY_RESULT接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号。 pos 绑定的参数名。 column_value 返回值。 result_type 返回值类型。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT 该函数用来返回绑定的非数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT函数原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_GET_VARIABLE_RESULT( context_id in int, pos in VARCHAR2, result_type in anyelement ) RETURNS anyelement; 表15 PKG_SERVICE.SQL_GET_VARIABLE_RESULT接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号。 pos 绑定的参数名。 result_type 返回值类型。 父主题: 基础接口
  • SELECT 【规则】SELECT语句中禁用通配符字段“*”。 使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。因此业务应指明所需查询的表字段名称,避免使用通配符。 【规则】带有LIMIT的查询语句中必须带有ORDER BY保证有序。 作为一种 分布式数据库 ,表数据将分布在多个DN上。如果SQL语句中只带有LIMIT,而不带有ORDER BY子句,数据库将会把网络传输较快的DN所发送的(符合查询要求的)结果作为最终结果输出到客户端。由于网络传输效率不同时刻可能发生改变,因此导致多次执行该SQL语句时,返回结果表现出不一致的情况。 【规则】避免对大字段(如VARCHAR(2000))执行ORDER BY、DISTINCT、GROUP BY、UNION等会引起排序的操作。 此类操作将消耗大量的CPU和内存资源,执行效率低下。 【规则】禁止使用LOCK TABLE语句加锁,仅允许使用 SELECT .. FOR UPDATE语句。 LOCK TABLE提供多种锁级别,但如果对数据库原理和业务理解不足,误用表锁可能触发死锁,导致集群不可用。 【建议】避免在SELECT目标列中使用子查询,可能导致计划无法下推到DN执行,影响执行性能。 【建议】考虑使用UNION ALL,少使用UNION,注意考虑去重。 UNION ALL不去重,少了排序操作,速度相对UNION更快。如果没有去重的需求,优先使用UNION ALL。 【建议】避免频繁使用count()获取大表行数,该操作资源消耗较大,影响并行作业执行效率。 如果不需要实时的行数统计信息,可以尝试使用如下语句来获取表行数。 SELECT reltules FROM pg_class WHERE relname = 'tablename'; pg_class中所记录的表行数信息只在对该表执行ANALYZE以后才会更新。 目前ANALYZE有两种触发条件: 业务主动发送ANALYZE语句,例如: --分析连接库中所有表 ANALYZE; --分析指定表 ANALYZE tablename; 借助AUTO VACUUM机制,在每间隔一定时间或表的增删达到一定行数时触发。间隔时间和增删比例可通过GUC参数设置。 父主题: 数据库编程规范
  • 审视和修改表定义概述 在分布式框架下,数据分布在各个DN上。一个或者几个DN的数据存在一块物理存储设备上,好的表定义至少需要达到以下几个目标: 表数据均匀分布在各个DN上,以防止单个DN对应的存储设备空间不足造成集群有效容量下降。选择合适分布列,避免数据分布倾斜可以实现该点。 表Scan压力均匀分散在各个DN上,以避免单DN的Scan压力过大,形成Scan的单节点瓶颈。分布列不选择基表上等值filter中的列可以实现该点。 减少扫描数据量。通过分区的剪枝机制可以实现该点。 尽量减少随机I/O。通过聚簇/局部聚簇可以实现该点。 尽量避免数据shuffle,减小网络压力。通过选择join-condition或者group by列为分布列可以最大程度的实现这点。 从上述描述来看表定义中最重要的一点是分布列的选择。创建表定义一般遵循图1所示流程。表定义在数据库设计阶段创建,在SQL调优过程中进行审视和修改。 图1 表定义流程 父主题: 审视和修改表定义
  • SUMMARY_STAT_USER_INDEXES 集群内汇聚所有数据库中用户自定义普通表的索引状态信息。 表1 SUMMARY_STAT_USER_INDEXES字段 名称 类型 描述 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan numeric 索引上开始的索引扫描数。 idx_tup_read numeric 通过索引上扫描返回的索引项数。 idx_tup_fetch numeric 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • 示例 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 51 52 53 54 55 56 57 58 59 60 --获取字符串的长度 SELECT DBE_LOB.GET_LENGTH('12345678'); get_length ------------ 8 (1 row) DECLARE myraw RAW(100); amount INTEGER :=2; buffer INTEGER :=1; begin DBE_LOB.READ('123456789012345',amount,buffer,myraw); dbe_output.print_line(myraw); end; / 0123 ANONYMOUS BLOCK EXECUTE CREATE TABLE blob_Table (t1 blob) DISTRIBUTE BY REPLICATION; CREATE TABLE blob_Table_bak (t2 blob) DISTRIBUTE BY REPLICATION; INSERT INTO blob_Table VALUES('abcdef'); INSERT INTO blob_Table_bak VALUES('22222'); DECLARE str varchar2(100) := 'abcdef'; source raw(100); dest blob; copyto blob; amount int; PSV_SQL varchar2(100); PSV_SQL1 varchar2(100); a int :=1; len int; BEGIN source := dbe_raw.cast_from_varchar2_to_raw(str); amount := dbe_raw.get_length(source); PSV_SQL :='select * from blob_Table for update'; PSV_SQL1 := 'select * from blob_Table_bak for update'; EXECUTE IMMEDIATE PSV_SQL into dest; EXECUTE IMMEDIATE PSV_SQL1 into copyto; DBE_LOB.WRITE(dest, amount, 1, source); DBE_LOB.WRITE_APPEND(dest, amount, source); DBE_LOB.ERASE(dest, a, 1); DBE_OUTPUT.PRINT_LINE(a); DBE_LOB.COPY(copyto, dest, amount, 10, 1); perform DBE_LOB.CLOSE(dest); RETURN; END; / 1 ANONYMOUS BLOCK EXECUTE --删除表 DROP TABLE blob_Table; DROP TABLE DROP TABLE blob_Table_bak; DROP TABLE
  • PG_OPCLASS PG_OPCLASS系统表定义索引访问方法操作符类。 每个操作符类为一种特定数据类型和一种特定索引访问方法定义索引字段的语义。一个操作符类本质上指定一个特定的操作符族适用于一个特定的可索引的字段数据类型。索引的字段实际可用的族中的操作符集是接受字段的数据类型作为它们的左边的输入的那个。 表1 PG_OPCLASS字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 opcmethod oid PG_AM.oid 操作符类所服务的索引访问方法。 opcname name - 这个操作符类的名称。 opcnamespace oid PG_NAMESPACE.oid 这个操作符类的名称空间。 opcowner oid PG_AUTHID.oid 操作符类属主。 opcfamily oid PG_OPFAMILY.oid 包含该操作符类的操作符族。 opcintype oid PG_TYPE.oid 操作符类索引的数据类型。 opcdefault boolean - 如果操作符类是opcintype的缺省,则为真。 opckeytype oid PG_TYPE.oid 索引数据的类型,如果和opcintype相同则为零。 一个操作符类的opcmethod必须匹配包含它的操作符族的opfmethod。 父主题: 系统表
  • PG_SHARED_MEMORY_DETAIL PG_SHARED_MEMORY_DETAIL视图显示所有已产生的共享内存上下文的使用信息。 表1 PG_SHARED_MEMORY_DETAIL字段 名称 类型 描述 contextname text 内存上下文的名称。 level smallint 当前上下文在整体内存上下文中的层级。 parent text 上级内存上下文。 totalsize bigint 共享内存总大小,单位Byte。 freesize bigint 共享内存剩余大小,单位Byte。 usedsize bigint 共享内存使用大小,单位Byte。 父主题: 系统视图
  • GS_SQL_COUNT GS_SQL_COUNT视图显示数据库当前节点当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)统计信息。 普通用户查询GS_SQL_COUNT视图仅能看到该用户当前节点的统计信息;管理员权限用户查询GS_SQL_COUNT视图则能看到所有用户当前节点的统计信息。 当集群或该节点重启时,计数将清零,并重新开始计数 。 计数以节点收到的查询数为准,包括集群内部进行的查询。例如,CN收到一条查询,若下发多条查询DN,那将在DN上进行相应次数的计数。 表1 GS_SQL_COUNT字段 名称 类型 描述 node_name name 节点名称。 user_name name 用户名。 select_count bigint SELECT语句统计结果。 update_count bigint UPDATE语句统计结果。 insert_count bigint INSERT语句统计结果。 delete_count bigint DELETE语句统计结果。 mergeinto_count bigint MERGE INTO语句统计结果。 ddl_count bigint DDL语句的数量。 dml_count bigint DML语句的数量。 dcl_count bigint DCL语句的数量。 total_select_elapse bigint 总SELECT的时间花费(单位:微秒)。 avg_select_elapse bigint 平均SELECT的时间花费(单位:微秒)。 max_select_elapse bigint 最大SELECT的时间花费(单位:微秒)。 min_select_elapse bigint 最小SELECT的时间花费(单位:微秒)。 total_update_elapse bigint 总UPDATE的时间花费(单位:微秒)。 avg_update_elapse bigint 平均UPDATE的时间花费(单位:微秒)。 max_update_elapse bigint 最大UPDATE的时间花费(单位:微秒)。 min_update_elapse bigint 最小UPDATE的时间花费(单位:微秒)。 total_insert_elapse bigint 总INSERT的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均INSERT的时间花费(单位:微秒)。 max_insert_elapse bigint 最大INSERT的时间花费(单位:微秒)。 min_insert_elapse bigint 最小INSERT的时间花费(单位:微秒)。 total_delete_elapse bigint 总DELETE的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均DELETE的时间花费(单位:微秒)。 max_delete_elapse bigint 最大DELETE的时间花费(单位:微秒)。 min_delete_elapse bigint 最小DELETE的时间花费(单位:微秒)。 父主题: 系统视图
  • PG_STATIO_ALL_TABLES PG_STATIO_ALL_TABLES视图可用来查询当前数据库中每个表(包括TOAST表)的I/O统计信息。 表1 PG_STATIO_ALL_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表的模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表命中缓存数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 从该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓存数(如果存在)。 tidx_blks_read bigint 从该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓存数(如果存在)。 父主题: 系统视图
  • BGWRITER_STAT BGWRITER_STAT视图显示关于后端写进程活动的统计信息。 表1 BGWRITER_STAT字段 名称 类型 描述 checkpoints_timed bigint 执行的定期检查点数。 checkpoints_req bigint 执行的需求检查点数。 checkpoint_write_time double precision 在检查点处理过程中执行写入操作所花费的总时间,单位为毫秒。 checkpoint_sync_time double precision 在检查点处理过程中执行同步(sync)操作所花费的总时间,单位为毫秒。 buffers_checkpoint bigint 检查点写缓冲区的数量。 buffers_clean bigint BGWRITER线程写缓冲区的数量。 maxwritten_clean bigint BGWRITER线程停止清理扫描过程的次数(由于单次扫描刷页数量过多导致)。 buffers_backend bigint 后端直接写缓冲区的数量。 buffers_backend_fsync bigint 后端线程自行执行fsync的次数(通常情况下fsync调用由BGWRITER线程执行)。 buffers_alloc bigint 分配的缓冲区数量。 stats_reset timestamp with time zone 本行统计信息上次被重置的时间。 父主题: Utility
  • 背景信息 索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。 索引建立在数据库表中的某些列上。因此,在创建索引时,应该仔细考虑在哪些列上创建索引。 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。 在经常使用连接的列上创建索引,可以加快连接的速度。 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。 索引创建成功后,系统会自动判断何时引用索引。当系统认为使用索引比顺序扫描更快时,就会使用索引。 索引创建成功后,必须和表保持同步以保证能够准确地找到新数据,这样就增加了数据操作的负荷。因此请定期删除无用的索引。
  • SUMMARY_STAT_ALL_INDEXES 显示集群级数据库的每个索引的访问统计信息。 表1 SUMMARY_STAT_ALL_INDEXES字段 名称 类型 描述 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan numeric 索引上开始的索引扫描数。 idx_tup_read numeric 通过索引上扫描返回的索引项数。 idx_tup_fetch numeric 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • javax.sql.PooledConnection javax.sql.PooledConnection是由连接池创建的连接接口。 表1 对javax.sql.PooledConnection的支持情况 方法名 返回值类型 支持JDBC 4 addConnectionEventListener (ConnectionEventListener listener) void Yes close() void Yes getConnection() Connection Yes removeConnectionEventListener (ConnectionEventListener listener) void Yes 父主题: JDBC接口参考
  • 故障注入系统函数 gs_fault_inject(int64, text, text, text, text, text) 描述:该函数不能调用,调用时会报WARNING信息:"unsupported fault injection",并不会对数据库产生任何影响和改变。 参数:int64注入故障类型(0:C LOG 扩展页面,1:读取CLOG页面,2:强制死锁)。 text第二个入参在第一入参为2的模式下若为“1”则死锁,其余不死锁;第二个入参在第一入参为0,1时,表示CLOG开始扩展或读取的起始页面号。 text第三个入参在第一入参为0,1时,表示扩展或读取的页面个数。 text第四到六入参为预留参数。 返回值类型:int64 父主题: 函数和操作符
  • job_queue_processes 参数说明:表示系统可以并发执行的job数目。该参数为postmaster级别,通过gs_guc设置,需要重启gaussdb才能生效。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:0~1000 功能: 当job_queue_processes设置为0值,表示不启用定时任务功能,任何job都不会被执行(因为开启定时任务的功能会对系统的性能有影响,有些局点可能不需要定时任务的功能,可以通过设置为0不启用定时任务功能)。 当job_queue_processes为大于0时,表示启用定时任务功能且系统能够并发处理的最大任务数。 启用定时任务功能后,job_scheduler线程会在定时时间间隔轮询pg_job系统表,系统设置定时任务检查周期默认为1s。 由于并行运行的任务数太多会消耗更多的系统资源,因此需要设置系统并发处理的任务数,当前并发的任务数达到job_queue_processes时,且此时又有任务到期,那么这些任务本次得不到执行而延期到下一轮询周期。因此,建议用户需要根据每个任务的执行时长合理设置任务的时间间隔(即submit接口中的interval参数),来避免由于任务执行时间太长而导致下个轮询周期无法正常执行。 注:如果同一时间内并行的job数很多,过小的参数值会导致job等待。而过大的参数值则消耗更多的系统资源,建议设置此参数为100,用户可以根据系统资源情况合理调整。 默认值:10
  • 优化说明 测试发现由于两表结果集过大,导致nestloop耗时过长,超过一小时未返回结果,因此性能优化的关键是消除nestloop,让join走更高效的hashjoin。从语义等价的角度消除any-clause,SQL改写如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 select ls_pid_cusr1,COALESCE(max(round(ym/365)),0) from ( ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = t2.id and t1.ls_pid_cusr1 != t2.id15 ) union all ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = id15 ) ) GROUP BY ls_pid_cusr1; 优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下 优化后,从超过1个小时未返回结果优化到7s返回结果。
  • 现象描述 in-clause/any-clause是常见的SQL语句约束条件,有时in或any后面的clause都是常量,类似于: 1 2 3 4 select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in (‘20120405’, ‘20130405’); 或者 1 2 3 4 select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in any(‘20120405’, ‘20130405’); 但是也有一些如下的特殊用法: 1 2 3 4 5 SELECT ls_pid_cusr1,COALESCE(max(round((current_date-bthdate)/365)),0) FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = any(values(id),(id15)) GROUP BY ls_pid_cusr1; 其中,id、id15为p10_md_tmp_t2中的两列,“t1.ls_pid_cusr1 = any(values(id),(id15))”等价于“t1.ls_pid_cusr1 = id or t1.ls_pid_cusr1 = id15”。 因此join-condition实质上是一个不等式,这种不等值的join操作必须走nestloop,对应执行计划如下:
  • GLOBAL_OPERATOR_HISTORY GLOBAL_OPERATOR_HISTORY系统视图显示的是当前用户在所有CN节点上执行作业结束后的算子的相关记录。 表1 GLOBAL_OPERATOR_HISTORY的字段 名称 类型 描述 queryid bigint 语句执行使用的内部query_id。 pid bigint 后端线程id。 plan_node_id integer 查询对应的执行计划的plan node id。 plan_node_name text 对应于plan_node_id的算子的名称。 start_time timestamp with time zone 该算子处理第一条数据的开始时间。 duration bigint 该算子到结束时候总的执行时间(ms)。 query_dop integer 当前算子执行时的并行度。 estimated_rows bigint 优化器估算的行数信息。 tuple_processed bigint 当前算子返回的元素个数。 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 父主题: Operator
  • 示例 --开始。 openGauss=# begin; --准备标识符为的trans_test的事务。 openGauss=# PREPARE TRANSACTION 'trans_test'; --创建表。 openGauss=# CREATE TABLE item1(id int); --提交标识符为的trans_test的事务。 openGauss=# COMMIT PREPARED 'trans_test'; --删除表。 openGauss=# DROP TABLE item1;
  • OPERATOR_HISTORY_TABLE OPERATOR_HISTORY_TABLE系统视图显示执行作业结束后的算子相关的记录。此数据是从内核中转储到系统视图中的数据。当设置GUC参数enable_resource_record为on时,系统会定时(周期为3分钟)将GS_WLM_OPERATOR_HISTORY中的记录导入此系统表,开启此功能会占用系统存储空间并对性能有一定影响,不建议用户使用。 表1 OPERATOR_HISTORY_TABLE的字段 名称 类型 描述 queryid bigint 语句执行使用的内部query_id。 pid bigint 后端线程id。 plan_node_id integer 查询对应的执行计划的plan node id。 plan_node_name text 对应于plan_node_id的算子的名称。 start_time timestamp with time zone 该算子处理第一条数据的开始时间。 duration bigint 该算子到结束时候总的执行时间(ms)。 query_dop integer 当前算子执行时的并行度。 estimated_rows bigint 优化器估算的行数信息。 tuple_processed bigint 当前算子返回的元素个数。 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 父主题: Operator
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全