华为云用户手册

  • 非法编码处理方案 当用户的数据库中存在非法编码入库的数据,想要导出时不进行报错,推荐以下两种方案。 首选方案:保持客户端编码与服务端编码保持一致后,将数据以数据库服务端编码进行导出,不进行转码。 查询数据库服务端编码。 gaussdb=# SHOW server_encoding; 查询数据库客户端编码。 gaussdb=# SHOW client_encoding; 设置客户端编码与服务端编码一致。 gaussdb=# SET client_encoding = '{server_encoding}'; 执行COPY将数据以标准的 CS V格式导出到文件中。 gaussdb=# COPY test_copy TO '/data/test_copy.csv' CSV; 次选方案:需要依赖数据库内核的转码能力,并对非法编码的字节通过占位符('?')进行替换,导出的数据内容会发生变化。 查询数据库服务端编码。 gaussdb=# SHOW server_encoding; 设置数据库客户端编码为目标编码。 gaussdb=# SET client_encoding = {target_encoding}; 依赖内核转码能力进行导出,将非法编码的字节进行替换。 gaussdb=# COPY test_copy TO '/data/test_copy.csv' CSV COMPATIBLE_ILLEGAL_CHARS;
  • 示例 --建表并插入数 gaussdb=# CREATE TABLE test1(c11 INT, c12 VARCHAR); gaussdb=# INSERT INTO test1 VALUES (1,'a'),(2,'b'),(4,'d'); gaussdb=# CREATE TABLE test2(c21 INT, c22 VARCHAR); gaussdb=# INSERT INTO test2 VALUES (1,'a'),(3,'c'); UNION gaussdb=# SELECT * FROM test1 UNION SELECT * FROM test2; c11 | c12 -----+----- 1 | a 4 | d 2 | b 3 | c (4 rows) UNION ALL gaussdb=# SELECT * FROM test1 UNION ALL SELECT * FROM test2; c11 | c12 -----+----- 1 | a 2 | b 4 | d 1 | a 3 | c (5 rows) INTERSECT gaussdb=# SELECT * FROM test1 INTERSECT SELECT * FROM test2; c11 | c12 -----+----- 1 | a (1 row) MINUS gaussdb=# SELECT * FROM test1 MINUS SELECT * FROM test2; c11 | c12 -----+----- 4 | d 2 | b (2 rows) -- 删除。 gaussdb=# DROP TABLE test1,test2;
  • PG_VARIABLE_INFO PG_VARIABLE_INFO视图用于查询集群中当前节点的xid、oid的状态。具体字段信息如表1所示。 表1 PG_VARIABLE_INFO字段 名称 类型 描述 node_name text 节点名称。 next_oid oid 该节点下一次生成的oid。 next_xid xid 该节点下一次生成的事务号。 oldest_xid xid 该节点最旧的事务号。 xid_vac_limit xid 强制autovacuum的临界点。 oldest_xid_db oid 该节点datafrozenxid最小的数据库oid。 last_extend_csn_logpage xid 最后一次扩展csnlog的页面号。 start_extend_csn_logpage xid csnlog扩展的起始页面号。 next_commit_seqno xid 该节点下次生成的csn号。 latest_completed_xid xid 该节点提交或者回滚后节点上的最新事务号。 startup_max_xid xid 该节点关机前的最后一个事务号。 父主题: 其他系统视图
  • connection_reject_nodes 参数说明:用于表示CN/DN中拒绝接受其他CN连接的黑名单,用逗号进行分隔,例如'cn_5001,cn_5002'。当黑名单中的CN(如cn_5001)连接至本节点时,会拒绝接受其连接,并报错“Reject cn_5001 connection”。 参数类型:字符串 参数单位:无 取值范围:由若干个节点名称和英文逗号组成的字符串。 默认值:"" 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:当设置为节点名时,其他节点会拒接接受其连接,造成连接报错。
  • unix_socket_permissions 参数说明:设置Unix域套接字的访问权限。 Unix域套接字使用普通的Unix文件系统权限集。这个参数的值应该是数值的格式(chmod和umask命令可接受的格式)。如果使用自定义的八进制格式,数字必须以0开头。 参数类型:整型 参数单位:无 取值范围:0000 ~ 0777 在Linux中,文档具有十个属性,其中第一个属性为文档类型,后面九个为权限属性,分别为Owner,Group及Others这三个组别的read、write、execute属性。 文档的权限属性分别简写为r,w,x,这九个属性三个为一组,也可以使用数字来表示文档的权限,对照表如下: r:4 w: 2 x:1 -:0 同一组(owner/group/others)的三个属性是累加的。 例如,-rwxrwx---表示这个文档的权限为: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others = --- = 0+0+0 = 0 所以其权限为0770。 默认值:0700 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:建议设置为0770(只有当前连接数据库的用户和同组的人可以访问)或者0700(只有当前连接数据库的用户自己可以访问,同组或者其他人都没有权限)。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • extip_reserved_connections 参数说明:为用户在listen_address_ext配置的扩展IP上进行的普通gsql业务连接预留的最少连接数。该参数和max_connections参数配合使用,对应业务连接的最大连接数等于max_connections + service_reserved_connections。 该参数仅在为分布式DN配置了listen_address_ext的具体IP地址时有效。 参数类型:整型 参数单位:无 取值范围:最小值为0,最大值为MIN(262143, max_connections),max_connections的计算方法见max_connections。 默认值:5 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • check_disconnect_query 参数说明:该参数控制的是,当客户端异常断连(如JDBC触发socketTimeout、libpq触发rwtimeout且关闭连接、运行业务过程中客户端进程终止等)后, GaussDB 服务端语句是否终止执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示当客户端异常断连后,GaussDB服务端终止运行对应的语句。 off:表示当客户端异常断连后,GaussDB服务端不会终止运行对应的语句。 默认值:on 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • unix_socket_directory 参数说明:设置GaussDB服务器侦听客户端连接的Unix域套接字目录,仅sysadmin用户可以访问。 参数类型:字符串 参数单位:无 取值范围:合法目录路径。 该参数的取值长度限制于操作系统的最大目录路径长度,Linux系统下,套接字路径名(套接字目录与套接字文件名拼接而成)长度不得超过107bytes,目录最长不得超过92bytes。超过该限制将会导致Unix-domain socket path "xxx" is too long的问题。 默认值:""(实际值由安装时配置文件中tmpMppdbPath指定) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:若误设置出错(包括长度超过限制、非法目录等),会影响进程正常拉起,可以通过检索cm_agent路径下system_call日志定界。
  • application_name 参数说明:当前连接请求当中,所使用的客户端名称。 参数类型:字符串 参数单位:无 取值范围:合法的客户端名称,实际查询结果取决于查询所用的客户端或用户设置。 在备机请求主机进行日志复制时,如果该参数非空串,那么会被用来作为备机在主机上的流复制槽名字。此时,如果该参数长度超过61个字节,那么流复制槽名字只会截取使用前61个字节的字符。 默认值:""(连接到后端的应用名,以实际安装为准)。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。但是需要注意的是,客户端连接后该参数会被设为客户端名称,且设置为客户端级别,所以只有设置会话级别的参数会生效,其他方式都由于级别低于客户端级别而不会生效。 设置建议:推荐使用默认值。 设置不当的风险与影响:数据库依赖于application_name标识部分内部进程,当用户设置了与内部进程同名的application_name时,可能产生非预期的行为。
  • unix_socket_group 参数说明:设置Unix域套接字的所属组(套接字的所属用户总是启动服务器的用户)。可以与选项unix_socket_permissions一起用于对套接字进行访问控制。 参数类型:字符串 参数单位:无 取值范围:系统中已有的用户组。 默认值:"",表示当前用户的缺省组。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • max_inner_tool_connections 参数说明:允许和数据库连接的工具的最大并发连接数。此参数会影响GaussDB的工具连接并发能力。 参数类型:整型 参数单位:无 取值范围:最小值为1,最大值的计算公式为“262143 - job_queue_processes - autovacuum_max_workers - max_connections - max_concurrent_autonomous_transactions - AUXILIARY_BACKENDS - AV_LAUNCHER_PROCS - min(max(max_connections/4,64),1024)”,job_queue_processes、autovacuum_max_workers、max_connections和max_concurrent_autonomous_transactions的值取决于对应GUC参数的设置,AUXILIARY_BACKENDS为预留辅助线程数固定为20,AV_LAUNCHER_PROCS为预留autovacuum的launcher线程数固定为2。 默认值:50。如果该默认值超过内核支持的最大值(在执行gs_initdb的时候判断),系统会提示错误。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:数据库主节点中此参数建议保持默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • service_reserved_connections 参数说明:为后台运维用户(带有persistence属性)预留的最少连接数,不建议设置过大。该参数和max_connections参数配合使用,运维用户的最大连接数等于max_connections + service_reserved_connections。 参数类型:整型 参数单位:无 取值范围:0 ~ 262143 默认值:10 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果设置过小,会导致在max_connections占满的情况下,运维用户(带有persistence属性)无法连接数据库,作业无法正常执行。如果设置过大,则会有过多的空闲资源。
  • local_bind_address 参数说明:声明当前节点连接集群其他节点绑定的本地IP地址。 参数类型:字符串 参数单位:无 取值范围:IPv4或IPv6格式地址,不支持多IP设置。 默认值: 集群安装好后,根据public_cloud.conf配置文件中不同实例的IP地址配置不同默认值。CN/DN的默认参数值为:“data.net网卡对应的IP地址”。 public_cloud.conf文件保存的网卡信息,包括:mgr.net(管理网卡)、data.net(数据网卡)、virtual.net(虚拟网卡)。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数由安装时的配置文件指定,请勿轻易修改,否则修改后会影响数据库正常通信。
  • port 参数说明:GaussDB服务侦听的TCP端口号。 参数类型:整型 参数单位:无 取值范围:1 ~ 65535 设置端口号时,请设置一个未被占用的端口号。设置多个实例的端口号,不可冲突。 1 ~ 1023为操作系统保留端口号,请不要使用。 通过配置文件安装集群时,配置文件中的端口号需要注意通信矩阵预留端口。如:DN还需保留dataPortBase+1作为内部工具使用端口。故集群安装阶段,port最大值为:CN可设置65532,DN可设置65529,GTM可设置65534,同时需要保证端口号不冲突。 默认值:5432(实际值由安装时的配置文件指定) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数由安装时的配置文件指定,请勿轻易修改,否则修改后会影响数据库正常通信。
  • sysadmin_reserved_connections 参数说明:为管理员用户预留的最少连接数,不建议设置过大。该参数和max_connections参数配合使用,管理员用户的最大连接数等于max_connections + sysadmin_reserved_connections。 当启用线程池功能时,若线程池占满将形成处理瓶颈,导致管理员预留连接无法正常建立;作为逃生手段,此时可使用gsql通过主端口+1端口号连入,清理无用会话,即可正常连入。 当管理员预留连接数全部被使用后,新建连接将失败,此时只能通过重启集群来恢复,所以需要谨慎使用该预留连接数。 参数类型:整型 参数单位:无 取值范围:最小值为0,最大值为MIN(262143, max_connections),max_connections的计算方法见max_connections。 默认值:3 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • light_comm 参数说明:设置服务器是否使用轻量通信方式。 该参数指定服务器是否使用基于轻量锁和非阻塞socket的通信方式。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用轻量通信方式。 off:表示不使用轻量通信方式。 默认值:off 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • listen_addresses 参数说明:声明服务器侦听客户端的TCP/IP地址。 该参数指定GaussDB服务器使用哪些IP地址进行侦听,如IPv4或IPv6。服务器主机上可能存在多个网卡,每个网卡可以绑定多个IP地址,该参数用来控制GaussDB绑定在哪一个或者哪几个IP地址上。而客户端则可以通过该参数中指定的IP地址来连接GaussDB或者给GaussDB发送请求。 参数类型:字符串 参数单位:无 取值范围: 主机名或IP地址,多个值之间用英文逗号分隔。 “*”或“0.0.0.0”或“::”表示侦听所有IP地址。配置侦听所有IP地址存在安全风险,不推荐用户使用。 置空则服务器不会侦听任何IP地址,这种情况下,只有Unix域套接字可以用于连接数据库。 默认值: 集群安装好后,根据public_cloud.conf配置文件中不同实例的IP地址配置不同默认值。CN的默认参数值为:“localhost,mgr.net网卡对应的IP地址,data.net网卡对应的IP地址,virtual.net网卡对应的IP地址”;DN的默认参数值为:“data.net网卡对应的IP”。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 localhost表示只允许进行本地“回环”连接。 public_cloud.conf文件保存的网卡信息,包括:mgr.net(管理网卡)、data.net(数据网卡)、virtual.net(虚拟网卡)。 使用IPv6地址时,若IP为fe80地址块,则配置时需要追加'%zone index'信息。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • listen_address_ext 参数说明:声明服务器侦听客户端的扩展TCP/IP地址。该参数指定GaussDB服务器使用哪些IP地址作为扩展侦听IP。 参数类型:字符串 参数单位:无 取值范围:IPv4或者IPv6格式地址,不支持多IP设置。 默认值:“localhost”。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:在BMS部署形态下,集群安装启动时自动配置。不建议用户手动配置使用。 listen_address_ext参数配置涉及整个集群扩展IP的网络拓扑关系和配置,所以set/reload都必须通过OM工具实现。 listen_address_ext是用于扩展具体IP地址的网络通道,若设置为“*”,“0.0.0.0”,“localhost”,“127.0.0.1”,“::-1”则不生效,建议此类地址设置在listen_addresses参数中。 listen_address_ext用于配置分布式DN实例,CN配置后不生效。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • 示例 支持在PL/SQL的存储过程内使用COMMIT/ROLLBACK,后续示例依赖此用例。 gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE() AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(COL1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / gaussdb=# call TRANSACTION_EXAMPLE(); transaction_example --------------------- (1 row) 支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK。 支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK。 支持DDL在COMMIT/ROLLBACK后的提交/回滚。 gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK() AS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT, B INT); INSERT INTO TEST_COMMIT SELECT 1, 1; COMMIT; CREATE TABLE TEST_ROLLBACK(A INT, B INT); RAISE EXCEPTION 'RAISE EXCEPTION AFTER COMMIT'; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 2, 2; ROLLBACK; END; / gaussdb=# call TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); NOTICE: table "test_commit" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS TEST_COMMIT" PL/pgSQL function test_commit_insert_exception_rollback() line 3 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 4 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_ROLLBACK(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 7 at SQL statement test_commit_insert_exception_rollback --------------------------------------- (1 row) 支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过BEGIN/START/END等开启控制的外部事务。 gaussdb=# BEGIN; -- TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK定义见示例2 CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 4 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_ROLLBACK(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 7 at SQL statement test_commit_insert_exception_rollback --------------------------------------- (1 row) gaussdb=# END; COMMIT 支持多数PL/SQL的上下文和语句内调用COMMIT/ROLLBACK,包括常用的IF/FOR/CURSOR LOOP/WHILE。 gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT2() IS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT); FOR I IN REVERSE 3..0 LOOP INSERT INTO TEST_COMMIT SELECT I; COMMIT; END LOOP; FOR I IN REVERSE 2..4 LOOP UPDATE TEST_COMMIT SET A=I; COMMIT; END LOOP; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 4; COMMIT; END; / gaussdb=# call TEST_COMMIT2(); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT)" PL/pgSQL function test_commit2() line 4 at SQL statement test_commit2 -------------- (1 row) 支持存储过程内GUC参数的回滚提交。 gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- off (1 row) gaussdb=# CREATE OR REPLACE PROCEDURE GUC_ROLLBACK() AS BEGIN SET enable_force_vector_engine = on; COMMIT; SET explain_perf_mode TO pretty; ROLLBACK; END; / gaussdb=# call GUC_ROLLBACK(); guc_rollback -------------- (1 row) gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- on (1 row) gaussdb=# SET enable_force_vector_engine = off;
  • 限制场景 在存储过程使用commit/rollback有以下限制场景: 不允许Trigger的存储过程包含COMMIT/ROLLBACK语句、或调用带有COMMIT/ROLLBACK语句的存储过程。 gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# INSERT INTO EXAMPLE1(col1) VALUES (1); gaussdb=# CREATE OR REPLACE FUNCTION FUNCTION_TRI_EXAMPLE2() RETURN TRIGGER AS EXP INT; BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; SELECT COUNT(*) FROM EXAMPLE1 INTO EXP; END; / gaussdb=# CREATE TRIGGER TRIGGER_EXAMPLE AFTER DELETE ON EXAMPLE1 FOR EACH ROW EXECUTE PROCEDURE FUNCTION_TRI_EXAMPLE2(); CREATE TRIGGER gaussdb=# DELETE FROM EXAMPLE1; ERROR: Can not commit/rollback if it's atomic is true: can not use commit rollback in Complex SQL CONTEXT: PL/pgSQL function function_tri_example2() line 7 at COMMIT 不支持带有IMMUTABLE以及SHIPPABLE的存储过程调用commit/rollback,或调用带有commit/rollback语句的存储过程。 gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE1() IMMUTABLE AS EXP INT; BEGIN FOR i IN 0..20 LOOP SELECT COUNT(*) FROM EXAMPLE1 INTO EXP; IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / gaussdb=# CALL TRANSACTION_EXAMPLE1(); ERROR: Can not commit/rollback if it's atomic is true: commit/rollback/savepoint is not allowed in a non-volatile function CONTEXT: PL/pgSQL function transaction_example1() line 7 at COMMIT 不支持存储过程中任何变量的提交,包括存储过程内声明的变量或者传入的参数。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE2(EXP_OUT OUT INT) AS EXP INT; BEGIN EXP_OUT := 0; COMMIT; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP); EXP_OUT := 1; ROLLBACK; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP); END; / gaussdb=# CALL TRANSACTION_EXAMPLE2(100); EXP IS: EXP IS: exp_out --------- 1 (1 row) 不支持出现在SQL中的调用(除了Select Procedure)。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE3() AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN EXECUTE IMMEDIATE 'COMMIT'; ELSE EXECUTE IMMEDIATE 'ROLLBACK'; END IF; END LOOP; END; / gaussdb=# CALL TRANSACTION_EXAMPLE3(); ERROR: cannot call transaction statements in EXECUTE IMMEDIATE statement. CONTEXT: PL/pgSQL function transaction_example3() line 6 at EXECUTE statement 存储过程头带有GUC参数设置的不允许调用commit/rollback语句。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE4() SET ARRAY_NULLS TO "ON" AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / gaussdb=# CALL TRANSACTION_EXAMPLE4(); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure with GUC setting in option clause is not supported CONTEXT: PL/pgSQL function transaction_example4() line 6 at COMMIT 游标open的对象不允许为带有commit/rollback语句的存储过程。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE5(INTIN IN INT, INTOUT OUT INT) AS BEGIN INTOUT := INTIN + 1; COMMIT; END; / gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE6() AS CURSOR CURSOR1(EXPIN INT) IS SELECT TRANSACTION_EXAMPLE5(EXPIN); INTEXP INT; BEGIN FOR i IN 0..20 LOOP OPEN CURSOR1(i); FETCH CURSOR1 INTO INTEXP; INSERT INTO EXAMPLE1(COL1) VALUES (INTEXP); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; CLOSE CURSOR1; END LOOP; END; / gaussdb=# CALL TRANSACTION_EXAMPLE6(); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure used as cursor is not supported CONTEXT: PL/pgSQL function transaction_example5(integer) line 4 at COMMIT referenced column: transaction_example5 PL/pgSQL function transaction_example6() line 8 at FETCH 不支持CURSOR/EXECUTE语句,以及各类表达式内调用COMMIT/ROLLBACK。 gaussdb=# CREATE OR REPLACE PROCEDURE exec_func1() AS BEGIN CREATE TABLE TEST_exec(A INT); COMMIT; END; / gaussdb=# CREATE OR REPLACE PROCEDURE exec_func2() AS BEGIN EXECUTE exec_func1(); COMMIT; END; / gaussdb=# CALL exec_func2(); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_exec(A INT)" PL/pgSQL function exec_func1() line 3 at SQL statement PL/pgSQL function exec_func2() line 3 at EXECUTE statement ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure used as a expression is not supported CONTEXT: PL/pgSQL function exec_func1() line 4 at COMMIT PL/pgSQL function exec_func2() line 3 at EXECUTE statement 不支持存储过程返回值与表达式计算。 gaussdb=# CREATE OR REPLACE PROCEDURE exec_func3(RET_NUM OUT INT) AS BEGIN RET_NUM := 1+1; COMMIT; END; / gaussdb=# CREATE OR REPLACE PROCEDURE exec_func4(ADD_NUM IN INT) AS SUM_NUM INT; BEGIN SUM_NUM := ADD_NUM + exec_func3(); COMMIT; END; / gaussdb=# CALL exec_func4(1); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure used as a expression is not supported CONTEXT: PL/pgSQL function exec_func3() line 4 at COMMIT PL/pgSQL function exec_func4(integer) line 4 at assignment 不支持存储过程中释放存储过程外部定义的保存点。 gaussdb=# CREATE OR REPLACE PROCEDURE STP_SAVEPOINT_EXAMPLE3() AS BEGIN INSERT INTO EXAMPLE1 VALUES(2); RELEASE SAVEPOINT s1; -- 释放存储过程外部定义的保存点 INSERT INTO EXAMPLE1 VALUES(3); END; / gaussdb=# BEGIN; INSERT INTO EXAMPLE1 VALUES(1); SAVEPOINT s1; CALL STP_SAVEPOINT_EXAMPLE3(); COMMIT; ERROR: cannot release outer savepoint CONTEXT: PL/pgSQL function stp_savepoint_example3() line 4 at RELEASE SAVEPOINT
  • PG_SHDESCRIPTION PG_SHDESCRIPTION系统表为共享数据库对象存储可选的注释。可以使用COMMENT命令操作注释的内容,使用\d命令查看注释内容。 PG_DESCRIPTION提供了类似的功能,它记录了单个数据库中对象的注释。 PG_SHDESCRIPTION是在集群的所有数据库之间共享的,即每个集群只有一个,而不是每个数据库一个。 表1 PG_SHDESCRIPTION字段 名称 类型 引用 描述 objoid oid 任意OID属性 所描述的对象的OID。 classoid oid PG_CLASS.oid 该对象出现的系统表的OID。 description text - 该对象的描述信息。 父主题: 其他系统表
  • 存储层数据倾斜 GaussDB数据库 中,数据分布存储在各个DN上,通过分布式执行提高查询的效率。但是,如果数据分布存在倾斜,则会导致分布式执行某些DN成为瓶颈,影响查询性能。这种情况通常是由于分布列选择不合理,可以通过调整分布列的方式解决。 示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 gaussdb=# explain performance select count(*) from inventory; 5 --Seq Scan on lmz.inventory dn_6001_6002 (actual time=0.444..83.127 rows=42000000 loops=1) dn_6003_6004 (actual time=0.512..63.554 rows=27000000 loops=1) dn_6005_6006 (actual time=0.722..99.033 rows=45000000 loops=1) dn_6007_6008 (actual time=0.529..100.379 rows=51000000 loops=1) dn_6009_6010 (actual time=0.382..71.341 rows=36000000 loops=1) dn_6011_6012 (actual time=0.547..100.274 rows=51000000 loops=1) dn_6013_6014 (actual time=0.596..118.289 rows=60000000 loops=1) dn_6015_6016 (actual time=1.057..132.346 rows=63000000 loops=1) dn_6017_6018 (actual time=0.940..110.310 rows=54000000 loops=1) dn_6019_6020 (actual time=0.231..41.198 rows=21000000 loops=1) dn_6021_6022 (actual time=0.927..114.538 rows=54000000 loops=1) dn_6023_6024 (actual time=0.637..118.385 rows=60000000 loops=1) dn_6025_6026 (actual time=0.288..32.240 rows=15000000 loops=1) dn_6027_6028 (actual time=0.566..118.096 rows=60000000 loops=1) dn_6029_6030 (actual time=0.423..82.913 rows=42000000 loops=1) dn_6031_6032 (actual time=0.395..78.103 rows=39000000 loops=1) dn_6033_6034 (actual time=0.376..51.052 rows=24000000 loops=1) dn_6035_6036 (actual time=0.569..79.463 rows=39000000 loops=1) 在performance信息中,可以看到inventory表各DN的scan行数,发现各DN的行数差距较大,最大的为63000000,最小的只有15000000,差了4倍。这个差距对于数据扫描的性能影响可以接受,但如果上层有join算子,则影响较大。 通常,数据表在各DN上是hash分布的,因此分布列的选择很重要。通过table_skewness()来查看上述inventory表在各DN的数据分布倾斜,查询结果如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 gaussdb=# select table_skewness('inventory'); table_skewness ------------------------------------------ ("dn_6015_6016 ",63000000,8.046%) ("dn_6013_6014 ",60000000,7.663%) ("dn_6023_6024 ",60000000,7.663%) ("dn_6027_6028 ",60000000,7.663%) ("dn_6017_6018 ",54000000,6.897%) ("dn_6021_6022 ",54000000,6.897%) ("dn_6007_6008 ",51000000,6.513%) ("dn_6011_6012 ",51000000,6.513%) ("dn_6005_6006 ",45000000,5.747%) ("dn_6001_6002 ",42000000,5.364%) ("dn_6029_6030 ",42000000,5.364%) ("dn_6031_6032 ",39000000,4.981%) ("dn_6035_6036 ",39000000,4.981%) ("dn_6009_6010 ",36000000,4.598%) ("dn_6003_6004 ",27000000,3.448%) ("dn_6033_6034 ",24000000,3.065%) ("dn_6019_6020 ",21000000,2.682%) ("dn_6025_6026 ",15000000,1.916%) (18 rows) 通过查询建表定义,可以发现,目前该表是以inv_date_sk作为分布列的,导致存在倾斜。通过查看各列的数据分布情况,建表时改为inv_item_sk作为分布列,则倾斜情况分布如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 gaussdb=# select table_skewness('inventory'); table_skewness ------------------------------------------ ("dn_6001_6002 ",43934200,5.611%) ("dn_6007_6008 ",43829420,5.598%) ("dn_6003_6004 ",43781960,5.592%) ("dn_6031_6032 ",43773880,5.591%) ("dn_6033_6034 ",43763280,5.589%) ("dn_6011_6012 ",43683600,5.579%) ("dn_6013_6014 ",43551660,5.562%) ("dn_6027_6028 ",43546340,5.561%) ("dn_6009_6010 ",43508700,5.557%) ("dn_6023_6024 ",43484540,5.554%) ("dn_6019_6020 ",43466800,5.551%) ("dn_6021_6022 ",43458500,5.550%) ("dn_6017_6018 ",43448040,5.549%) ("dn_6015_6016 ",43247700,5.523%) ("dn_6005_6006 ",43200240,5.517%) ("dn_6029_6030 ",43181360,5.515%) ("dn_6025_6026 ",43179700,5.515%) ("dn_6035_6036 ",42960080,5.487%) (18 rows) 数据分布倾斜的问题得到解决。 除了table_skewness()视图外,当前版本还提供了table_distribution函数和PGXC_GET_TABLE_SKEWNESS视图,可以更加高效地查询各表的数据倾斜情况。
  • PG_EXTENSION_DATA_SOURCE PG_EXTENSION_DATA_SOURCE系统表存储外部数据源对象的信息。一个外部数据源对象(Data Source)包含了外部数据库的一些密码编码等信息,主要配合Extension Connector使用,默认仅系统管理员可访问此表。由于规格变更,当前版本已经不再支持本特性,请不要使用。 表1 PG_EXTENSION_DATA_SOURCE字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 srcname name - 外部数据源对象的名称。 srcowner oid 12.2.11.1 PG_AUTHID.oid 外部数据源对象的所有者。 srctype text - 外部数据源对象的类型,缺省为空。 srcversion text - 外部数据源对象的版本,缺省为空。 srcacl aclitem[] - 访问权限。 srcoptions text[] - 外部数据源对象的指定选项,使用“keyword=value”格式的字符串。 父主题: 其他系统表
  • ssl_cert_expire_alert_threshold 参数说明:ssl证书过期告警时间。证书过期时间少于该时间时,上报证书即将过期告警。 参数类型:整型 参数单位:(d)天 取值范围:7 ~ 180 默认值:90 设置方式:该参数为CM参数,参数修改请参考表2中方式一进行设置,修改后需要重启cm_server才能生效。 设置建议:按照实际需要进行调整。 设置不当的风险与影响:设置过小可能会导致告警不及时。
  • ddb_log_level 参数说明:设置ddb日志级别。 参数类型:字符串 参数单位:无 取值范围: “NONE”:表示关闭日志打印,不能与以下日志级别混合使用。 “RUN_ERR|RUN_WAR|RUN_INF|DEBUG_ERR|DEBUG_WAR|DEBUG_INF|TRACE|PROFILE|OPER”:表示开启日志,日志级别可以从上述字符串中选取字符串并使用竖线组合使用,不能配置空字符串。 默认值:"RUN_ERR|RUN_WAR|DEBUG_ERR|OPER|RUN_INF|PROFILE" 设置方式:该参数为CM参数,参数修改请参考表2中方式一、方式二进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • enable_synclist_single_inst 参数说明:控制是否开启降副本降至一主零备功能。开启后降副本会降至一主零备,参数设置错误时,按默认值处理。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启降副本降至一主零备功能。 off:表示关闭降副本降至一主零备功能。 默认值:off 设置方式:该参数为CM参数,参数修改请参考表2中方式一、方式二进行设置。 设置建议:推荐使用默认值。如果需要调整请联系华为技术工程师提供技术支持。 设置不当的风险与影响:打开此参数时,在所有备机故障情况下,主机会自动转为本地提交方式,此时如果主机再故障,则可能产生不可恢复的影响。
  • ssl_cert_expire_check_interval 参数说明:ssl证书过期检测周期。 参数类型:整型 参数单位:s(秒) 取值范围:0 ~ 2147483647 默认值:86400(即1天) 设置方式:该参数为CM参数,参数修改请参考表2中方式一进行设置,修改后需要重启cm_server才能生效。 设置建议:按照实际需要进行调整。 设置不当的风险与影响:设置过小会增加CPU负载,过大会导致告警不及时。
  • thread_effective_time 参数说明:线程运行一轮的有效超时时间。超时说明此线程卡住,进程将自动退出。 参数类型:整型 参数单位:s(秒) 取值范围:0 ~ 1200,0表示关闭线程监控能力。 默认值:20 设置方式:该参数为CM参数,参数修改请参考表2中方式一、方式二进行设置。 设置建议:不建议调整参数值大小,如果需要调整请联系华为技术工程师提供技术支持。 设置不当的风险与影响:设置不当可能导致故障检测不准确、故障恢复不及时。
  • enable_ssl 参数说明:ssl证书开关。 参数类型:布尔型 参数单位:无 取值范围: on:表示启用ssl证书加密通信。 off:表示不启用ssl证书加密通信。 默认值:off 设置方式:该参数为CM参数,参数修改请参考表2中方式一进行设置,修改后需要重启cm_server才能生效。 设置建议:出于安全性考虑,建议不要关闭该配置。关闭后cm将不使用加密通信,所有信息明文传播,可能带来窃听、篡改、冒充等安全风险。 设置不当的风险与影响:关闭后cm将不使用加密通信,所有信息明文传播,可能带来窃听、篡改、冒充等安全风险。
  • cm_krb_server_keyfile 参数说明:kerberos服务端key文件所在位置,需要配置为绝对路径。该文件通常在“${GAUSSHOME}/kerberos路径”下,以keytab格式结尾,文件名与集群运行所在用户名相同。 参数类型:字符串 参数单位:无 取值范围:服务器上kerberos服务端key文件所在位置的绝对路径。 默认值:“${GAUSSHOME}/kerberos/{UserName}.keytab”,默认值无法生效,仅作为提示。 设置方式:该参数为CM参数,参数修改请参考表2中方式一、方式二进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数与上述cm_auth_method参数是配对的,当cm_auth_method参数修改为“gss”时,该参数也必须配置为正确路径,否则将影响集群状态。
共100000条
提示

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