华为云用户手册

  • 示例 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 gaussdb=# CALL DBE_ILM_ADMIN.CUSTOMIZE_ILM(1, 15); customize_ilm --------------- (1 row) gaussdb=# select * from gs_adm_ilmparameters; name | value ----------------------------------+------- EXECUTION_INTERVAL | 15 RETENTION_TIME | 30 ENABLED | 1 POLICY_TIME | 0 ABS_JOBLIMIT | 10 JOB_SIZELIMIT | 1024 WIND_DURATION | 240 BLOCK_LIMITS | 40 ENABLE_META_COMPRESSION | 0 SAMPLE_MIN | 10 SAMPLE_MAX | 10 CONST_PRIO | 40 CONST_THRESHOLD | 90 EQVALUE_PRIO | 60 EQVALUE_THRESHOLD | 80 ENABLE_DELTA_ENCODE_SWITCH | 1 LZ4_COMPRESSION_LEVEL | 0 ENABLE_LZ4_PARTIAL_DECOMPRESSION | 1 (18 rows)
  • 接口介绍 服务于ILM策略实施,实现ADO的后台调度以及各个限流参数的控制。 表1 DBE_ILM_ADMIN 接口名称 描述 CUSTOMIZE_ILM 根据输入参数定制ILM策略属性。 DISABLE_ILM 关闭后台调度。 ENABLE_ILM 开启后台调度。 当并发量较大时,执行DBE_ILM_ADMIN.DISABLE_ILM或DBE_ILM_ADMIN.ENABLE_ILM可能会提示资源繁忙,稍后重试即可。提示内容为“Resources are busy, please try again later.”。 DBE_ILM_ADMIN.CUSTOMIZE_ILM 根据输入参数定制ILM策略属性,原型为: 1 2 3 DBE_ILM_ADMIN.CUSTOMIZE_ILM( PA RAM IN NUMBER, VAL IN NUMBER); 表2 DBE_ILM_ADMIN.CUSTOMIZE_ILM接口参数说明 参数 描述 PARAM 参数序号。 VAL 参数取值。 表3 DBE_ILM_ADMIN.CUSTOMIZE_ILM接口参数范围 参数编号 参数值 描述 1 EXECUTION_INTERVAL ADO Task的执行频率,单位分钟,默认值15。取值范围为大于等于1小于等于2147483647的整数或浮点数,作用时向下取整。 2 RETENTION_TIME ADO相关历史的保留时长,单位天,默认值30。取值范围为大于等于1小于等于2147483647的整数或浮点数,作用时向下取整。 7 ENABLE 后台调度的状态,不支持在该接口中修改,提示Invalid argument value, ENABLED should be change by calling DBE_ILM_ADMIN.ENABLE_ILM and DBE_ILM_ADMIN.DISABLE_ILM。应使用disable_ilm()和enable()修改。 11 POLICY_TIME 控制ADO的条件单位是天还是秒,秒仅用来做测试用。取值为: 0: ILM_POLICY_IN_DAYS(默认值) 1:ILM_POLICY_IN_SECONDS 12 ABS_JOBLIMIT 控制一次ADO Task最多生成多少个ADO Job。取值范围为大于等于0小于等于2147483647的整数或浮点数,作用时向下取整。 13 JOB_SIZELIMIT 控制单个ADO Job可以处理的最大字节数,单位兆。取值范围为大于等于1小于等于2147483647的整数或浮点数,作用时向下取整。 14 WIND_DURATION 维护窗口持续时长,单位分钟,默认240分钟(4小时);取值范围为大于等于0小于1440(24小时)的整数。 15 BLOCK_LIMITS 控制实例级的行存压缩速率上限,默认是40;取值范围是0到10000(0表示不限制);单位是block/ms,表示每毫秒最多压缩多少个block。 16 ENABLE_META_COMPRESSION 是否开启header压缩,默认为0,取值范围为0(关闭)和1(开启)。 说明: 设置此参数为1时,对于单行数据较短的表,压缩率会有一定提升,但是访问压缩行的性能会有较大幅度的下降。若数据库多是单行数据较长的表,不建议开启此参数。 17 SAMPLE_MIN 常量编码和等值编码采样步长最小值,默认为10,取值范围[1, 100],支持小数输入,小数会自动向下取整。 18 SAMPLE_MAX 常量编码和等值编码采样步长最大值,默认为10,取值范围[1, 100],支持小数输入,小数会自动向下取整。 19 CONST_PRIO 常量编码优先级,默认为40,取值范围[0, 100],100表示关闭常量编码,支持小数输入,小数会自动向下取整。 20 CONST_THRESHOLD 常量编码阈值,默认为90,取值范围[1, 100],表示一列常量值的占比超过该阈值时进行常量编码,支持小数输入,小数会自动向下取整。 21 EQVALUE_PRIO 等值编码优先级,默认为60,取值范围[0, 100],100表示关闭等值编码,支持小数输入,小数会自动向下取整。 22 EQVALUE_THRESHOLD 等值编码阈值,默认为80,取值范围[1, 100],表示两列数据的等值比例超过该阈值时进行等值编码,支持小数输入,小数会自动向下取整。 23 ENABLE_DELTA_ENCODE_SWITCH 差值编码开关,默认为1,支持小数输入,0表示关闭,1表示开启,小数会自动向下取整。 24 LZ4_COMPRESSION_LEVEL lz4压缩等级,默认为0,取值范围[0, 16],支持小数输入,小数会自动向下取整。 25 ENABLE_LZ4_PARTIAL_DECOMPRESSION 部分解压开关,默认为1,支持小数输入,0表示关闭,1表示开启,小数会自动向下取整。 DBE_ILM_ADMIN.DISABLE_ILM 关闭后台调度,原型为: 1 gaussdb=# DBE_ILM_ADMIN.DISABLE_ILM(); DBE_ILM_ADMIN.ENABLE_ILM 开启后台调度,原型为: 1 gaussdb=# DBE_ILM_ADMIN.ENABLE_ILM(); 注意:后台调度生效需要先在数据库运维平台打开guc参数:enable_ilm。
  • 为什么REVOKE某个用户的CONNECT ON DATABASE权限后还可以登录数据库? 答:使用REVOKE CONNECT ON DATABASE dbname FROM u1命令撤销u1的权限后,因为数据库的CONNECT权限授予了public,需要指定public来实现。 GaussDB 提供了一个隐式定义的拥有所有角色组public,所有创建的用户和角色默认拥有public所拥有的权限。需要撤销或重新授予用户和角色public的权限,可通过GRANT和REVOKE指定关键字public实现。 GaussDB会将某些类型的对象上的权限授予public。默认情况以下这些对象的权限会授予public: 数据库的CONNECT权限。 CREATE TEMP TABLE权限。 函数的EXECUTE权限。 语言和数据类型(包括域)的USAGE权限。 对象的拥有者可以撤销默认授予public的权限,并授予权限给其他用户。 具体示例如下: 创建用户u1和数据库db_test。 gaussdb=# CREATE USER u1 PASSWORD '********'; gaussdb=# CREATE DATABASE db_test; 测试确定u1用户可以正常连接数据库test。后退出数据库。 gsql -d db_test -h xxx.xxx.xxx.xxx -p xxxx -U u1 -W '********' 执行REVOKE命令撤销public连接db_test的权限。 gaussdb=# REVOKE CONNECT ON DATABASE db_test FROM public; 验证结果,使用u1连接数据库。结果显示u1用户已经无法连接数据库。 gsql -d db_test -h xxx.xxx.xxx.xxx -p xxxx -U u1 -W '********' gsql: FATAL: permission denied for database "db_test" DETAIL: User does not have CONNECT privilege. --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP DATABASE db_test; 父主题: FAQ
  • MY_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS视图显示了当前用户拥有的分区表或分区索引的分区键列的相关信息。该视图所有用户可访问,仅可查看当前用户所属信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_PART_KEY_COLUMNS字段 名称 类型 描述 name character varying(128) 分区表名或索引名。 object_type character(5) 对象类型。 若分区为分区表,此列为table。 若分区为分区索引,此列为index。 column_name character varying(4000) 分区表或索引的键列名。 column_position numeric 列在分区中的位置。 collated_column_id numeric 暂不支持,值为NULL。 父主题: 分区表
  • 参数说明 join_table_list为表示表join顺序的hint字符串,可以包含当前层的任意个表(别名),或对于子查询提升的场景,也可以包含子查询的hint别名,同时任意表可以使用括号指定优先级,表之间使用空格分隔。 @queryblock请参见指定Hint所处的查询块Queryblock章节,可省略,表示在当前查询块生效。 表只能用单个字符串表示,不能带schema。 表如果存在别名,需要优先使用别名来表示该表。
  • 常用方法 表1 LogicalCreateSlotBuilder常用方法 方法名 返回值类型 描述 throws withSlotName(String slotName) T 指定复制槽名。 - withOutputPlugin(String outputPlugin) ChainedLogicalCreateSlotBuilder 插件名称,当前支持mppdb_decoding、sql_decoding、parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding。 mppdb_decoding:一种解码的输出格式,设置后输出内容为JSON格式。输出的结果包含相关数据的属性信息和属性对应的值。sql_decoding、parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding等根据插件格式不同,分别输出sql格式、二进制格式、json格式和text格式。 - make() void 在数据库中创建具有指定参数的插槽。 SQLException self() ChainedLogicalCreateSlotBuilder 返回ChainedLogicalCreateSlotBuilder的实现。 - 本接口类不支持计划外ALT特性。
  • Configuration settings Configuration settings列名称及描述如表1所示。 表1 Configuration settings报表主要内容 列名称 描述 Name GUC参数名称。 Abstract GUC参数描述。 Type 数据类型。 Current Value 当前值。 Min Value 合法最小值。 Max Value 合法最大值。 Category GUC参数类别。 Enum Values 如果是枚举值,列举所有枚举值。 Default Value 数据库启动时参数默认值。 Reset Value 数据库重置时参数默认值。 父主题: WDR报告信息介绍
  • DBE_PERF Schema DBE_PERF Schema内视图主要用来诊断性能问题,也是WDR Snapshot的数据来源。数据库安装后,默认只有初始用户和监控管理员具有模式dbe_perf的权限。若是由旧版本升级而来,为保持权限的前向兼容,模式dbe_perf的权限与旧版本保持一致,当前版本禁止所有用户在该模式下创建操作符,已创建的操作符不影响使用。从OS、Instance、Memory等多个维度划分组织视图,并且符合如下命名规范: GLOBAL_开头的视图,代表从数据库节点请求数据,并将数据追加对外返回,不会处理数据。 SUMMARY_开头的视图,代表是将数据库内的数据概述,多数情况下是返回数据库节点(有时只有数据库主节点的)的数据,会对数据进行加工和汇聚。 非这两者开头的视图,一般代表本地视图,不会向其它数据库节点请求数据。 OS Instance Memory File Object Workload Session/Thread Transaction Query Cache/IO Utility Lock Wait Events Configuration Operator Workload Manager Global Plancache RTO & RPO AI Watchdog Trace Function 父主题: Schema
  • DB_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY视图显示表统计信息涉及的表、分区或者子分区以及执行收集表统计信息的时间。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_STATS_HISTORY字段 名称 类型 描述 owner character varying(128) 对象的拥有者。 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 stats_update_time timestamp(6) with time zone 统计信息更新的时间,数据库重启后,数据会丢失。 父主题: 其他系统视图
  • 示例 修改策略描述: --创建一个表tb_for_masking。 gaussdb=# CREATE TABLE tb_for_masking(idx int, col1 text, col2 text, col3 text, col4 text, col5 text, col6 text, col7 text,col8 text); --向表tb_for_masking插入数据。 gaussdb=# INSERT INTO tb_for_masking VALUES(1, '9876543210', 'usr321usr', 'abc@huawei.com', 'abc@huawei.com', '1234-4567-7890-0123', 'abcdef 123456 ui 323 jsfd321 j3k2l3', '4880-9898-4545-2525', 'this is a llt case'); --查看数据。 gaussdb=# SELECT * FROM tb_for_masking; idx | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 -----+------------+-----------+----------------+----------------+---------------------+------------------------------- ------+---------------------+-------------------- 1 | 9876543210 | usr321usr | abc@huawei.com | abc@huawei.com | 1234-4567-7890-0123 | abcdef 123456 ui 323 jsfd321 j 3k2l3 | 4880-9898-4545-2525 | this is a llt case (1 row) --创建资源标签标记敏感列col1。 gaussdb=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1); --创建一个名为maskpol1的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1); --为脱敏策略maskpol1添加描述。 gaussdb=# ALTER MASKING POLICY maskpol1 COMMENTS 'masking policy for tb_for_masking.col1'; --查看脱敏策略maskpol1的描述。 gaussdb=# SELECT * FROM GS_MASKING_POLICY; polname | polcomments | modifydate | polenabled ----------+----------------------------------------+----------------------------+------------ maskpol1 | masking policy for tb_for_masking.col1 | 2023-11-07 16:38:31.607374 | t (1 row) 修改脱敏策略: --创建资源标签标记敏感列col2。 gaussdb=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2); --脱敏策略maskpol1新增randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 ADD randommasking ON LABEL(mask_lb2); --访问tb_for_masking表,col2列触发脱敏策略。 gaussdb=# SELECT col2 FROM tb_for_masking; col2 ------------ 27e8da66cc (1 row) --脱敏策略maskpol1移除randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 REMOVE randommasking ON LABEL(mask_lb2); --访问表tb_for_masking,col2列的数据没有脱敏,说明脱敏方式randommasking失效。 gaussdb=# SELECT col2 FROM tb_for_masking; col2 ----------- usr321usr (1 row) --脱敏策略maskpol1修改为randommasking的脱敏方式。 gaussdb=# ALTER MASKING POLICY maskpol1 MODIFY randommasking ON LABEL(mask_lb1); --访问tb_for_masking表,col1列触发脱敏策略。 gaussdb=# SELECT col1 FROM tb_for_masking; col1 ------------ 5a03debac1 (1 row) 修改脱敏策略生效场景: --创建dev_mask和bob_mask用户。 gaussdb=# CREATE USER dev_mask PASSWORD '********'; gaussdb=# CREATE USER bob_mask PASSWORD '*********'; --创建资源标签标记敏感列col8。 gaussdb=# CREATE RESOURCE LABEL mask_lb8 ADD COLUMN(tb_for_masking.col8); --创建一个名为maskpol8的脱敏策略。 gaussdb=# CREATE MASKING POLICY maskpol8 randommasking ON LABEL(mask_lb8) FILTER ON ROLES(dev_mask, bob_mask), APP(gsql), IP('172.31.17.160', '127.0.0.0/24'); --修改脱敏策略maskpol8的过滤信息ROLES。 gaussdb=# ALTER MASKING POLICY maskpol1 MODIFY (FILTER ON ROLES(dev_mask)); --使用dev_mask用户查看tb_for_masking。 gaussdb=# GRANT ALL PRIVILEGES TO dev_mask; --访问tb_for_masking表,col8列触发脱敏策略。 gaussdb=# SELECT col8 FROM tb_for_masking; col8 -------------------- f134e06ef528013b46 (1 row) 移除脱敏策略生效场景,使策略对所用场景生效: gaussdb=# ALTER MASKING POLICY maskpol1 DROP FILTER; 禁用脱敏策略: --禁用脱敏策略maskpol1。 gaussdb=# ALTER MASKING POLICY maskpol1 DISABLE; --查看脱敏策略maskpol1的状态,polenabled字段的值为f,说明该脱敏策略禁用成功。 gaussdb=# SELECT * FROM GS_MASKING_POLICY; polname | polcomments | modifydate | polenabled ----------+-------------+----------------------------+------------ maskpol1 | | 2023-11-07 17:22:54.594111 | f 删除数据: --删除脱敏策略。 gaussdb=# DROP MASKING POLICY maskpol1, maskpol8; --删除资源标签。 gaussdb=# DROP RESOURCE LABEL mask_lb1, mask_lb2, mask_lb8; --删除表tb_for_masking。 gaussdb=# DROP TABLE tb_for_masking; --删除用户dev_mask和bob_mask。 gaussdb=# DROP USER dev_mask, bob_mask;
  • 参数说明 policy_name 脱敏策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符命名规范。 policy_comments 需要为脱敏策略添加或修改的描述信息。 masking_function 指的是预置的八种脱敏方式或者用户自定义的函数,支持模式。 maskall不是预置函数,硬编码在代码中,不支持\df展示。 预置时脱敏方式如下: { maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking } label_name 资源标签名称。 FILTER_TYPE 指定脱敏策略的过滤信息,过滤类型包括:IP、ROLES、APP。 filter_value 指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。 ENABLE|DISABLE 可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 语法格式 修改策略描述: 1 ALTER MASKING POLICY policy_name COMMENTS policy_comments; 修改脱敏方式: 1 ALTER MASKING POLICY policy_name { ADD | REMOVE | MODIFY } masking_actions[, ...]; 其中masking_actions: 1 masking_function ON LABEL(label_name[, ...]) 其中masking_function: 1 { maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking } 修改脱敏策略生效场景: 1 ALTER MASKING POLICY policy_name MODIFY (filter_group_clause); 其中filter_group_clause: 1 FILTER ON { ( FILTER_TYPE ( filter_value [, ... ] ) ) [, ... ] } 移除脱敏策略生效场景,使策略对所用场景生效: 1 ALTER MASKING POLICY policy_name DROP FILTER; 修改脱敏策略开启/关闭: 1 ALTER MASKING POLICY policy_name {ENABLE | DISABLE};
  • 表级字符集和字符序 设置表的默认字符集和默认字符序,创建表操作请参见CREATE TABLE。 CREATE TABLE table_name (column_list) [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ] 修改表的默认字符集和默认字符序,修改不会影响表中当前已经存在的列,修改表操作请参见ALTER TABLE。 ALTER TABLE table_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ] 修改表的默认字符集和默认字符序为指定的值,同时将表中的所有字符类型的字段的字符集和字符序设置为指定的值,并将字段里的数据转换为新字符集编码。 ALTER TABLE table_name CONVERT TO CHARACTER SET | CHARSET charset [ COLLATE collation ] 参数说明 table_name 表名称。 default_charset 指定表的默认字符集,单独指定时会将表的默认字符序设置为指定的字符集的默认字符序。 default_collation 指定表的默认字符序,单独指定时会将表的默认字符集设置为指定的字符序对应的字符集。 GaussDB通过以下方式选择表的字符集和字符序: 如果同时指定了default_charset 和default_collation,则使用字符集default_charset和字符序 default_collation,且default_charset和default_collation需要对应,不对应会产生报错。 如果仅指定了default_charset,则使用字符集default_charset及其默认字符序。 如果仅指定了default_collation,则使用default_collation字符序和其对应的字符集。 如果既不指定default_charset也不指定default_collation,则使用该表所在的模式的默认字符集和默认字符序作为表的默认字符集和表的默认字符序。 default_charset仅支持指定为带有默认字符序的字符集,如果指定的字符集没有默认字符序则报错。 default_collation仅支持指定为B模式(即sql_compatibility = 'B')下的字符序,指定其他字符序报错。 如果表的默认字符序为binary,则表中未指定字符序的文本类型会转换为对应的二进制类型,且字符序设置为binary。 暂不支持设置表的默认字符集与数据库的server_encoding不同。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -- 仅设置字符集,字符序为字符集的默认字符序。 gaussdb=# CREATE TABLE test(c1 text) CHARSET utf8; -- 仅设置字符序,字符集为字符序关联的字符集。 gaussdb=# CREATE TABLE test(c1 text) COLLATE utf8_bin; -- 同时设置字符集与字符序,字符集和字符序需对应。 gaussdb=# CREATE TABLE test(c1 text) CHARSET utf8 COLLATE utf8_bin; -- 将表中字符类型字段的数据转化为utf8mb4编码,并设置表和字段的字符序为utf8mb4_bin。 gaussdb=# ALTER TABLE test CONVERT TO CHARSET utf8mb4 COLLATE utf8mb4_bin; -- 修改表的默认字符集为utf8mb4,默认字符序为utf8mb4_bin。 gaussdb=# ALTER TABLE test CHARSET utf8mb4 COLLATE utf8mb4_bin; 父主题: 字符集与字符序
  • 用户权限设置 给用户直接授予某对象的权限,请参见GRANT。 将Schema中的表或者视图对象授权给其他用户或角色时,需要将表或视图所属Schema的USAGE权限同时授予该用户或角色。否则用户或角色将只能看到这些对象的名称,并不能实际进行对象访问。 例如,下面示例将Schema tpcds的权限授予用户joe后,将表tpcds.web_returns的select权限授予用户joe。 1 2 gaussdb=# GRANT USAGE ON SCHEMA tpcds TO joe; gaussdb=# GRANT SELECT ON TABLE tpcds.web_returns to joe; 给用户指定角色,使用户继承角色所拥有的对象权限。 创建角色。 新建一个角色lily,同时给角色指定系统权限CREATEDB: 1 gaussdb=# CREATE ROLE lily WITH CREATEDB PASSWORD "********"; 给角色赋予对象权限,请参见GRANT。 例如,将模式tpcds的权限授予角色lily后,将表tpcds.web_returns的select权限授予角色lily。 1 2 gaussdb=# GRANT USAGE ON SCHEMA tpcds TO lily; gaussdb=# GRANT SELECT ON TABLE tpcds.web_returns to lily; 将角色的权限授予用户。 1 gaussdb=# GRANT lily to joe; 当将角色的权限授予用户时,角色的属性并不会传递到用户。 回收用户权限,请参见REVOKE。 父主题: 用户及权限
  • 参数说明 @queryblock请参见指定Hint所处于的查询块Queryblock,可省略,表示在当前查询块生效。 broadcast、redistribute和local_roundrobin表示数据分布方法。 no表示hint的stream方式不使用。 table_list为进行stream操作的单表或多表,多个表之间使用空格分隔。例如:broadcast(t1),broadcast(t1 t2)。
  • loginTimeout 作用:控制与数据库建连时间,其中时间包括connectTimeout和socketTimeoutInConnecting,超过阈值则退出。计算方式为:loginTimeout=(connectTimeout+连接认证时间+初始化语句执行时间)*节点数量,默认值为0。 建议:配置后每次建连都会开启一个异步线程,在连接数较多的情况可能会导致客户端压力增大,可以根据业务酌情调整,建议配置为max(connectTimeout, socketTimeoutInConnecting) * 节点数。 此参数设置后对于多IP而言,时间是尝试连接IP的时间,可能会出现因为设置的值较小导致后面的IP无法连接的问题。例如设置了三个IP,如果loginTimeout为5s,但前两个IP建连总共用了5s,第三个IP会无法进行连接。 当CPU、内存、I/O负载中的任意一项接近100%时,会出现连接慢的现象,可能会导致连接时间超过阈值的问题,可通过以下方式进行问题排查: 登录连接慢的物理机或通过管理工具查询资源负载:可通过top命令等确认CPU使用率;通过free命令确认内存使用情况;通过iostat命令确认I/O负载;此外还可以通过cm_agent中的监控日志,以及数据库运维平台中的监测记录进行检查。 针对短时间内大量慢查询导致的峰值负载场景,可通过[数据库服务器的端口号+1]端口连接,查询pg_stat_activity视图;针对慢查询,可以使用系统函数pg_terminate_backend(pid int)进行查杀会话。 针对业务量长期超负载情况(即无明显慢查询,或慢查询查杀后但新的查询依然会变成慢查询),应考虑降低业务负载、增加数据库资源的方式进行优化。
  • fetchsize 原理:fetchsize在设置为n时,数据库服务器端在执行查询后,调用者在执行resultset.next()的时候,JDBC会先与服务器端进行通信,取n条数据到JDBC的客户端中,然后返回第一条给调用者。当调用者取到第n+1条数据的时候,会再次到数据库服务端去取数据。 作用:避免了数据库同时把所有结果全部传输到客户端,导致客户端的内存资源不足。 建议:建议根据自身的业务查询数据数量和客户端机器内存情况来配置此参数,设置fetchsize时要关闭自动提交(autocommit=false)模式,否则会导致fetchsize无法生效。
  • prepareThreshold 作用:默认值为5,如果一个会话连续多次执行同一个SQL,在达到prepareThreshold次数以上时,JDBC将不再对这个SQL发送parse命令,会将其缓存起来,提升执行速度。 建议:默认值为5,根据业务需要进行调整。 不建议通过JDBC,并且使用prepareStatement的方式执行涉及密码的语句(例如:CREATE USER user_name WITH PASSWORD '********';),原因是执行达到prepareThreshold指定次数时,数据库将SQL语句进行缓存,基于安全因素不会将密码进行缓存,该prepareStatement再次执行时会报错(Password must contain at least 8 characters.)。
  • socketTimeout 作用:控制套接字操作超时阈值,如果业务语句执行或者从网络读取数据流超过此阈值,连接中断(即语句超过规定时间执行,没有数据返回的时候)。 建议:该参数限制单条SQL最长的执行时间,单语句执行超过该值则会超时报错退出,建议根据业务特征进行配置,如果未配置,默认为0,即不会超时。如果不配置该参数,在数据库进程异常情况下,会导致客户端出现长时间等待,建议根据业务可以接受的SQL执行时间进行配置。
  • 示例 CREATE PACKAGE示例 --创建测试表tbl_test。 gaussdb=# CREATE TABLE tbl_test(uid varchar(6) PRIMARY KEY, area_id varchar(5), level int); --创建包头。 gaussdb=# CREATE OR REPLACE PACKAGE pkg_test AS --公有存储过程可以被外部调用。 PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); PROCEDURE proc_del_tbl_test(v_uid in varchar); PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); END pkg_test; / --创建包体。 gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg_test AS PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN INSERT INTO tbl_test VALUES (v_uid, v_area_id, v_level); END; PROCEDURE proc_del_tbl_test(v_uid in varchar) AS BEGIN DELETE FROM tbl_test WHERE uid = v_uid; END; PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN UPDATE tbl_test SET area_id = v_area_id, level = v_level WHERE uid = v_uid; END; var4 int := 10; --实例化开始。 BEGIN var4 := 10; dbe_output.print_line(var4); END pkg_test; / 调用PACKAGE示例 --使用CALL调用PACKAGE的存储过程。 gaussdb=# CALL pkg_test.proc_ist_tbl_test('0A00B1','01001',24); gaussdb=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+--------- 0A00B1 | 01001 | 24 (1 row) --使用SELECT调用PACKAGE的存储过程。 gaussdb=# SELECT pkg_test.proc_upd_tbl_test('0A00B1','01001','26'); gaussdb=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+------- 0A00B1 | 01001 | 26 (1 row) --匿名块调用PACKAGE的存储过程。 gaussdb=# BEGIN pkg_test.proc_del_tbl_test('0A00B1'); END; / gaussdb=# SELECT * FROM tbl_test; uid | area_id | level -----+---------+------- (0 rows) --删除。 gaussdb=# DROP TABLE tbl_test; gaussdb=# DROP PACKAGE pkg_test;
  • 注意事项 在package specification中声明过的函数或者存储过程,必须在package body中找到定义。 创建存储过程时,仅对CREATE的存储过程或PACKAGE本身加写锁,仅对执行过程中编译、执行会对函数和函数依赖的PACKAGE均加读锁。 在实例化中,无法调用带有commit/rollback的存储过程。 不能在Trigger中调用package函数。 不能在外部SQL中直接使用package当中的变量。 不允许在package外部调用package的私有变量和存储过程。 不支持存储过程不支持的用法,例如,在function中不允许调用commit/rollback,则package的function中同样无法调用commit/rollback。 不支持schema与package同名。 只支持A风格的存储过程和函数定义。 不支持package内有同名变量,包括包内同名参数。 package的全局变量为session级,不同session之间package的变量不共享。 package中调用自治事务的函数,不允许使用package中的cursor变量,以及不允许递归的使用package中cursor变量的函数。 package中不支持声明ref cursor变量。 package默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer'。 被授予CREATE ANY PACKAGE权限的用户,可以在public模式和用户模式下创建PACKAGE。 如果需要创建带有特殊字符的package名,特殊字符中不能含有空格,并且最好设置GUC参数behavior_compat_options="skip_insert_gs_source",否则可能引起报错。 package创建时依赖未定义对象,如参数enable_force_create_obj打开,创建可执行,通过WARNING提示;如参数未打开,package创建不可执行。 创建package函数时,其参数默认值支持含有package内变量,不支持跨package变量。 package中函数复杂调用,如:func(x).a,函数调用返回复合类型,支持跨schema调用,不支持通过database.schema.package.func(x).b的方式调用。 在创建package内的存储过程时,如果存储过程名称为schema.func或package.func形式,只会获取func的名称,schema声明或package声明无效,如果需要默认禁止这种行为,可以设置GUC参数behavior_compat_options='forbid_package_function_with_prefix'。 在创建PACKAGE内的存储过程时,如果存储过程的入参包含伪类型(如:anyelement),不支持调用时传入变长类型的参数。 package内创建的带参数游标,可以跨package进行类型引用(%RowType)和打开使用,有以下限制: 暂不支持通过database.schema.package.cursor的方式调用游标。 当游标定义为函数参数时,需要提前设置参数behavior_compat_options='allow_procedure_compile_check',以支持解析游标的具体类型。 当未设置参数behavior_compat_options='allow_procedure_compile_check'时,cursor%RowType处理成复合类型,即record。设置参数后,支持解析游标的具体类型。
  • 语法格式 CREATE PACKAGE SPECIFICATION语法格式。 CREATE [ OR REPLACE ] PACKAGE [ schema ] package_name [ invoker_rights_clause ] { IS | AS } item_list_1 END [ package_name ]; invoker_rights_clause可以被声明为AUTHID DEFINER或者AUTHID CURRENT_USER,分别为定义者权限和调用者权限。 item_list_1可以为声明的变量或者存储过程以及函数。 END后的package_name可省略(gs_dump生成的sql文件,PACKAGE定义会自动补上END后名称)。 PACKAGE SPECIFICATION(包头)声明了包内的公有变量、函数、异常等,可以被外部函数或者存储过程调用。在PACKAGE SPECIFICATION中只能声明存储过程、函数,不能定义存储过程或者函数。 CREATE PACKAGE BODY语法格式。 CREATE [ OR REPLACE ] PACKAGE BODY [ schema ] package_name { IS | AS } declare_section [ initialize_section ] END [ package_name ]; END后的package_name可省略(gs_dump生成的sql文件,PACKAGE定义会自动补上END后名称)。 PACKAGE BODY(包体内)定义了包的私有变量、函数等。如果变量或者函数没有在PACKAGE SPECIFICATION中声明过,那么这个变量或者函数则为私有变量或者私有函数。 PACKAGE BODY也可以声明实例化部分,用来初始化package,详见示例。
  • 示例 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 BEGIN DBE_OUTPUT.SET_BUFFER_SIZE(50); DBE_OUTPUT.PRINT('hello, '); DBE_OUTPUT.PRINT_LINE('database!');--输出hello, database! END; / -- 预期结果为: hello, database! ANONYMOUS BLOCK EXECUTE -- 测试disable禁用put、put_line、new_line、get_line、get_lines调用,测试put_line不输出 BEGIN dbe_output.disable(); dbe_output.put_line('1'); END; / -- 预期结果为: ANONYMOUS BLOCK EXECUTE -- 测试enable启用put、put_line、new_line、get_line、get_lines调用,测试put_line输出1 BEGIN dbe_output.enable(); dbe_output.put_line('1'); END; / -- 预期结果为: 1 ANONYMOUS BLOCK EXECUTE -- 测试put,输入字符串a放入到缓冲区,末尾不加换行符,a不输出 BEGIN dbe_output.enable(); dbe_output.put('a'); END; / -- 预期结果为: ANONYMOUS BLOCK EXECUTE -- 测试new_line,添加换行,输出a BEGIN dbe_output.enable(); dbe_output.put('a'); dbe_output.new_line; END; / -- 预期结果为: a ANONYMOUS BLOCK EXECUTE -- 测试get_line获取缓冲区数据保存到变量,使用put_line输出 DECLARE line VARCHAR(32672); status INTEGER := 0; BEGIN dbe_output.put_line('hello'); dbe_output.get_line(line, status); dbe_output.put_line('-----------'); dbe_output.put_line(line); dbe_output.put_line(status); END; / -- 预期结果为: ----------- hello 0 ANONYMOUS BLOCK EXECUTE -- 测试get_lines获取缓冲区多行内容,使用put_line输出 DECLARE lines varchar[]; linenum integer; BEGIN dbe_output.put_line('line 1'); dbe_output.put_line('line 2'); dbe_output.put_line('line 3'); linenum := 100; dbe_output.get_lines(lines, linenum); dbe_output.put_line('num: ' || linenum); FOR i IN 1 .. linenum LOOP dbe_output.put_line(lines[i]); END LOOP; END; / -- 预期结果为: num: 3 line 1 line 2 line 3 ANONYMOUS BLOCK EXECUTE 当服务端的字符编码类型server_encoding不为UTF8时,如果数据中存在字符编码属于合法的UTF8编码,DBE_OUTPUT.PUTLINE函数和DBE_OUTPUT.PUT函数在处理该字符编码时会将其按照UTF8编码逻辑进行处理,将其先转换成server_encoding的编码格式后再进行后续操作,这样可能会导致函数返回值不符合预期或发生报错;当开启GUC参数enable_convert_illegal_char后,DBE_OUTPUT.PUTLINE函数和DBE_OUTPUT.PUT函数在处理此类编码的表现与参数关闭时保持一致,特殊字符不会以占位符形式输出,因此不建议用户对含有特殊字符的数据使用DBE_OUTPUT.PUTLINE函数和DBE_OUTPUT.PUT函数。
  • 接口介绍 高级功能包DBE_OUTPUT支持的所有接口请参见表 DBE_OUTPUT。 表1 DBE_OUTPUT 接口名称 描述 DBE_OUTPUT.PRINT_LINE 输出指定的文本,并添加换行符。 DBE_OUTPUT.PRINT 输出指定的文本,不添加换行符。 DBE_OUTPUT.SET_BUFFER_SIZE 设置输出缓冲区的大小,如果不指定则缓冲区最大能容纳20000字节,如果指定小于等于2000字节,则缓冲区允许容纳2000字节。 DBE_OUTPUT.DISABLE 禁用PUT、PUT_LINE、NEW_LINE、GET_LINE、GET_LINES调用,并清空输出缓冲区。 DBE_OUTPUT.ENABLE 开启缓冲区,允许对PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES的调用,设置缓冲区大小。 DBE_OUTPUT.GET_LINE 从缓冲区中以换行符作为分界获取一行数据,获取的数据将不会输出到客户端。 DBE_OUTPUT.GET_LINES 以VARCHAR数组的形式获取缓冲区的指定行数的字符串,被取出的内容将会在缓冲区中清除,不会输出到客户端。 DBE_OUTPUT.NEW_LINE 放置一行在缓冲区末尾,放置行尾标记,空出新的一行。 DBE_OUTPUT.PUT 将输入字符串放入到缓冲区,末尾不加换行符,在匿名块执行结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PUT_LINE 将输入字符串放入到缓冲区,并末尾添加换行符,在匿名块执行结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PRINT_LINE 存储过程PRINT_LINE输出指定的文本,并添加换行符。DBE_OUTPUT.PRINT_LINE函数原型为: 1 2 DBE_OUTPUT.PRINT_LINE ( format IN VARCHAR2); 表2 DBE_OUTPUT.PRINT_LINE接口参数说明 参数 描述 format 输出的文本。 DBE_OUTPUT.PRINT 存储过程PRINT输出指定的文本,不添加换行符。DBE_OUTPUT.PRINT函数原型为: 1 2 DBE_OUTPUT.PRINT ( format IN VARCHAR2); 表3 DBE_OUTPUT.PRINT接口参数说明 参数 描述 format 输出的文本。 DBE_OUTPUT.SET_BUFFER_SIZE 存储过程SET_BUFFER_SIZE设置输出缓冲区的大小,如果不指定的话缓冲区最大只能容纳20000字节。DBE_OUTPUT.SET_BUFFER_SIZE函数原型为: 1 2 DBE_OUTPUT.SET_BUFFER_SIZE ( size IN INTEGER default 20000); 表4 DBE_OUTPUT.SET_BUFFER_SIZE接口参数说明 参数 描述 size 设置输出缓冲区的大小。 DBE_OUTPUT.DISABLE 存储过程DISABLE禁用PUT、PUT_LINE、NEW_LINE、GET_LINE、GET_LINES调用,并清空输出缓冲区。DBE_OUTPUT.DISABLE函数原型为: 1 DBE_OUTPUT.DISABLE;
  • CONFIG_SETTINGS CONFIG_SETTINGS视图显示数据库运行时参数的相关信息,如表1所示。 表1 CONFIG_SETTINGS字段 名称 类型 描述 name text 参数名称。 setting text 参数当前值。 unit text 参数的隐式结构。 category text 参数的逻辑组。 short_desc text 参数的简单描述。 extra_desc text 参数的详细描述。 context text 设置参数值的上下文,包括internal、postmaster、sighup、backend、superuser和user。 vartype text 参数类型,包括bool、enum、integer、real和string。 source text 参数的赋值方式。 min_val text 参数最大值。如果参数类型不是数值型,那么该字段值为null。 max_val text 参数最小值。如果参数类型不是数值型,那么该字段值为null。 enumvals text[] enum类型参数合法值。如果参数类型不是enum型,那么该字段值为null。 boot_val text 数据库启动时参数默认值。 reset_val text 数据库重置时参数默认值。 sourcefile text 设置参数值的配置文件。如果参数不是通过配置文件赋值,那么该字段值为null。 sourceline integer 设置参数值的配置文件的行号。如果参数不是通过配置文件赋值,那么该字段值为null。 父主题: Configuration
  • GS_FILE_STAT GS_FILE_STAT视图通过对数据文件I/O的统计,反映数据的I/O性能,用以发现I/O操作异常等性能问题。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 GS_FILE_STAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds bigint 读物理文件的数目。 phywrts bigint 写物理文件的数目。 phyblkrd bigint 读物理文件块的数目。 phyblkwrt bigint 写物理文件块的数目。 readtim bigint 读文件的总时长,单位微秒。 writetim bigint 写文件的总时长,单位微秒。 avgiotim bigint 读写文件的平均时长,单位微秒。 lstiotim bigint 最后一次读文件时长,单位微秒。 miniotim bigint 读写文件的最小时长,单位微秒。 maxiowtm bigint 读写文件的最大时长,单位微秒。 父主题: 其他系统视图
  • 声明段 要实现嵌入式SQL-C程序和数据库间的数据交互(例如:从SQL-C程序把查询语句中的参数传递给数据库,或者从数据库向嵌入式SQL-C程序传回数据),需要在特殊的标记段里面声明包含此数据的C语言变量,以便预处理器能够识别。 标记段以下面的代码开始: EXEC SQL BEGIN DECLARE SECTION; 以下面的代码结束: EXEC SQL END DECLARE SECTION; 在此之间,必须有常规的C语言变量声明,比如: int x = 4; char foo[16], bar[16]; 标记段代码开始和结束之间声明的宿主变量类型必须为当前支持的数据类型,请参见表1。 可以隐式地创建一个声明段声明变量:EXEC SQL int i = 4。 不在SQL命令里使用的变量可以在特殊的声明段外面声明。 结构体或者联合体的定义也必须在DECLARE段中列出,否则预处理器就无法处理这些类型。 父主题: 宿主变量
  • PGXC_SLICE PGXC_SLICE表是针对range范围分布和list分布创建的系统表,用来记录分布具体信息,当前不支持range interval自动扩展分片,不过在系统表中预留。集中式只能查询该表定义。 表1 PGXC_SLICE字段 名称 类型 描述 relname name 表名或者分片名,通过type区分。 type "char" 't':relname是表名。 's':relname是分片的名字。 strategy "char" 'r':为range分布表。 'l':为list分布表。 后续interval分片会扩展该值。 relid oid 该tuple隶属的分布表oid。 referenceoid oid 所参考分布表的oid,用于slice reference建表语法。 sindex integer 当为list分布表时,表示当前boundary在某个分片内的位置。 interval text[] 预留字段。 transitboundary text[] 预留字段。 transitno integer 预留字段。 nodeoid oid 当relname为分片名时,表示该分片的数据存放在哪一个DN上,nodeoid表示这个DN的oid。 boundaries text[] 当relname为分片名时,对应该分片的边界值。 specified boolean 当前分片对应的DN是否是用户在DDL中显示指定的。 sliceorder integer 用户定义分片的顺序。 父主题: 其他系统表
  • ADM_IND_COLUMNS ADM_IND_COLUMNS视图显示数据库中索引字段的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_IND_COLUMNS字段 名称 类型 描述 index_owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名。 table_owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 column_name name 列名。 column_position smallint 索引中列的位置。 column_length numeric 列的长度。如果列是变长类型,该字段取值为NULL。 char_length numeric 列的最大字节长度。 descend character varying(4) 列是降序(DESC)排序还是升序(ASC)排序。 collated_column_id numeric 暂不支持,值为NULL。 父主题: 其他系统视图
  • 注意事项 当enable_nonsysadmin_execute_direct=off时,只有系统管理员和监控管理员才能执行EXECUTE DIRECT。 为了各个节点上数据的一致性,SQL语句仅支持SELECT,不允许执行事务语句、DDL、DML。 使用此类型语句在指定的DN执行stddev聚集计算时,返回结果集是以三元数组形式返回,如{3, 8, 30},表示count结果为3,sum结果为8,平方和为30。使用此类型语句在指定的DN执行AVG聚集计算时,返回结果集以二元组形式返回,如{4,2},表示count结果为4,sum结果为2。 当指定多个节点时,不支持agg函数,当query中包含agg函数时,会返回“EXECUTE DIRECT on multinode not support agg functions.” 由于CN节点不存储用户表数据,不允许指定CN节点执行用户表上的SELECT查询。 不允许执行嵌套的EXECUTE DIRECT语句,即执行的SQL语句不能同样是EXECUTE DIRECT语句,此时可直接执行最内层EXECUTE DIRECT语句代替。 agg函数查询结果与直接在CN上查询不一致,会返回多个信息,不支持array_avg函数。 参数为nodeoid或者nodeoid list时,仅支持分布式下参数enable_direct_standby_datanodes成功设置时才生效。实现到指定DN节点查询,不支持无效或重复nodeoid,以及不支持nodeoid和nodename混合使用。
共100000条