华为云用户手册

  • 示例 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 BEGIN FOR ROW_TRANS IN SELECT first_name FROM hr.staffs LOOP DBE_OUTPUT.PRINT_LINE (ROW_TRANS.first_name ); END LOOP; END; / --创建表 CREATE TABLE integerTable1( A INTEGER) DISTRIBUTE BY hash(A); CREATE TABLE integerTable2( B INTEGER) DISTRIBUTE BY hash(B); INSERT INTO integerTable2 VALUES(2); --多游标共享游标属性的标量 DECLARE CURSOR C1 IS SELECT A FROM integerTable1;--声明游标 CURSOR C2 IS SELECT B FROM integerTable2; PI_A INTEGER; PI_B INTEGER; BEGIN OPEN C1;--打开游标 OPEN C2; FETCH C1 INTO PI_A; ---- C1%FOUND 和 C2%FOUND 值为 FALSE FETCH C2 INTO PI_B; ---- C1%FOUND 和 C2%FOUND 的值都为 TRUE --判断游标状态 IF C1%FOUND THEN IF C2%FOUND THEN DBE_OUTPUT.PRINT_LINE('Dual cursor share paremeter.'); END IF; END IF; CLOSE C1;--关闭游标 CLOSE C2; END; / --删除临时表 DROP TABLE integerTable1; DROP TABLE integerTable2; DROP SCHEMA hr CASCADE;
  • _PG_FOREIGN_TABLES 存储所有的定义在本数据库的外部表信息。只显示当前用户有权访问的外部表信息。该视图只有sysadmin权限可以查看。 表1 _PG_FOREIGN_TABLES字段 名称 类型 描述 foreign_table_catalog information_schema.sql_identifier 外部表所在的数据库名称(永远是当前数据库)。 foreign_table_schema name 外部表的schema名称。 foreign_table_name name 外部表的名称。 ftoptions text[] 外部表的可选项。 foreign_server_catalog information_schema.sql_identifier 外部服务器所在的数据库名称(永远是当前数据库)。 foreign_server_name information_schema.sql_identifier 外部服务器的名称。 authorization_identifier information_schema.sql_identifier 所有者的角色名称。 父主题: Information Schema
  • PG_STAT_ACTIVITY_NG PG_STAT_ACTIVITY_NG视图显示在当前用户所属的Node group下,所有查询的相关信息。 表1 PG_STAT_ACTIVITY_NG字段 名称 类型 描述 datid oid 用户会话在后台连接到的数据库OID。 datname name 用户会话在后台连接到的数据库名称。 pid bigint 后台线程ID。 sessionid bigint 会话ID。 global_sessionid text 全局会话ID。 usesysid oid 登录该后台的用户OID。 usename name 登录该后台的用户名。 application_name text 连接到该后台的应用名。 client_addr inet 连接到该后台的客户端的IP地址。 如果此字段是null,它表明通过服务器机器上UNIX套接字连接客户端或者这是内部进程,如autovacuum。 client_hostname text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 client_port integer 客户端用于与后台通讯的TCP端口号,如果使用UNIX套接字,则为-1。 backend_start timestamp with time zone 该会话开始的时间,即客户端连接服务器的时间。 xact_start timestamp with time zone 当前活跃事务开始的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。 query_start timestamp with time zone 当前活跃查询开始的时间,如果state的值不是active,则这个值是上一个查询的开始时间。如果是存储过程、函数、PACKAGE,则显示的是第一个查询时间,不会随着存储过程内语句运行而改变。 state_change timestamp with time zone 上次状态改变的时间。 waiting boolean 如果后台当前正等待锁则为true。否则为false。 enqueue text 语句当前排队状态。可能值是: waiting in queue:表示语句在排队中。 空:表示语句正在运行。 state text 该后台当前总体状态。可能值是: active:后台正在执行一个查询。 idle:后台正在等待一个新的客户端命令。 idle in transaction:后台在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 fastpath function call:后台正在执行一个fast-path函数。 disabled:如果后台禁用track_activities,则报告这个状态。 说明: 普通用户只能查看到自己账户所对应的会话状态。即其他账户的state信息为空。例如以judy用户连接数据库后,在pg_stat_activity中查看到的普通用户joe及初始用户omm的state信息为空: SELECT datname, usename, usesysid, state,pid FROM pg_stat_activity_ng; datname | usename | usesysid | state | pid ----------+---------+----------+--------+----------------- testdb | omm | 10 | | 139968752121616 testdb | omm | 10 | | 139968903116560 db_tpcds | judy | 16398 | active | 139968391403280 testdb | omm | 10 | | 139968643069712 testdb | omm | 10 | | 139968680818448 testdb | joe | 16390 | | 139968563377936 (6 rows) resource_pool name 用户使用的资源池。 query_id bigint 查询语句的ID。 query text 该后台的最新查询。如果state状态是active(活跃的),此字段显示当前正在执行的查询。所有其他情况表示上一个查询。 node_group text 语句所属用户对应的Node group。 父主题: 系统视图
  • java.sql.Driver java.sql.Driver是数据库驱动接口。 表1 对java.sql.Driver的支持情况 方法名 返回值类型 支持JDBC 4 acceptsURL(String url) Boolean Yes connect(String url, Properties info) Connection Yes jdbcCompliant() Boolean Yes getMajorVersion() int Yes getMinorVersion() int Yes getParentLogger() Logger Yes getPropertyInfo(String url, Properties info) DriverPropertyInfo[] Yes 父主题: JDBC接口参考
  • GLOBAL_ACTIVE_SESSION GLOBAL_ACTIVE_SESSION视图显示所有节点上的ACTIVE SESSION PROFILE内存中的样本的汇总。 表1 GLOBAL_ACTIVE_SESSION字段 名称 类型 描述 node_name text 节点名称。 sampleid bigint 采样ID。 sample_time timestamp without time zone 采样的时间。 need_flush_sample boolean 该样本是否需要刷新的磁盘。 databaseid oid 数据库ID。 thread_id bigint 线程的ID。 sessionid bigint 会话的ID。 start_time timestamp without time zone 会话的启动时间。 event text 具体的事件名称。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint streaming线程的父线程。 tlevel integer streaming线程的层级。与执行计划的层级(id)相对应。 smpid integer smp执行模式下并行线程的并行编号。 userid oid session用户的id。 application_name text 应用的名称。 client_addr inet client端的地址。 client_hostname text client端的名称。 client_port integer 客户端用于与后端通讯的TCP端口号。 query_id bigint debug query id。 unique_query_id bigint unique query id。 user_id oid unique query的key中的user_id。 cn_id integer cn id,在DN上表示该unique sql来自该CN节点,unique query的key中的cn_id。 unique_query text 规范化后的UniqueSQL文本串。 locktag text 会话等待锁信息,可通过locktag_decode解析。 lockmode text 会话等待锁模式。 block_sessionid bigint 如果会话正在等待锁,阻塞该会话获取锁的会话标识。 final_block_sessionid bigint 表示源头阻塞会话id。 wait_status text 描述event列的更多详细信息。 global_sessionid text 全局会话ID。 xact_start_time timestamp with time zone 事务开始时间。 query_start_time timestamp with time zone 语句开始执行时间。 state text 当前语句状态。 可能取值为:active、idle in transaction、fastpath function call、idle in transaction (aborted)、disabled、retrying。 父主题: Session/Thread
  • LOCAL_PLANCACHE_STATUS LOCAL_PLANCACHE_STATUS视图显示当前节点的GPC全局计划缓存状态信息。 表1 LOCAL_PLANCACHE_STATUS字段 名称 类型 描述 nodename text 所属节点名称。 query text 查询语句text。 refcount integer 被引用次数。 valid bool 是否合法。 databaseid oid 所属数据库id。 schema_name text 所属schema。 params_num integer 参数数量。 func_id oid 该plancache所在存储过程oid,如果不属于存储过程则为0。 父主题: Global Plancache
  • GS_LSC_MEMORY_DETAIL GS_LSC_MEMORY_DETAIL视图显示所有线程的本地SysCache的内存使用情况,以MemoryContext节点来统计。仅在开启GSC的模式下有数据。 表1 GS_LSC_MEMORY_DETAIL字段 名称 类型 描述 threadid text 线程启动时间+线程标识(字符串信息为timestamp.sessionid)。 tid bigint 线程标识。 thrdtype text 线程类型。可以是系统内存在的任何线程类型,如postgresql、wlmmonitor等。 contextname text 内存上下文名称。 level smallint 当前上下文在整体内存上下文中的层级。 parent text 父内存上下文名称。 totalsize bigint 当前内存上下文的内存总数,单位Byte。 freesize bigint 当前内存上下文中已释放的内存总数,单位Byte。 usedsize bigint 当前内存上下文中已使用的内存总数,单位Byte。 父主题: 系统视图
  • 接口介绍 高级功能包DBE_APPLICATION_INFO支持的所有接口请参见表1。DBE_APPLICATION_INFO作用范围是当前session。 表1 DBE_APPLICATION_INFO 接口名称 描述 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息。DBE_APPLICATION_INFO.SET_CLIENT_INFO函数原型为: 1 2 3 DBE_APPLICATION_INFO.SET_CLIENT_INFO( str text )returns void; 表2 DBE_APPLICATION_INFO.SET_CLIENT_INFO接口参数说明 参数 描述 str 写入的客户端信息 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息DBE_APPLICATION_INFO.READ_CLIENT_INFO函数原型为: 1 2 DBE_APPLICATION_INFO.READ_CLIENT_INFO( OUT client_info text); 表3 DBE_APPLICATION_INFO.READ_CLIENT_INFO接口参数说明 参数 描述 client_info 客户端信息
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --在存储过程中操作RAW数据 CREATE OR REPLACE PROCEDURE proc_raw AS str varchar2(100) := 'abcdef'; source raw(100); amount integer; BEGIN source := dbe_raw.cast_from_varchar2_to_raw(str);--类型转换 amount := dbe_raw.get_length(source);--获取长度 dbe_output.print_line(amount); END; / --调用存储过程 CALL proc_raw(); --删除存储过程 DROP PROCEDURE proc_raw;
  • 接口介绍 高级功能包DBE_RAW支持的所有接口请参见表 DBE_RAW。 表1 DBE_RAW 接口名称 描述 DBE_RAW.CAST_FROM_BINARY_INTEGER_TO_RAW 将INTEGER类型值转换为二进制表示形式(即RAW类型)。 DBE_RAW.CAST_FROM_RAW_TO_BINARY_INTEGER 将二进制表示形式的整型值(即RAW类型)转换为INTEGER类型。 DBE_RAW.GET_LENGTH 获取RAW类型对象的长度。 DBE_RAW.CAST_FROM_VARCHAR2_TO_RAW 将VARCHAR2类型值转化为二进制表示形式(即RAW类型)。 DBE_RAW.CAST_TO_VARCHAR2 将RAW类型值转换成VARCHAR2类型。 DBE_RAW.SUBSTR 求RAW类型子串。 DBE_RAW.BIT_OR RAW类型按位或。 RAW类型的外部表现形式是十六进制,内部存储形式是二进制。例如一个RAW类型的数据11001011的表现形式为‘CB’,即在实际的类型转换中输入的是‘CB’。 DBE_RAW.CAST_FROM_BINARY_INTEGER_TO_RAW 存储过程CAST_FROM_BINARY_INTEGER_TO_RAW将INTEGER类型值转换为二进制表示形式(即RAW类型)。 DBE_RAW.CAST_FROM_BINARY_INTEGER_TO_RAW函数原型为: 1 2 3 4 DBE_RAW.CAST_FROM_BINARY_INTEGER_TO_RAW ( value IN INTEGER, endianess IN INTEGER DEFAULT 1) RETURN RAW; 表2 DBE_RAW.CAST_FROM_BINARY_INTEGER_TO_RAW接口参数说明 参数 描述 value 待转成RAW类型的整型数值。 endianess 表示字节序的整型值1或2(1代表BIG_ENDIAN,2代表LITTLE-ENDIAN)。 DBE_RAW.CAST_FROM_RAW_TO_BINARY_INTEGER 存储过程CAST_FROM_RAW_TO_BINARY_INTEGER将二进制表示形式的整型值(即RAW类型)转换为INTEGER类型。 DBE_RAW.CAST_FROM_RAW_TO_BINARY_INTEGER函数原型为: 1 2 3 4 DBE_RAW.CAST_FROM_RAW_TO_BINARY_INTEGER ( value IN RAW, endianess IN INTEGER DEFAULT 1) RETURN BINARY_INTEGER; 表3 DBE_RAW.CAST_FROM_RAW_TO_BINARY_INTEGER接口参数说明 参数 描述 value 二进制表示形式的整型值(即RAW类型)。 endianess 表示字节序的整型值1或2(1代表BIG_ENDIAN,2代表LITTLE-ENDIAN)。 DBE_RAW.GET_LENGTH 存储过程GET_LENGTH返回RAW类型对象的长度。 DBE_RAW.GET_LENGTH函数原型为: 1 2 3 DBE_RAW.GET_LENGTH( value IN RAW) RETURN INTEGER; 表4 DBE_RAW.GET_LENGTH接口参数说明 参数 描述 value RAW类型对象 DBE_RAW.CAST_FROM_VARCHAR2_TO_RAW 存储过程CAST_FROM_VARCHAR2_TO_RAW将VARCHAR2类型的对象转换成RAW类型。 DBE_RAW.CAST_FROM_VARCHAR2_TO_RAW函数原型为: 1 2 3 DBE_RAW.CAST_TO_RAW( str IN VARCHAR2) RETURN RAW; 表5 DBE_RAW.CAST_FROM_VARCHAR2_TO_RAW接口参数说明 参数 描述 c 待转换的VARCHAR2类型对象 DBE_RAW.CAST_TO_VARCHAR2 存储过程CAST_TO_VARCHAR2将RAW类型的对象转换成VARCHAR2类型。 DBE_RAW.CAST_TO_VARCHAR2函数原型为: 1 2 3 DBE_RAW.CAST_TO_VARCHAR2( str IN RAW) RETURN VARCHAR2; 表6 DBE_RAW.CAST_TO_VARCHAR2接口参数说明 参数 描述 str 待转换的RAW类型对象 DBE_RAW.BIT_OR 存储过程BIT_OR求两个RAW按位或的结果。 DBE_RAW.BIT_OR函数原型为: 1 2 3 4 DBE_RAW.BIT_OR( str1 IN RAW, str2 IN RAW) RETURN RAW; 表7 DBE_RAW.BIT_OR接口参数说明 参数 描述 str1 按位或的第一个字符串 str2 按位或的第二个字符串 DBE_RAW.SUBSTR 存储过程SUBSTR将RAW类型的对象按起始位和长度截取。 DBE_RAW.SUBSTR函数原型为: 1 2 3 4 5 DBE_RAW.SUBSTR( IN lob_loc raw, IN off_set integer default 1, IN amount integer default 32767) RETURN RAW; 表8 DBE_RAW.SUBSTR接口参数说明 参数 描述 lob_loc 源raw字符串 off_set 子串的起始位置,默认值1 amount 子串的长度,默认值32767
  • 逻辑复制函数 pg_create_logical_replication_slot('slot_name', 'plugin_name') 描述:创建逻辑复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 plugin_name 插件名称。 取值范围:字符串,当前只支持“mppdb_decoding”。 返回值类型:name, text 备注:第一个返回值表示slot_name,第二个返回值表示该逻辑复制槽解码的起始LSN位置。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_create_physical_replication_slot('slot_name', 'isDummyStandby') 描述:创建新的物理复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 isDummyStandby 返回值类型:name,text 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_drop_replication_slot('slot_name') 描述:删除流复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 返回值类型:void 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_peek_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:解码并不推进流复制槽(下次解码可以再次获取本次解出的数据)。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 LSN 日志的LSN,表示只解码小于等于此LSN的日志。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 options:此项为可选参数,由一系列options_name和options_value一一对应组成。 include-xids 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 force-binary 是否以二进制格式输出解码结果 取值范围:0或1,默认值为0。 0:设为0时,以二进制格式输出解码结果。 white-table-list 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例: select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2'); max-txn-in-memory 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 返回值类型:text, xid, text 备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和解码内容。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_get_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:解码并推进流复制槽。 参数说明: 与pg_logical_slot_peek_changes一致,详细内容请参见•pg_logical_slot_peek_ch...。 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_peek_binary_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:以二进制格式解码且不推进流复制槽(下次解码可以再次获取本次解出的数据)。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 LSN 日志的LSN,表示只解码小于等于此LSN的日志。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 options:此项为可选参数,由一系列options_name和options_value一一对应组成。 include-xids 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 force-binary 是否以二进制格式输出解码结果。 取值范围:0或1,默认值为0,均以二进制格式输出结果。 white-table-list 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例: select * from pg_logical_slot_peek_binary_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2'); 返回值类型:text, xid, bytea 备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和二进制格式的解码内容。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_get_binary_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:以二进制格式解码并推进流复制槽。 参数说明:与pg_logical_slot_peek_binary_changes一致,详细内容请参见•pg_logical_slot_peek_bi...。 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_replication_slot_advance ('slot_name', 'LSN') 描述:直接推进流复制槽到指定LSN,不输出解码结果。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,不支持除小写字母,数字,以及_?-.以外的字符,且不支持'.'或'..'单独作为复制槽名称。 LSN 推进到的日志LSN位置,下次解码时只会输出提交位置比该LSN大的事务结果。如果输入的LSN比当前流复制槽记录的推进位置还要小,则报错;如果输入的LSN比当前最新物理日志LSN还要大,则推进到当前最新物理日志LSN。 取值范围:字符串(LSN,格式为xlogid/xrecoff)。 返回值类型:name, text 备注:返回值分别对应slot_name和实际推进至的LSN。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_get_replication_slots() 描述:获取复制槽列表。 示例: openGauss=# select * from pg_get_replication_slots(); slot_name | plugin | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush -----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+----------------- dn_s1 | | physical | 0 | t | | | 0/23DB14E0 | f | slot1 | mppdb_decoding | logical | 16304 | f | | 60966 | 0/1AFA1BB0 | f | 0/23DA5700 (2 rows) 返回值: text, text, text, oid, boolean, xid, xid, text, boolean, text pg_logical_get_area_changes('LSN_start', 'LSN_end', upto_nchanges, 'decoding_plugin', 'xlog_path', 'options_name', 'options_value') 描述:没有ddl的前提下,指定lsn区间进行解码,或者指定xLog文件进行解码。 约束条件如下: 1. 调用接口时,日志级别wal_level=logical,且只有在wal_level=logical期间产生的日志文件才能被解析,如果使用的xLog文件为非logical级别,则解码内容没有对应的值和类型,无其他影响。 2. xLog文件只能被完全同构的dn的某个副本解析,确保可以找到数据对应的元信息,且没有DDL操作和VACUUM FULL。 3. 用户可以找到需要解析的xLog。 4. 用户需要注意一次不要读入过多xLog文件,推荐一次一个,一个xLog文件估测占用内存为xLog文件大小的2~3倍。 5. 无法解码扩容前的xLog文件。 备注:调用该函数的用户需要具有SYSADMIN权限或运维模式打开下的运维管理员的权限。 参数说明: LSN_start 指定开始解码的lsn。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码起始的日志位置做限制。 LSN_end 指定解码结束的lsn。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 decoding_plugin 解码插件,指定解码内容输出格式的so插件 取值范围:提供mppdb_decoding和sql_decoding两个解码插件。 xlog_path 解码插件,指定解码文件的xLog绝对路径,文件级别 取值范围:NULL 或者 xLog文件绝对路径的字符串。 options:此项为可选参数,由一系列options_name和options_value一一对应组成,可以缺省,详见pg_logical_slot_peek_cha...。 示例: openGauss=# SELECT pg_current_xlog_location(); pg_current_xlog_location -------------------------- 0/E62E238 (1 row) openGauss=# create table t1 (a int primary key,b int,c int); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1" CREATE TABLE openGauss=# insert into t1 values(1,1,1); INSERT 0 1 openGauss=# insert into t1 values(2,2,2); INSERT 0 1 openGauss=# select data from pg_logical_get_area_changes('0/E62E238',NULL,NULL,'sql_decoding',NULL); location | xid | data -----------+-------+--------------------------------------------------- 0/E62E8D0 | 27213 | COMMIT (at 2022-01-26 15:08:03.349057+08) 3020226 0/E6325F0 | 27214 | COMMIT (at 2022-01-26 15:08:07.309869+08) 3020234 …… gs_get_parallel_decode_status() 描述:监控各个解码线程的读取日志队列和解码结果队列的长度,以便定位并行解码性能瓶颈。 返回值类型:text, int, text, text, text, int64, int64 示例: openGauss=# select * from gs_get_parallel_decode_status(); slot_name | parallel_decode_num | read_change_queue_length | decode_change_queue_length | reader_lsn | working_txn_cnt | working_txn_memory -----------+---------------------+---------------------------+----------------------------+------------+-----------------+-------------------- slot1 | 2 | queue0: 1005, queue1: 320 | queue0: 63, queue1: 748 | 0/1DCE2578 | 42 | 192927504 (1 row) 备注:返回值的slot_name代表复制槽名,parallel_decode_num代表该复制槽的并行解码线程数,read_change_queue_length列出了每个解码线程读取日志队列的当前长度,decode_change_queue_length列出了每个解码线程解码结果队列的当前长度,reader_lsn表示当前reader线程读取的日志位置,working_txn_cnt表示当前拼接-发送线程中正在拼接的事务个数,working_txn_memory代表拼接-发送线程中拼接事务占用总内存(单位字节)。 pg_replication_origin_create (node_name) 描述:用给定的外部名称创建一个复制源,并且返回分配给它的内部ID。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 待创建的复制源的名称。 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 返回值类型:oid pg_replication_origin_drop (node_name) 描述:删除一个以前创建的复制源,包括任何相关的重放进度。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 待删除的复制源的名称。 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 pg_replication_origin_oid (node_name) 描述:根据名称查找复制源并返回内部ID。如果没有发现这样的复制源,则抛出错误。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 要查找的复制源的名称 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 返回值类型:oid pg_replication_origin_session_setup (node_name) 描述:将当前会话标记为从给定的原点回放,从而允许跟踪回放进度。只能在当前没有选择原点时使用。使用pg_replication_origin_session_reset 命令来撤销。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 复制源名称。 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 pg_replication_origin_session_reset () 描述:取消pg_replication_origin_session_setup()的效果。 备注:调用该函数的用户需要具有SYSADMIN权限。 pg_replication_origin_session_is_setup () 描述:如果在当前会话中选择了复制源则返回真。 备注:调用该函数的用户需要具有SYSADMIN权限。 返回值类型:boolean pg_replication_origin_session_progress (flush) 描述:返回当前会话中选择的复制源的重放位置。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: flush 决定对应的本地事务是否被确保已经刷入磁盘。 取值范围:boolean 返回值类型:LSN pg_replication_origin_xact_setup (origin_lsn, origin_timestamp) 描述:将当前事务标记为重放在给定LSN和时间戳上提交的事务。只能在使用pg_replication_origin_session_setup选择复制源时调用。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: origin_lsn 复制源回放位置。 取值范围:LSN origin_timestamp 事务提交时间。 取值范围:timestamp with time zone pg_replication_origin_xact_reset () 描述:取消pg_replication_origin_xact_setup()的效果。 备注:调用该函数的用户需要具有SYSADMIN权限。 pg_replication_origin_advance (node_name, lsn) 描述: 将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。 注意:这个函数的使用不当可能会导致不一致的复制数据。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 已有复制源名称。 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 lsn 复制源回放位置。 取值范围:LSN pg_replication_origin_progress (node_name, flush) 描述:返回给定复制源的重放位置。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 复制源名称。 取值范围:字符串,不支持除字母、数字以及(_?-.)以外的字符。 flush 决定对应的本地事务是否被确保已经刷入磁盘。 取值范围:boolean pg_show_replication_origin_status() 描述:获取复制源的复制状态。 备注:调用该函数的用户需要具有SYSADMIN权限。 返回值类型: local_id:oid,复制源id。 external_id:text,复制源名称。 remote_lsn:LSN,复制源的lsn位置。 local_lsn:LSN,本地的lsn位置。 父主题: 系统管理函数
  • PG_DEFAULT_ACL PG_DEFAULT_ACL系统表存储为新建对象设置的初始权限。 表1 PG_DEFAULT_ACL字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 defaclrole oid 与此权限相关的角色ID。 defaclnamespace oid 与此权限相关的名称空间,如果没有,则为0。 defaclobjtype "char" 此权限的对象类型。 r:表示表或视图。 S:表示序列。 f:表示函数。 T:表示类型。 K:表示客户端主密钥。 k:表示列加密密钥。 defaclacl aclitem[] 创建该类型时所拥有的访问权限。 父主题: 系统表
  • GLOBAL_SESSION_MEMORY_DETAIL 统计各节点的线程的内存使用情况,以MemoryContext节点来统计。 表1 GLOBAL_SESSION_MEMORY_DETAIL字段 名称 类型 描述 node_name name 节点名称。 sessid text 线程启动时间+线程标识。 sesstype text 线程名称。 contextname text 内存上下文名称。 level smallint 内存上下文的重要级别。 parent text 父级内存上下文名称。 totalsize bigint 总申请内存大小(单位:字节)。 freesize bigint 空闲内存大小(单位:字节)。 usedsize bigint 使用内存大小(单位:字节)。 父主题: Session/Thread
  • 操作步骤 收集SQL中涉及到的所有表的统计信息。在数据库中,统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。从经验数据来看,10%左右性能问题是因为没有收集统计信息。具体请参见更新统计信息。 通过查看执行计划来查找原因。如果SQL长时间运行未结束,通过EXPLAIN命令查看执行计划,进行初步定位。如果SQL可以运行出来,则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况,以便更精准地定位问题原因。有关执行计划的详细介绍请参见SQL执行计划介绍。 审视和修改表定义。 针对EXPLAIN或EXPLAIN PERFORMANCE信息,定位SQL慢的具体原因以及改进措施,具体参见典型SQL调优点。 通常情况下,有些SQL语句可以通过查询重写转换成等价的,或特定场景下等价的语句。重写后的语句比原语句更简单,且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。经验总结:SQL语句改写规则介绍了几种常用的通过改写SQL进行调优的方法。
  • 示例:通过本地文件导入导出数据 在使用JAVA语言基于 GaussDB 进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持 CS V、TEXT等格式。 样例程序如下,执行时需要加载GaussDB jdbc驱动,驱动的获取和加载方法请参考JDBC包、驱动类和环境类。 前置条件:在数据库中创建表migration_table和migration_table_1,并在migration_table表中插入一些数据。 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 //以下用例以gsjdbc4.jar为例。 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 // $ip、$port、database需要用户自行修改。 import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{ public static void main(String[] args) { String urls = new String("jdbc:postgresql://$ip:$port/database"); //数据库URL String username = System.getenv("EXAMPLE_USERNAME_ENV"); //用户名 String password = System.getenv("EXAMPLE_PASSWORD_ENV"); //密码 String tablename = new String("migration_table"); //定义表信息 String tablename1 = new String("migration_table_1"); //定义表信息 String driver = "org.postgresql.Driver"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(urls, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } // 将SELECT * FROM migration_table查询结果导出到本地文件d:/data.txt try { copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //将d:/data.txt中的数据导入到migration_table_1中。 try { copyFromFile(conn, "d:/data.txt", tablename1); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 将migration_table_1中的数据导出到本地文件d:/data1.txt try { copyToFile(conn, "d:/data1.txt", tablename1); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 使用copyIn把数据从文件中导入数据库, public static void copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 使用copyOut把数据从数据库中导出到文件中 public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 父主题: 基于JDBC开发
  • DDL 【建议】在GaussDB中,建议DDL(建表、COMMENT等)操作统一执行。在批处理作业中尽量避免DDL操作。避免大量并发事务对性能的影响。 【建议】在非日志表(unlogged table)使用完后,立即执行数据清理(TRUNCATE)操作。因为在异常场景下,GaussDB不保证非日志表(unlogged table)数据的安全性。 【建议】临时表和非日志表的存储方式建议和基表相同。当基表为行存表时,临时表和非日志表也推荐创建为行存表,可以避免混合关联带来的高计算代价。 【建议】索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降。 【建议】不要使用DROP…CASCADE方式删除对象,除非已经明确对象间的依赖关系,以免误删。
  • 数据加载和卸载 【建议】在INSERT语句中显式给出插入的字段列表。例如: 1 INSERT INTO task(name,id,comment) VALUES ('task1','100','第100个任务'); 【建议】在批量数据入库之后,或者数据增量达到一定阈值后,建议对表进行ANALYZE操作,防止统计信息不准确而导致的执行计划劣化。 【建议】如果要清理表中的所有数据,建议使用TRUNCATE TABLE方式,不要使用DELETE TABLE方式。DELETE TABLE方式删除性能差,且不会释放那些已经删除了的数据占用的磁盘空间。
  • 使用分区表 分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点: 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。 GaussDB支持的分区表为范围分区表。 范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。 父主题: 表设计最佳实践
  • STATEMENT_HISTORY 获得当前节点的执行语句的信息。查询系统表必须具有sysadmin权限。只可在系统库中查询到结果,用户库中无法查询。 对于此系统表查询有如下约束: 必须在postgres库内查询,其它库中不存数据。 此系统表受track_stmt_stat_level控制,默认为"OFF,L0",第一部分控制Full SQL,第二部分控制Slow SQL,具体字段记录级别见下表。 对于Slow SQL,当track_stmt_stat_level的值为非OFF时,且SQL执行时间超过log_min_duration_statement,会记录为慢SQL。 表1 STATEMENT_HISTORY字段 名称 类型 描述 记录级别 db_name name 数据库名称。 L0 schema_name name schema名称。 L0 origin_node integer 节点名称。 L0 user_name name 用户名。 L0 application_name text 用户发起的请求的应用程序名称。 L0 client_addr text 用户发起的请求的客户端地址。 L0 client_port integer 用户发起的请求的客户端端口。 L0 unique_query_id bigint 归一化SQL ID。 L0 debug_query_id bigint 唯一SQL ID。 L0 query text 归一化SQL(仅在CN上有值)。 L0 start_time timestamp with time zone 语句启动的时间。 L0 finish_time timestamp with time zone 语句结束的时间。 L0 slow_sql_threshold bigint 语句执行时慢SQL的标准。 L0 transaction_id bigint 事务ID。 L0 thread_id bigint 执行线程ID。 L0 session_id bigint 用户session id。 L0 n_soft_parse bigint 软解析次数, n_soft_parse + n_hard_parse可 能大于n_calls, 因为子查询未计入n_calls。 L0 n_hard_parse bigint 硬解析次数, n_soft_parse + n_hard_parse可 能大于n_calls, 因为子查询未计入n_calls。 L0 query_plan text 语句执行计划。 L1 n_returned_rows bigint SELECT返回的结果集行数。 L0 n_tuples_fetched bigint 随机扫描行。 L0 n_tuples_returned bigint 顺序扫描行。 L0 n_tuples_inserted bigint 插入行。 L0 n_tuples_updated bigint 更新行。 L0 n_tuples_deleted bigint 删除行。 L0 n_blocks_fetched bigint buffer的块访问次数。 L0 n_blocks_hit bigint buffer的块命中次数。 L0 db_time bigint 有效的DB时间花费,多线程将累加(单位:微秒)。 L0 cpu_time bigint CPU消耗时间(单位:微秒)。 L0 execution_time bigint 执行器内执行时间(单位:微秒)。 L0 parse_time bigint SQL解析时间(单位:微秒)。 L0 plan_time bigint SQL生成计划时间(单位:微秒)。 L0 rewrite_time bigint SQL重写时间(单位:微秒)。 L0 pl_execution_time bigint plpgsql上的执行时间(单位:微秒)。 L0 pl_compilation_time bigint plpgsql上的编译时间(单位:微秒)。 L0 data_io_time bigint I/O上的时间花费(单位:微秒)。 L0 net_send_info text 通过物理连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在 分布式数据库 中,CN与CN、CN与客户端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 L0 net_recv_info text 通过物理连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,CN与CN、CN与客户端以及CN与DN之间都是通过物理连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 L0 net_stream_send_info text 通过逻辑连接发送消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。 例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 L0 net_stream_recv_info text 通过逻辑连接接收消息的网络状态,包含时间(微秒)、调用次数、吞吐量(字节)。在分布式数据库中,不同分片的DN之间通过逻辑连接进行通信,通过该字段可以分析SQL在分布式系统下的网络开销。 例如:{"time":xxx, "n_calls":xxx, "size":xxx}。 L0 lock_count bigint 加锁次数。 L0 lock_time bigint 加锁耗时。 L1 lock_wait_count bigint 加锁等待次数。 L0 lock_wait_time bigint 加锁等待耗时。 L1 lock_max_count bigint 最大持锁数量。 L0 lwlock_count bigint 轻量级加锁次数(预留)。 L0 lwlock_wait_count bigint 轻量级等锁次数。 L0 lwlock_time bigint 轻量级加锁时间(预留)。 L1 lwlock_wait_time bigint 轻量级等锁时间。 L1 details bytea 语句锁事件的列表,该列表按时间顺序记录事件,记录的数量受参数track_stmt_details_size的影响,该字段为二进制,需要借助解析函数pg_catalog.statement_detail_decode读取,见(表8)。 事件包括: 加锁开始 加锁结束 等锁开始 等锁结束 放锁开始 放锁结束 轻量级等锁开始 轻量级等锁结束 L2 is_slow_sql boolean 该SQL是否为slow SQL。 t(true):表示是。 f(false):表示不是。 L0 trace_id text 驱动传入的trace id,与应用的一次请求相关联。 L0 advise text 可能导致该SQL为slow SQL的风险信息(可能同时存在多种风险)。 Cast Function Cause Index Miss. :表示存在隐式转换导致索引匹配失败的风险。 Limit too much rows. :表示存在limit值过大导致SQL变慢的风险。 Proleakproof of function is false. :表示函数的proleakproof值为false,此时函数在生成计划时因存在数据泄露的风险而不会使用统计信息,影响生成计划的准确性,从而存在SQL变慢的风险。 L0 父主题: 系统表
  • audit_xid_info 参数说明:这个参数决定是否在审计日志字段detail_info中记录SQL语句的事务ID。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0、1。 0表示关闭审计日志记录事务ID功能。 1表示开启审计日志记录事务ID功能。 默认值:0 如果开启此开关,审计日志中detail_info信息则以xid开始,例如: detail_info: xid=14619 , create table t1(id int); 对于不存在事务ID的审计行为,记录xid=NA。
  • enable_nonsysadmin_execute_direct 参数说明:是否允许非系统管理员和非监控管理员执行EXECUTE DIRECT ON语句。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示允许任意用户执行EXECUTE DIRECT ON语句。 off表示只允许系统管理员和监控管理员执行EXECUTE DIRECT ON语句。 默认值:off
  • audit_system_object 参数说明:该参数决定是否对 GaussDB数据库 对象的CREATE、DROP、ALTER操作进行审计。GaussDB数据库对象包括DATABASE、USER、schema、TABLE等。通过修改该配置参数的值,可以只审计需要的数据库对象的操作,在主备强制选主场景建议audit_system_object取最大值,所有DDL对象全部审计。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~134217727 0代表关闭GaussDB数据库对象的CREATE、DROP、ALTER操作审计功能。 非0代表只审计GaussDB的某类或者某些数据库对象的CREATE、DROP、ALTER操作。 取值说明: 该参数的值由27个二进制位的组合求出,这27个二进制位分别代表GaussDB的27类数据库对象。如果对应的二进制位取值为0,表示不审计对应的数据库对象的CREATE、DROP、ALTER操作;取值为1,表示审计对应的数据库对象的CREATE、DROP、ALTER操作。这27个二进制位代表的具体审计内容请参见表1。 默认值:67121159,表示对DATABASE、SCHEMA、USER、DATA SOURCE、NODE GROUP这几种数据库对象的DDL操作进行审计。 表1 audit_system_object取值含义说明 二进制位 含义 取值说明 第0位 是否审计DATABASE对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第1位 是否审计SCHEMA对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第2位 是否审计USER和USER MAPPING对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第3位 是否审计TABLE对象的CREATE、DROP、ALTER、TRUNCATE操作。 0表示不审计该对象的CREATE、DROP、ALTER、TRUNCATE操作; 1表示审计该对象的CREATE、DROP、ALTER、TRUNCATE操作。 第4位 是否审计INDEX对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第5位 是否审计VIEW/MATVIEW对象的CREATE、DROP操作。 0表示不审计该对象的CREATE、DROP操作; 1表示审计该对象的CREATE、DROP操作。 第6位 是否审计TRIGGER对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第7位 是否审计PROCEDURE/FUNCTION对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第8位 是否审计TABLESPACE对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第9位 是否审计RESOURCE POOL对象( 详见《实验室特性说明》的“资源负载管理 ”章节内容)的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第10位 是否审计WORKLOAD对象( 详见《实验室特性说明》的“资源负载管理 ”章节内容)的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第11位 保留 - 第12位 是否审计DATA SOURCE对象的CRAETE、DROP、ALTER操作。不建议用户使用。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第13位 是否审计NODE GROUP对象的CREATE、DROP操作。 0表示不审计该对象的CREATE、DROP操作; 1表示审计该对象的CREATE、DROP操作。 第14位 是否审计ROW LEVEL SECURITY对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第15位 是否审计TYPE对象的CREATE、DROP、ALTER操作。 0表示不审计TYPE对象的CREATE、DROP、ALTER操作; 1表示审计TYPE对象的CREATE、DROP、ALTER操作。 第16位 是否审计TEXT SEARCH对象(CONFIGURATION和DICTIONARY)的CREATE、DROP、ALTER操作。 0表示不审计TEXT SEARCH对象的CREATE、DROP、ALTER操作; 1表示审计TEXT SEARCH对象的CREATE、DROP、ALTER操作。 第17位 是否审计DIRECTORY对象的CREATE、DROP、ALTER操作。 0表示不审计DIRECTORY对象的CREATE、DROP、ALTER操作; 1表示审计DIRECTORY对象的CREATE、DROP、ALTER操作。 第18位 是否审计SYNONYM对象的CREATE、DROP、ALTER操作。 0表示不审计SYNONYM对象的CREATE、DROP、ALTER操作; 1表示审计SYNONYM对象的CREATE、DROP、ALTER操作。 第19位 是否审计SEQUENCE对象的CREATE、DROP、ALTER操作。 0表示不审计SEQUENCE对象的CREATE、DROP、ALTER操作; 1表示审计SEQUENCE对象的CREATE、DROP、ALTER操作。 第20位 保留 - 第21位 是否审计PACKAGE对象的CREATE、DROP、ALTER操作(分布式场景暂不支持PACKAGE)。 0表示不审计PACKAGE对象的CREATE、DROP、ALTER操作; 1表示审计PACKAGE对象的CREATE、DROP、ALTER操作。 第22位 保留 - 第23位 保留 - 第24位 是否审计对gs_global_config全局对象的ALTER、DROP操作。 0表示不审计对系统表gs_global_config全局对象的ALTER、DROP操作; 1表示审计对系统表gs_global_config全局对象的ALTER、DROP操作。 第25位 保留 - 第26位 保留 -
  • enable_access_server_directory 参数说明:是否开启非初始用户创建、修改和删除DIRECTORY的权限。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启非初始用户创建、修改和删除DIRECTORY的权限。 off表示不开启非初始用户创建、修改和删除DIRECTORY的权限。 默认值:off 用户在使用高级包UTL_FILE访问服务器端文件时,要求必须拥有所指定的DIRECTORY对象的权限。 出于安全考虑,默认情况下,只有初始用户才能够创建、修改、删除DIRECTORY对象。 如果开启了enable_access_server_directory,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象;具有SYSADMIN权限的用户、directory对象的属主、被授予了该directory的DROP权限的用户或者继承了内置角色gs_role_directory_drop权限的用户可以删除directory对象;具有SYSADMIN权限的用户和directory对象的属主可以修改directory对象的所有者,且要求该用户是新属主的成员。
  • asp_log_directory 参数说明:asp_flush_mode设置为all或者file时,asp_log_directory决定存放服务器asp日志文件的目录。它可以是绝对路径,或者是相对路径(相对于数据目录的路径),仅sysadmin用户可以访问。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 当配置文件中asp_log_directory的值为非法路径时,会导致集群无法重新启动。 合法路径:用户对此路径有读写权限。 非法路径:用户对此路径无读写权限。 取值范围:字符串 默认值:安装时指定。
  • query_log_directory(废弃) 参数说明:enable_slow_query_log设置为on时,query_log_directory决定存放服务器慢查询日志文件的目录,仅sysadmin用户可以访问。它可以是绝对路径,或者是相对路径(相对于数据目录的路径),在该版本中已废弃。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 当配置文件中query_log_directory的值为非法路径时,会导致集群无法重新启动。 合法路径:用户对此路径有读写权限 非法路径:用户对此路径无读写权限 取值范围:字符串 默认值:安装时指定。
  • track_stmt_retention_time 参数说明:组合参数,控制全量/慢SQL记录的保留时间。以60秒为周期读取该参数,并执行清理超过保留时间的记录,仅sysadmin用户可以访问。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型 该参数分为两部分,形式为'full sql retention time, slow sql retention time': full sql retention time为全量SQL保留时间,取值范围为0 ~ 86400。 slow sql retention time为慢SQL的保留时间,取值范围为0 ~ 604800。 默认值:3600,604800
  • track_stmt_parameter 参数说明:开启track_stmt_parameter后,在statement_history中记录的执行语句不再进行归一化操作,可以显示完整SQL语句信息,辅助DBA进行问题定位;其中对于简单查询,显示完整语句信息;对于PBE语句,显示完整语句信息的同时,追加每个变量数值信息,格式为“query string;parameters:$1=value1,$2=value2,...”,该参数提供的目的是为用户呈现全量SQL信息,不受track_activity_query_size参数控制。对于PBE类型语句且走SQL Bypass逻辑时,参数直接下发到DN,故在CN查询statement_history无法获取完整语句数信息,同时由于DN无Query字符串信息,故在DN查询statement_history中也无法获取完整语句信息。 该参数属于SIGHUP类型参数,请参考表2中对应设置方法进行设置。 取值范围:布尔型 on:表示开启显示完整SQL语句信息的功能。 off:表示关闭显示完整SQL语句信息的功能。 默认值:off
  • instr_unique_sql_count 参数说明:控制系统中unique sql信息实时收集功能。配置为0表示不启用unique sql信息收集功能。 该值由大变小将会清空系统中原有的数据重新统计(备机不支持此能力);从小变大不受影响。 当系统中产生的unique sql信息大于instr_unique_sql_count时,系统产生的unique sql信息不被统计。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~2147483647 默认值:200000
  • query_log_file(废弃) 参数说明:GUC参数enable_slow_query_log设置为ON,表示需要将慢查询记录写进日志文件中,query_log_file决定服务器慢查询日志文件的名称,仅sysadmin用户可以访问。通常日志文件名是按照strftime模式生成,因此可以用系统时间定义日志文件名,用%转义字符实现,在该版本中已废弃。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 建议使用%转义字符定义日志文件名称,否则难以对日志文件进行有效的管理。 取值范围:字符串 默认值:slow_query_log-%Y-%m-%d_%H%M%S.log
  • PG_USER_MAPPING PG_USER_MAPPING系统表存储从本地用户到远程的映射。 需要有系统管理员权限才可以访问此系统表。普通用户可以使用视图PG_USER_MAPPINGS进行查询。 表1 PG_USER_MAPPING字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 umuser oid PG_AUTHID.oid 被映射的本地用户的OID,如果用户映射是公共的则为0。 umserver oid PG_FOREIGN_SERVER.oid 包含这个映射的外部服务器的OID。 umoptions text[] - 用户映射指定选项,使用“keyword=value”格式的字符串。 父主题: 系统表
共100000条