华为云用户手册

  • 优化建议 VALUES 通过INSERT语句批量插入数据时,建议将多条记录合并入一条语句中执行插入,以提高数据加载性能。 例如: INSERT INTO sections VALUES (30, 'Administration', 31, 1900),(40, 'Development', 35, 2000), (50, 'Development' , 60 , 2001); 如果INSERT多VALUES语句中VALUES的值分布在一个DN上, GaussDB 可以把语句下推到对应DN执行。目前只支持VALUES中值为常量,简单表达式和可下推函数(pg_proc中字段provolatile为'i')。如果表中列带有DEFAULT值,只支持DEFAULT值为常量,简单表达式。单VALUES不能下推单DN的语句,多VALUES同样不支持下推。
  • 示例 插入一条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t1(col1 INT,col2 VARCHAR); --插入数据。 gaussdb=# INSERT INTO test_t1 (col1, col2) VALUES (1,'AB'); --只给表中部分列添加值。 gaussdb=# INSERT INTO test_t1 (col1) VALUES (2); --VALUES关键字左边没有括号,右边括号里面必须严格按照表结构的顺序给所有的字段添加值。 gaussdb=# INSERT INTO test_t1 VALUES (3,'AC'); --查询表。 gaussdb=# SELECT * FROM test_t1; col1 | col2 ------+------ 1 | AB 2 | 3 | AC (3 rows) --删除。 gaussdb=# DROP TABLE test_t1; 插入多条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR); gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR); --插入多条数据。 gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC'); --查询。 gaussdb=# SELECT * FROM test_t2; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --把test_t2中的数据插入到test_t3中。 gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2; --查询。 gaussdb=# SELECT * FROM test_t3; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --删除。 gaussdb=# DROP TABLE test_t2; DROP TABLE test_t3; ON DUPLICATE KEY UPDATE 示例: --建表。 gaussdb=# CREATE TABLE test_t4 (id INT PRIMARY KEY, info VARCHAR(10)); gaussdb=# INSERT INTO test_t4 VALUES (1, 'AA'), (2,'BB'), (3, 'CC'); --使用ON DUPLICATE KEY UPDATE关键字。 gaussdb=# INSERT INTO test_t4 VALUES (3, 'DD'), (4, 'EE') ON DUPLICATE KEY UPDATE info = VALUES(info); --查询。 gaussdb=# SELECT * FROM test_t4; id | info ----+------ 1 | AA 2 | BB 4 | EE 3 | DD --删除。 gaussdb=# DROP TABLE test_t4; ON CONFLICT 示例: -- 建表。 gaussdb=# CREATE DATABASE pg_db dbcompatibility = 'PG'; gaussdb=# \c pg_db pg_db=# CREATE TABLE insert_onconflict_tb1(id INT, a INT PRIMARY KEY, b INT, c VARCHAR2(20)); pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 1, 2, 'aaa'), (2, 2, 0, 'zzz'); -- 查询表。 pg_db=# SELECT * FROM insert_onconflict_tb1; id | a | b | c ----+---+---+----- 1 | 1 | 2 | aaa 2 | 2 | 0 | zzz (2 rows) -- 使用ON CONFLICT关键字。 pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 1, 5, 'ddd'), (2, 2, 1, 'yyy') ON CONFLICT (a) DO UPDATE SET b=excluded.b, c=excluded.c; pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 1, 5, 'ddd'), (2, 2, 1, 'yyy') ON CONFLICT (a) DO NOTHING; -- 查询表。 pg_db=# SELECT * FROM insert_onconflict_tb1; id | a | b | c ----+---+---+----- 1 | 1 | 5 | ddd 2 | 2 | 1 | yyy (2 rows) -- 删除表。 pg_db=# DROP TABLE insert_onconflict_tb1; pg_db=# \c postgres -- 删除pg兼容的库。 gaussdb=# DROP DATABASE pg_db; INSERT IGNORE 示例1:破坏NOT NULL约束 --建表。 gaussdb=# CREATE TABLE test_t5(f1 INT NOT NULL); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t5 VALUES(NULL); WARNING: null value in column "f1" violates not-null constraint DETAIL: Failing row contains (null). INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t5; f1 ---- 0 (1 row) --删除表。 gaussdb=# DROP TABLE test_t5; DROP TABLE 示例2:唯一键冲突 --建表。 gaussdb=# CREATE TABLE test_t6(f1 INT PRIMARY KEY); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_t6_pkey" for table "test_t6" CREATE TABLE --插入数据。 gaussdb=# INSERT INTO test_t6 VALUES(1); INSERT 0 1 --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t6 VALUES(1); INSERT 0 0 --查询表。 gaussdb=# SELECT * FROM test_t6; f1 ---- 1 (1 row) --删除表。 gaussdb=# DROP TABLE test_t6; DROP TABLE 示例3:插入的值没有找到对应的分区 --建表。 gaussdb=# CREATE TABLE test_t7(f1 INT, f2 INT) PARTITION BY LIST(f1) (PARTITION p0 VALUES(1, 4, 7), PARTITION p1 VALUES (2, 5, 8)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t7 VALUES(3, 5); INSERT 0 0 --查询表。 gaussdb=# SELECT * FROM test_t7; f1 | f2 ----+---- (0 rows) --删除表。 gaussdb=# DROP TABLE test_t7; DROP TABLE 示例4:指定分区插入时,插入的数据与指定的分区不匹配 --建表。 gaussdb=# CREATE TABLE test_t8(f1 INT NOT NULL, f2 TEXT, f3 INT) PARTITION BY RANGE(f1)(PARTITION p0 VALUES LESS THAN(5), PARTITION p1 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(15), PARTITION p3 VALUES LESS THAN(MAXVALUE)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t8 PARTITION(p2) VALUES(20, 'Jan', 1); INSERT 0 0 --查询表。 gaussdb=# SELECT * FROM test_t8; f1 | f2 | f3 ----+----+---- (0 rows) --删除表。 gaussdb=# DROP TABLE test_t8; DROP TABLE 示例5:子查询返回多行 --建表。 gaussdb=# CREATE TABLE test_t9(f1 INT, f2 INT); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --插入数据。 gaussdb=# INSERT INTO test_t9 VALUES(1, 1), (2, 2), (3, 3); INSERT 0 3 --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t9 VALUES((SELECT f1 FROM test_t9), 0); WARNING: more than one row returned by a subquery used as an expression CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t9 WHERE f2 = 0; f1 | f2 ----+---- | 0 (1 row) --删除表。 gaussdb=# DROP TABLE test_t9; DROP TABLE 示例6:数据过长 --建表。 gaussdb=# CREATE TABLE test_t10(f1 VARCHAR(5)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t10 VALUES('aaaaaaaaa'); WARNING: value too long for type character varying(5) CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t10; f1 ------- aaaaa (1 row) --删除表。 gaussdb=# DROP TABLE test_t10; DROP TABLE 示例7:时间函数溢出 --建表。 gaussdb=# CREATE TABLE test_t11(f1 DATETIME); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t11 VALUES(date_sub('2000-01-01', INTERVAL 2001 YEAR)); WARNING: Datetime function: datetime field overflow CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t11; f1 ---- (1 row) --删除表。 gaussdb=# DROP TABLE test_t11; DROP TABLE 示例8:被0除 --建表。 gaussdb=# CREATE TABLE test_t12(f1 INT); CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t12 VALUES(1/0); WARNING: division by zero CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t12; f1 ---- (1 row) --删除表。 gaussdb=# DROP TABLE test_t12; DROP TABLE 示例9:值不正确 --建表。 gaussdb=# CREATE TABLE test_t13(f0 INT, f1 FLOAT); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'f0' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用IGNORE关键字。 gaussdb=# INSERT IGNORE INTO test_t13 VALUES(1, '1.11aaa'); WARNING: invalid input syntax for type real: "1.11aaa" LINE 1: INSERT IGNORE INTO test_t13 VALUES(1, '1.11aaa'); ^ CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 gaussdb=# SELECT * FROM test_t13; f0 | f1 ----+------ 1 | 1.11 (1 row) --删除表。 gaussdb=# DROP TABLE test_t13; DROP TABLE 示例10:使用表别名插入一条数据 --建表。 gaussdb=# create table tb1 (va int , vb int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'va' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用表别名 gaussdb=# insert into tb1 as tt(tt.va, tt.vb) values (1,2); INSERT 0 1 gaussdb=# insert into tb1 tt(tt.va, tt.vb) values (3,4); INSERT 0 1 --查询表。 gaussdb=# select * from tb1; va | vb ----+---- 1 | 2 3 | 4 (2 rows) --删除表。 gaussdb=# DROP TABLE tb1; DROP TABLE WITH [ RECURSIVE ] with_query [, ...] 示例: --成绩表。 gaussdb=# CREATE TABLE grade ( sid INT, course VARCHAR(20), score FLOAT ); --学生表。 gaussdb=# CREATE TABLE student( sid INT PRIMARY KEY, class INT, name VARCHAR(50), sex INT CHECK (sex = 0 or sex = 1) ); --插入数据。 gaussdb=# WITH student_sid AS ( INSERT INTO student ( sid, CLASS, NAME, sex ) VALUES ( 1, 1, 'scott', 1 ) RETURNING sid ) INSERT INTO grade ( sid, course, score ) VALUE ( ( SELECT sid FROM student_sid ), 'match', '96' ), ( ( SELECT sid FROM student_sid ), 'chinese', '82' ), ( ( SELECT sid FROM student_sid ), 'english', '86' ); --查询数据。 gaussdb=# SELECT * FROM student; sid | class | name | sex -----+-------+-------+----- 1 | 1 | scott | 1 (1 row) gaussdb=# SELECT * FROM grade; sid | course | score -----+---------+------- 1 | match | 96 1 | chinese | 82 1 | english | 86 (3 rows) --删除。 gaussdb=# DROP TABLE student; gaussdb=# DROP TABLE grade;
  • 注意事项 表的所有者、拥有表INSERT权限的用户或拥有INSERT ANY TABLE权限的用户,可向表中插入数据,三权分立关闭时的系统管理员默认拥有此权限。 如果使用RETURNING子句,用户必须要有该表的SELECT权限。 如果使用ON DUPLICATE KEY UPDATE,用户必须要有该表的INSERT、UPDATE权限,UPDATE子句中列的SELECT权限。 如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 如果使用query子句插入来自查询动态数据脱敏列的数据,插入的结果即为脱敏后的值,无法被还原。 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的INSERT语句中(不包含外表的场景下),对目标表中CHAR和VARCHAR类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
  • 语法格式 1 2 3 4 5 6 7 8 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT [/*+ plan_hint */] [ IGNORE ] INTO table_name [ { [alias_name] [ ( column_name [, ...] ) ] } | { [partition_clause] [ AS alias ] [ ( column_name [, ...] ) ] } ] { DEFAULT VALUES | { VALUES | VALUE } {( { expression | DEFAULT } [, ...] ) }[, ...] | query } [ { ON DUPLICATE KEY UPDATE { NOTHING | { column_name = { expression | DEFAULT } } [, ...] [ WHERE condition ] } } | { [ ON CONFLICT [ conflict_target ] conflict_action ] } ] [ RETURNING {* | {output_expression [ [ AS ] output_name ] }[, ...]} ];
  • 优化说明 通常优化器总会选择最优的执行计划,但是代价估算,尤其是中间结果集的代价估算一般会有比较大的偏差,这种比较大的偏差就可能会导致agg的计算方式出现比较大的偏差,这时候就需要通过best_agg_plan进行agg计算模型的干预。 一般来说,当agg汇聚的收敛度很小时,即结果集的个数在agg之后并没有明显变少(经验上以5倍为临界点),选择redistribute+hashagg执行方式,否则选择hashagg+redistribute+hashagg执行方式。
  • SUMMARY_STATIO_SYS_SEQUEN CES SUMMARY_STATIO_SYS_SEQUENCES视图显示集群内汇聚的命名空间中所有系统序列的I/O状态信息,如表1所示。 表1 SUMMARY_STATIO_SYS_SEQUENCES字段 名称 类型 描述 schemaname name 序列中模式名。 relname name 序列名。 blks_read numeric 从序列中读取的磁盘块数。 blks_hit numeric 序列中缓存命中数。 父主题: Cache/IO
  • sql_use_spacelimit 参数说明:限制单个SQL在单个DN上,触发写盘操作时,所有类型写盘文件的总空间大小,管控的空间包括普通表、临时表以及中间结果集写盘占用的空间。 参数类型:整型 参数单位:kB 取值范围:-1 ~ 2147483647,其中-1表示没有限制。 默认值:-1 设置方式:该参数属于USERSET类型参数,请参考表 GUC参数分类中对应设置方法进行设置。取值如果要带单位,必须为kB、MB、GB,不能为TB。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • ADM_AUDIT_SESSION ADM_AUDIT_SESSION显示所有连接断开数据库的审计信息,GaussDB审计信息主要通过gs_query_audit函数查询,该视图同时存在于PG_CATA LOG 和SYS schema下。仅拥有AUDITADMIN属性的用户才可以查看审计信息。 表1 ADM_AUDIT_SESSION字段 名称 类型 描述 os_username character varying(255) 暂不支持,值为NULL。 username character varying(128) 操作被审计的用户的名称,不是用户id。 userhost character varying(128) 暂不支持,值为NULL。 terminal character varying(255) 暂不支持,值为NULL。 timestamp date 创建审核跟踪条目的日期和时间(用户登录创建条目的日期和时间AUDIT SESSION)。 action_name character varying(28) DBA_AUDIT_TRAIL中的ACTION列中的数字代码对应的动作类型的名称。 说明: GaussDB的action_name字段与ORA数据库审计动作不一致。 logoff_time date 暂不支持,值为NULL。 logoff_lread numeric 暂不支持,值为NULL。 logoff_pread numeric 暂不支持,值为NULL。 logoff_lwrite numeric 暂不支持,值为NULL。 logoff_dlock numeric 暂不支持,值为NULL。 sessionid numeric 暂不支持,值为NULL。 returncode numeric 暂不支持,值为NULL。 client_id character varying(128) 暂不支持,值为NULL。 session_cpu numeric 暂不支持,值为NULL。 extended_timestamp timestamp(6) with time zone 在UTC(协调世界时)时区创建审核跟踪条目的时间戳(创建条目的用户的登录时间戳AUDIT SESSION)。 proxy_sessionid numeric 暂不支持,值为NULL。 global_uid character varying(32) 暂不支持,值为NULL。 instance_number numeric 暂不支持,值为NULL。 os_process character varying(16) 暂不支持,值为NULL。 父主题: 审计
  • 函数和存储过程的区别是什么? 答:函数和存储过程是数据库中常见的两种对象,两者都可以封装一系列的SQL语句,以完成某些特定的操作。两者区别见表1: 表1 函数和存储过程的区别 函数 存储过程 函数的标识符为FUNCTION。 存储过程标识符为PROCEDURE。 函数必须有返回值。 存储过程可以有返回值,也可以没有返回值。 函数可以输入输出参数。 存储过程可以输入输出参数。 函数只可以调用SELECT语句,不可以对表中的数据做出修改。 存储过程可以对表中的数据做出修改,如UPDATE、DELETE和INSERT等。 不可以在函数中调用存储过程。 可以在存储过程中调用函数和存储过程。可以简化一系列复杂语句。 函数适用于需要返回单个值的情况,比如计算某个数据、字符串处理、返回表等。 存储过程适用于需要执行DML操作的情况,比如批量插入、更新、删除数据等。 父主题: FAQ
  • Schema设计建议 实际用户环境中Schema数量不建议超过100个。当数据库中存在大量Schema时,会导致gs_dump等依赖Schema数量的操作性能变慢。 如果该用户不具有sysadmin权限或者不是该Schema的owner,要访问Schema下的对象,需要同时给用户授予Schema的usage权限和对象的相应权限。 如果要在Schema下创建对象,需要授予操作用户该Schema的CREATE权限。 Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。
  • Database设计建议 在实际业务中,根据需要创建新的Database,不建议直接使用集群默认的postgres数据库。 一个集群内,用户自定义的Database数量推荐值为3个,不建议超过10个。用户自定义的Database数量过多会导致升级、备份等运维操作的效率降低。 为了适应全球化的需求,使数据库编码能够存储与表示绝大多数的字符,建议创建Database的时候使用UTF8编码。 创建Database时,需要重点关注字符集编码(ENCODING)和兼容性(DBCOMPATIBILITY)两个配置项。GaussDB支持TD、ORA、MYSQL和PG四种兼容模式,分别表示兼容Teradata语法、Oracle语法、MySQL语法和PostgreSQL语法,不同兼容模式下的语法行为存在一定差异,默认为MYSQL兼容模式。 Database的owner默认拥有该Database下所有对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。
  • STAT_XACT_SYS_TABLES 显示当前节点Schema中系统表的事务状态信息,如表1所示。 表1 STAT_XACT_SYS_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表所在的Schema名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(即没有更新索引列的行数)。 父主题: Object
  • GS_IMCV_STATUS GS_IMCV_STATUS视图显示数据库中IMCV表的状态信息,该视图同时存在于PG_CATALOG和SYS Schema下。 由于HTAP特性不支持分布式,enable_htap在分布式中不可以设置为on,所以查询该系统视图时会显示为空。 表1 GS_IMCV_STATUS字段 名称 类型 描述 reloid oid 表id。 relname name 表名。 dbname name 数据库名。 username name 用户名。 parentoid oid 父表id。 imcvstatus char IMCV表状态: 'I':POPULATE_STAT_INIT初始化。 'L':POPULATE_STAT_LOAD_START开始加载。 'M':POPULATE_STAT_LOAD_META_DONE加载元数据。 'F':POPULATE_STAT_LOAD_FINISH加载完成。 'D':POPULATE_STAT_DROP已删除。 'E':POPULATE_STAT_ERROR异常。 imcvnattr smallint 加载的列数量。 imcvkey int2vector 加载的列数组。 priority smallint 加载的优先级。 rowgroup_num integer 加载的行组数。 cu_num_in_mem integer 内存中的IMCU数量。 cu_mem_size bigint IMCU占用的内存大小,单位字节。 cu_num_in_disk integer 暂不支持,值为0。 cu_disk_size bigint 暂不支持,值为0。 父主题: 其他系统视图
  • SUMMARY_TRANSACTIONS_RUNNING_XA CTS 显示集群中各个CN节点运行事务的信息汇总,如表1所示。 表1 SUMMARY_TRANSACTIONS_RUNNING_XACTS字段 名称 类型 描述 handle integer 事务在GTM对应的句柄。 gxid xid 事务id号。 state tinyint 事务状态(3:prepared或者0:starting)。 node text 节点名称。 xmin xid 节点上当前数据涉及的最小事务号xmin。 vacuum boolean 标志当前事务是否是lazy vacuum事务(lazy vacuum是一种vacuum机制,在需要时进行vacuum)。 true:表示是。 false:表示否。 timeline bigint 标志数据库重启次数。 prepare_xid xid 处于prepared状态的事务的id号,若不在prepared状态,值为0。 pid bigint 事务对应的线程id。 next_xid xid CN传给DN的事务id号。 dbid oid 事务对应的数据库id。 父主题: Transaction
  • comm_cn_dn_logic_conn 参数说明:CN和DN间逻辑连接特性开关,重启集群生效。 不再提供CN和DN之间的逻辑连接支持,为了保持兼容,提供此参数的接口,但此参数会在设置过程中强制改为off。 参数类型:布尔型 参数单位:无 取值范围: on:表示CN和DN之间连接为逻辑链接,使用libcomm组件。 off:表示CN和DN之间连接为物理连接,使用libpq组件。 默认值:off 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数开启时,CN和DN之间会使用逻辑连接用于解决socket数量上限瓶颈,逻辑连接通信库会有性能开销。
  • comm_timer_mode 参数说明:TCP代理通信库timer模式开关,该参数设置是否打印通信层各阶段时间桩。 参数类型:布尔型 参数单位:无 取值范围: on:表示打印通信库详细时间桩日志。 off:表示不打印通信库详细时间桩日志。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:设置为on时,打印日志量较大,会增加额外的overhead并降低数据库性能,建议仅在调试时打开。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_stat_mode 参数说明:TCP代理通信库stat模式开关,该参数设置是否打印通信层的统计信息。 参数类型:布尔型 参数单位:无 取值范围: on:表示打印通信库统计信息日志。 off:表示不打印通信库统计信息日志。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:设置为on时,打印日志量较大,会增加额外的overhead并降低数据库性能,建议仅在调试时打开。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • enable_stateless_pooler_reuse 参数说明:pooler连接池复用切换开关,开启后可对已有的空闲TCP连接进行复用,重启集群生效。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用pooler复用模式。 off:表示关闭pooler复用模式。 默认值:on 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:CN和DN需要同步设置。如果CN设置enable_stateless_pooler_reuse为off,DN设置enable_stateless_pooler_reuse为on会导致集群不能正常通信,因此必须对该参数做CN和DN全局相同的配置,重启集群生效。 设置不当的风险与影响:当该参数关闭时,pooler连接池复用粒度会降低,DN的内存消耗可能会增加。
  • COMM_IPC 参数说明:通信性能问题定位开关,该参数设置是否打印通信各个节点的报文收发情况。 参数类型:布尔型 参数单位:无 取值范围: on:表示打开报文收发统计日志。 off:表示关闭报文收发统计日志。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 set logging_module='on(COMM_IPC)'; --打开 set logging_module='off(COMM_IPC)'; --关闭 show logging_module; --查看设置结果 设置建议:设置为on时,打印日志量较大,会增加额外的overhead并降低数据库性能,建议仅在调试时打开,调试完后及时关闭。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • COMM_PA RAM 参数说明:通信性能问题定位开关,该参数设置是否打印节点通信过程中session参数设置情况。 参数类型:布尔型 参数单位:无 取值范围: on:表示打开连接的session参数设置日志。 off:表示关闭连接的session参数设置日志。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 set logging_module='on(COMM_PARAM)'; --打开 set logging_module='off(COMM_PARAM)'; --关闭 show logging_module; --查看设置结果 设置建议:设置为on时,打印日志量较大,会增加额外的overhead并降低数据库性能,建议仅在调试时打开,调试完后及时关闭。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_client_bind 参数说明:通信库客户端发起连接时是否使用bind绑定指定IP。 参数类型:布尔型 参数单位:无 取值范围: on:表示绑定指定IP。 off:表示不绑定指定IP。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:如果集群某一节点存在多个IP处于同一通信网段时,需设置为on。此时将绑定本地listen_addresses指定的IP发起通信,随机端口号不能重复使用,集群并发数量会受到可用随机端口号数量的限制。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_memory_pool_percent 参数说明:单个DN内TCP代理通信库可使用内存池资源的百分比,用于自适应负载预留通信库通信消耗的内存大小。 参数类型:整型 参数单位:无 取值范围:0 ~ 100 默认值:0 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。此参数需根据实际业务情况做调整,若通信库使用内存小,可设置该参数数值较小,反之设置数值较大。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_quota_size 参数说明:TCP代理通信库最大可连续发送包总大小。 参数类型:整型 参数单位:kB 取值范围:0 ~ 2048000 默认值:1024 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示comm_quota_size为1024kB;带单位取值1MB,表示comm_quota_size为1MB。取值如果要带单位,必须为kB、MB、GB。 设置建议:推荐使用默认值。使用1GE网卡时,建议取较小值,推荐设置为20kB~40kB。 设置不当的风险与影响:设置过小可能会导致TCP通信库收发阶段等待quota。
  • comm_usable_memory 参数说明:单个DN内TCP代理通信库缓存最大可使用内存。 参数类型:整型 参数单位:kB 取值范围:102400 ~ 1073741823 默认值:4096000(即4000MB) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值102400,表示comm_usable_memory为102400kB;带单位取值100MB,表示comm_usable_memory为100MB。取值如果要带单位,必须为kB、MB、GB。 设置建议:推荐使用默认值。此参数需根据环境内存及部署方式具体配置。 设置不当的风险与影响:参数设置过大会造成OOM,过小会降低TCP代理通信库性能。
  • comm_memory_pool 参数说明:单个DN内TCP代理通信库可使用内存池资源的容量大小。 参数类型:整型 参数单位:kB 取值范围:102400 ~ 1073741823 默认值:2048000(即2000MB) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值102400,表示comm_memory_pool为102400kB;带单位取值100MB,表示comm_memory_pool为100MB。取值如果要带单位,必须为kB、MB、GB。 设置建议:推荐使用默认值。此参数需根据实际业务情况做调整,若通信库使用内存小,可设置该参数数值较小,反之设置数值较大。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_no_delay 参数说明:是否使用通信库连接的NO_DELAY属性。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用NO_DELAY属性。 off:表示不使用NO_DELAY属性。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:总体上,时延敏感型业务建议打开;吞吐要求高时,建议关闭。此外,当集群出现因每秒接收数据包过多导致的丢包时,需设置为off,以便小包合并成大包发送,减少数据包总数。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_debug_mode 参数说明:TCP代理通信库debug模式开关,该参数设置是否打印通信层详细日志。 参数类型:布尔型 参数单位:无 取值范围: on:表示打印通信库详细debug日志。 off:表示不打印通信库详细debug日志。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:设置为on时,打印日志量较大,会增加额外的overhead并降低数据库性能,建议仅在调试时打开。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_ackchk_time 参数说明:无数据包接收情况下,该参数设置通信库服务端主动ACK触发时长。 参数类型:整型 参数单位:ms(毫秒) 取值范围:0 ~ 20000。取值为0表示关闭此功能。 默认值:2000 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值60,表示comm_ackchk_time为60ms;带单位取值1min,表示comm_ackchk_time为1min。取值如果要带单位,必须为ms、s、min、h、d。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • comm_sctp_port 参数说明:TCP代理通信库使用的TCP协议侦听端口,负责侦听数据报文通道。 参数类型:整型 参数单位:无 取值范围:0 ~ 65535 默认值:25110(实际值为GUC参数port值+2,取决于用户配置) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:不建议用户配置,集群安装时会自动下发相关配置。 设置不当的风险与影响:集群部署时会自动分配此端口号,请不要轻易修改此参数,如端口号配置不正确会导致数据库通信失败。
  • tcp_syn_retries 参数说明:在支持TCP_SYNCNT套接字选项的操作系统上,设置GaussDB连接其他内部节点时,建立连接三次握手阶段SYN包发送失败而重传的次数。 参数类型:整型 参数单位:无 取值范围:0-127,其中0表示跟随操作系统设置。 默认值:0 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:保持默认。 设置不当的风险与影响:该参数设置过小(大于0)时,网络波动情况下,会导致SYN重传次数较少,若重传时长少于网络恢复时长,会导致建连失败;该参数设置过大时,网络不通情况下,会导致SYN重传次数较多,重传时间较长,造成整体报错的时间变长。 如果操作系统不支持TCP_SYNCNT选项,这个参数的值将不生效,默认为0。 在通过Unix域套接字进行连接的操作系统上,这个参数将被忽略。
共100000条
提示

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