华为云用户手册

  • 概述 一种可排序数据类型的每一种表达式都有一个排序规则(系统内部的可排序数据类型可以是text、varchar和char等字符类型。用户定义的基础类型也可以被标记为可排序的,并且在一种可排序数据类型上的域也是可排序的)。如果该表达式是一个列引用,该表达式的排序规则就是列所定义的排序规则。如果该表达式是一个常量,排序规则就是该常量数据类型的默认排序规则。更复杂表达式的排序规则根据其输入的排序规则得来。
  • 大小写不敏感排序规则支持 从集群8.1.3版本开始,GaussDB(DWS)增加内置排序规则case_insensitive,即对字符类型的大小写不敏感行为(如排序、比较、哈希)。 约束条件: 支持字符类型:char/character/nchar、varchar/character varying/varchar2/nvarchar2/clob/text。 不支持字符类型:“char”和name。 不支持的编码:PG_EUC_JIS_2004、PG_MULE_INTERNAL、PG_LATIN10、PG_WIN874。 不支持CREATE DATABASE时指定到LC_COLLATE。 不支持正则表达式。 不支持字符类型的record比较(如record_eq)。 不支持时序表。 不支持倾斜优化。 不支持RoughCheck优化。
  • 排序规则组合原则 当表达式的collation未指定时,则认为是默认的排序规则default,它表示数据库的区域设置。表达式的collation也可能是不确定的,此时,排序操作和其他不确定的排序规则的操作就会失败。 对于函数或操作符调用,其排序规则将通过检查所有参数的collation来决定。如果该函数或操作符调用的结果是一种可排序的数据类型,若有外层表达式要用到排序规则,那么该外层的表达式将继承对应函数和操作符所调用结果集的排序规则。 表达式的排序规则派生可以是显式或隐式。该区别会影响多个不同的排序规则出现在同一个表达式中时如何对collation进行组合。当执行语句使用COLLATE子句时,将发生显式派生,否则为隐式派生。当多个排序规则组合时,规则如下: 如果输入表达式中存在显式COLLATE派生,则在输入表达式之间的所有显式派生的COLLATE必须相同,否则将产生冲突错误。如果存在显式COLLATE,那它就是排序规则组合的结果。 如果不存在显式COLLATE,那所有输入表达式必须具有相同的隐式COLLATE或默认COLLATE。如果存在非默认COLLATE,那它就是排序规则组合的结果。否则,结果是默认COLLATE。 如果在输入表达式之间存在多个冲突的非默认COLLATE,则组合被认为是具有不确定排序规则,这并非一种错误。如果被调用的函数或表达式需要用到排序规则,运行时将产生排序规则未知的错误。 CASE表达式中,比较行为使用的规则以WHEN子句中的COLLATE设置为准。 显示COLLATE的派生仅在当前查询(CTE或SUBQUERY)中生效,查询外则降为隐式派生。
  • 示例 语句中显示指定COLLATE子句。 1 2 3 4 5 SELECT 'a' = 'A', 'a' = 'A' COLLATE case_insensitive; ?column? | ?column? ----------+---------- f | t (1 row) 建表时指定列属性为case_insensitive。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE t1 (a text collate case_insensitive); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE \d t1 Table "public.t1" Column | Type | Modifiers --------+------+-------------------------- a | text | collate case_insensitive INSERT INTO t1 values('a'),('A'),('b'),('B'); INSERT 0 4 建表时指定,查询时无需指定。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT a, a='a' FROM t1; a | ?column? ---+---------- A | t B | f a | t b | f (4 rows) SELECT a, count(1) FROM t1 GROUP BY a; a | count ---+------- a | 2 B | 2 (2 rows) CASE表达式,以WHEN子句中的COLLATE设置为准。 1 2 3 4 5 6 7 8 SELECT a,case a when 'a' collate case_insensitive then 'case1' when 'b' collate "C" then 'case2' else 'case3' end FROM t1; a | case ---+------- A | case1 B | case3 a | case1 b | case2 (4 rows) 跨子查询隐式派生。 1 2 3 4 5 6 7 8 9 SELECT * FROM (SELECT a collate "C" from t1) WHERE a in ('a','b'); a --- a b (2 rows) SELECT * FROM t1,(SELECT a collate "C" from t1) t2 WHERE t1.a=t2.a; ERROR: could not determine which collation to use for string hashing HINT: Use the COLLATE clause to set the collation explicitly. 由于collate case_insensitive为不敏感排序,结果集不确定,再使用敏感排序筛选,会有结果集不稳定的问题,因此语句中避免出现敏感排序和不敏感排序混用。 使用collate case_insensitive指定字符类型为大小写不敏感后,性能较使用前会有所下降,因此性能敏感场景需谨慎评估后使用。
  • retry_ecode_list 参数说明:指定SQL语句出错自动重试功能支持的错误类型列表。 参数类型:USERSET 取值范围:字符串 默认值:YY001 YY002 YY003 YY004 YY005 YY006 YY007 YY008 YY009 YY010 YY011 YY012 YY013 YY014 YY015 53200 08006 08000 57P01 XX003 XX009 YY016 CG003 CG004 F0011 45003
  • 定时任务管理 创建测试表: 1 CREATE TABLE test(id int, time date); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 创建自定义存储过程: 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE PRC_JOB_1() AS N_NUM integer :=1; BEGIN FOR I IN 1..1000 LOOP INSERT INTO test VALUES(I,SYSDATE); END LOOP; END; / 当结果显示为如下信息,则表示创建成功。 1 CREATE PROCEDURE 创建任务: 新创建的任务(未指定job_id)表示每隔1分钟执行一次存储过程PRC_JOB_1。 1 2 3 4 5 call dbms_job.submit('call public.prc_job_1(); ', sysdate, 'interval ''1 minute''', :a); job ----- 1 (1 row) 指定job_id创建任务。 1 2 3 4 5 call dbms_job.isubmit(2,'call public.prc_job_1(); ', sysdate, 'interval ''1 minute'''); isubmit --------- (1 row) 通过USER_JOBS视图查看当前用户已创建的任务信息。 需要有系统管理员权限才可以访问此系统视图,字段说明详见表1。 1 2 3 4 5 6 7 8 9 10 select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from user_jobs; job | dbname | start_date | last_date | this_date | next_date | broken | status | interval | failures | what -----+----------+----------------------------+----------------------------+----------------------------+---------------------+--------+--------+---------------------+----------+---------------- ----------- 1 | db_demo | 2022-03-25 07:58:01.829436 | 2022-03-25 07:58:03.174817 | 2022-03-25 07:58:01.829436 | 2022-03-25 07:59:01 | n | s | interval '1 minute' | 0 | call public.prc _job_1(); 2 | db_demo | 2022-03-25 07:58:15.893383 | 2022-03-25 07:58:16.608959 | 2022-03-25 07:58:15.893383 | 2022-03-25 07:59:15 | n | s | interval '1 minute' | 0 | call public.prc _job_1(); (2 rows) 停止任务。 1 2 3 4 5 call dbms_job.broken(1,true); broken -------- (1 row) 启动任务。 1 2 3 4 5 call dbms_job.broken(1,false); broken -------- (1 row) 修改任务属性。 修改JOB的Next_date参数信息。例如,修改Job1的Next_date为1小时以后开始执行。 1 2 3 4 5 call dbms_job.next_date(1, sysdate+1.0/24); next_date ----------- (1 row) 修改JOB的Interval参数信息。例如,修改Job1的Interval为每隔1小时执行一次。 1 2 3 4 5 call dbms_job.interval(1,'sysdate + 1.0/24'); interval ---------- (1 row) 修改JOB的What参数信息。例如,修改Job1的What为执行SQL语句“insert into public.test values(333, sysdate+5);”。 1 2 3 4 5 call dbms_job.what(1,'insert into public.test values(333, sysdate+5);'); what ------ (1 row) 同时修改JOB的Next_date、Interval、What等多个参数信息。 1 2 3 4 5 call dbms_job.change(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute'''); change -------- (1 row) 删除JOB。 1 2 3 4 5 call dbms_job.remove(1); remove -------- (1 row) JOB的权限控制。 当创建一个JOB时,该JOB会和创建该JOB的数据库和用户绑定(即:pg_job系统视图新增的JOB记录中的dbname和log_user)。 如果当前用户是DBA用户、系统管理员、该JOB的创建用户(即:pg_job中的log_user),那么该用户有权限通过高级包接口remove、change、next_data、what、interval删除或修改JOB的参数信息。否则,会提示当前用户没有权限操作该JOB。 如果当前数据库是该JOB创建所属的数据库(即:为pg_job系统视图中的dbname),那么连接到当前数据库上可以通过高级包接口remove、change、next_data、what、interval删除或修改JOB的参数信息。 当删除JOB所属的数据库(即:为pg_job系统视图中的dbname)时,系统会关联删除该数据库从属的JOB记录。 当删除JOB所属的用户(即:为pg_job系统视图中的log_user)时,系统会关联删除该用户从属的JOB记录。
  • audit_system_object 参数说明:该参数决定是否对GaussDB(DWS)数据库对象的CREATE、DROP、ALTER操作进行审计。GaussDB(DWS)数据库对象包括DATABASE、USER、schema、TABLE等。通过修改该配置参数的值,可以只审计需要的数据库对象的操作。 参数类型:SIGHUP 取值范围:整型,0~4194303 0代表关闭GaussDB(DWS)数据库对象的CREATE、DROP、ALTER操作审计功能。 非0代表只审计GaussDB(DWS)的某类或者某些数据库对象的CREATE、DROP、ALTER操作。 取值说明: 该参数的值由22个二进制位的组合求出,这22个二进制位分别代表GaussDB(DWS)的22类数据库对象。如果对应的二进制位取值为0,表示不审计对应的数据库对象的CREATE、DROP、ALTER操作;取值为1,表示审计对应的数据库对象的CREATE、DROP、ALTER操作。这22个二进制位代表的具体审计内容请参见表1。 默认值:12303 表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对象的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对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第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位 是否审计SERVER FOR HADOOP对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作 第12位 是否审计DATA SOURCE对象的CRAETE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第13位 是否审计NODE GROUP对象的CREATE、DROP、ALTER操作。 0表示不审计该对象的CREATE、DROP、ALTER操作; 1表示审计该对象的CREATE、DROP、ALTER操作。 第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位 是否审计REDACTION POLICY对象的CREATE、DROP、ALTER操作。 0表示不审计REDACTION POLICY对象的CREATE、DROP、ALTER操作; 1表示审计REDACTION POLICY对象的CREATE、DROP、ALTER操作。 第20位 是否审计SEQUENCE对象的CREATE、DROP、ALTER操作。 0表示不审计SEQUENCE对象的CREATE、DROP、ALTER操作; 1表示审计SEQUENCE对象的CREATE、DROP、ALTER操作。 第21位 是否审计NODE对象的CREATE、DROP、ALTER操作。 0表示不审计NODE对象的CREATE、DROP、ALTER操作; 1表示审计NODE对象的CREATE、DROP、ALTER操作。
  • 应用示例 查看pooler连接池信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 select database,user_name,node_name,in_use,count(*) from pg_pooler_status group by 1, 2, 3 ,4 order by 5 desc limit 50; database | user_name | node_name | in_use | count ----------+-----------+--------------+--------+------- mydbdemo | user3 | cn_5001 | f | 2 mydbdemo | user3 | dn_6005_6006 | t | 2 mydbdemo | user3 | dn_6001_6002 | t | 2 mydbdemo | user3 | dn_6003_6004 | f | 2 mydbdemo | user3 | dn_6003_6004 | t | 2 mydbdemo | user3 | dn_6005_6006 | f | 2 mydbdemo | user3 | dn_6001_6002 | f | 2 mydbdemo | user3 | cn_5002 | f | 2 gaussdb | user3 | dn_6003_6004 | f | 1 mydbdemo | user3 | cn_5001 | t | 1 music | user2 | dn_6003_6004 | f | 1 music | user2 | dn_6005_6006 | f | 1 gaussdb | user1 | dn_6005_6006 | f | 1 (13 rows)
  • agg_max_mem 参数说明:设置执行作业中的Agg算子的聚集列超过5列时,该Agg算子所能够使用的最大内存。当agg_max_mem值大于0时生效。(该参数仅8.1.3.200及以上集群版本支持) 参数类型:USERSET 取值范围:整型,0,或大于32MB的整型,单位为KB。如果设置值小于32MB,系统会自动将该参数设置为默认值0,此时不会根据该值限制Agg算子的内存使用。 默认值: 若当前集群为低版本升级到8.1.3版本,继承升级前参数,默认值为INT_MAX。 若当前集群为新装的8.1.3版本,默认值为2GB。
  • psort_work_mem 参数说明:设置列存表在进行局部排序中在开始写入临时磁盘文件之前使用的内存大小。带partial cluster key的表、带索引的表插入,创建表索引,删除表和更新表都会用到。 参数类型:USERSET 多个正在运行的会话可能会同时进行表的局部排序操作,因此使用的总内存可能是psort_work_mem的好几倍。 取值范围:整型,64~INT_MAX,单位为KB。 默认值:512MB
  • max_prepared_transactions 参数说明:设置可以同时处于“预备”状态的事务的最大数目。增加此参数的值会使GaussDB(DWS)比系统默认设置需要更多的System V共享内存。 当GaussDB(DWS)部署为主备双机时,在备机上此参数的设置必须要高于或等于主机上的,否则无法在备机上进行查询操作。 参数类型:POSTMASTER 取值范围:整型,0~536870911,其中CN取值为0表示关闭预备事务的特性。 默认值:CN节点为800, DN节点为800 为避免在准备步骤失败,此参数的值不能小于max_connections。
  • work_mem 参数说明:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY,DISTINCT和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。 对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍。 参数类型:USERSET 取值范围:整型,64~INT_MAX,单位为KB。 默认值:小规格内存为512MB, 大规格内存为2GB(max_process_memory大于等于30GB为大规格内存,否则为小规格内存)。 设置建议: 依据查询特点和并发来确定,一旦work_mem限定的物理内存不够,算子运算数据将写入临时表空间,带来5-10倍的性能下降,查询响应时间从秒级下降到分钟级。 对于串行无并发的复杂查询场景,平均每个查询有5-10关联操作,建议work_mem=50%内存/10。 对于串行无并发的简单查询场景,平均每个查询有2-5个关联操作,建议work_mem=50%内存/5。 对于并发场景,建议work_mem=串行下的work_mem/物理并发数。
  • query_max_mem 参数说明:设置执行作业所能够使用的最大内存。如果设置的query_max_mem值大于0,在生成执行计划时,优化器会根据该值来设置算子的可用内存。当作业执行时实际所使用内存超过该值时,将报错退出。 参数类型:USERSET 取值范围:整型,0,或大于32MB的整型,单位为KB。如果设置值小于32MB,系统会自动将该参数设置为默认值0,此时优化器不会根据该值限制作业的内存使用。 默认值:0
  • max_stack_depth 参数说明:设置GaussDB(DWS)执行堆栈的最大安全深度。需要这个安全界限是因为在服务器里,并非所有程序都检查了堆栈深度,只是在可能递规的过程,比如表达式计算这样的过程里面才进行检查。 参数类型:SUSET 设置原则: 此参数的最佳设置是等于操作系统内核允许的最大值(就是ulimit -s的设置)。 如果设置此参数的值大于实际的内核限制,则一个正在运行的递归函数可能会导致一个独立的服务器进程崩溃。在GaussDB(DWS)能够检测内核限制的操作系统上(SLES上),将自动限制设置为一个不安全的值。 因为并非所有的操作都能够检测,所以建议用户在此设置一个明确的值。 取值范围:整型,100~INT_MAX,单位为KB。 默认值:2MB 默认值2MB,这个值相对比较小,不容易导致系统崩溃。但是可能会因为该值较小,导致无法执行复杂的函数。
  • shared_buffers 参数说明:设置GaussDB(DWS)使用的共享内存大小。增加此参数的值会使GaussDB(DWS)比系统默认设置需要更多的System V共享内存。 参数类型:POSTMASTER 取值范围:整型,128~INT_MAX,单位为8KB。 改变BLCKSZ的值会改变最小值。 默认值:CN节点为DN节点值的1/2,DN节点取公式计算:POWER(2,ROUND(LOG(max_process_memory*1024/18,2),0))。如果操作系统支持的共享内存小于32MB,则在初始化数据存储区时会自动调整为操作系统支持的最大值。 设置建议: 由于GaussDB(DWS)大部分查询下推,建议DN中此参数设置比CN大。 建议设置shared_buffers值为内存的40%以内。行存列存分开对待。行存设大,列存设小。列存:(单服务器内存/单服务器DN个数)*0.4*0.25。 如果设置较大的shared_buffers需要同时增加checkpoint_segments的值,因为写入大量新增、修改数据需要消耗更多的时间周期。
  • maintenance_work_mem 参数说明:设置在维护性操作(比如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。 参数类型:USERSET 取值范围:整型,1024~INT_MAX,单位为KB。 默认值:小规格内存为512MB, 大规格内存为2GB(max_process_memory大于等于30GB为大规格内存,否则为小规格内存)。 设置建议: 建议设置此参数的值等于work_mem,可以改进清理和恢复数据库转储的速度。因为在一个数据库会话里,任意时刻只有一个维护性操作可以执行,并且在执行维护性操作时不会有太多的会话。 当自动清理进程运行时,autovacuum_max_workers倍数的内存将会被分配,所以此时设置maintenance_work_mem的值应该不小于work_mem。 如果进行大数据量的cluster等,可以在session中调大该值。
  • cstore_buffers 参数说明:设置列存和OBS、HDFS外表列存格式(orc、parquet、carbondata)所使用的共享缓冲区的大小。 参数类型:POSTMASTER 取值范围:整型,16384~INT_MAX,单位为KB。 默认值:CN为32MB,DN取公式计算:POWER(2,ROUND(LOG(max_process_memory*1024/18,2),0)) 设置建议: 列存表使用cstore_buffers设置的共享缓冲区,几乎不用shared_buffers。因此在列存表为主的场景中,应减少shared_buffers,增加cstore_buffers。 OBS、HDFS外表使用cstore_buffers设置ORC、Parquet、Carbondata的元数据和数据的缓存,元数据缓存大小为cstore_buffers的1/4,最大不超过2GB,其余缓存空间为列存数据和外表列存格式数据共享使用。
  • buffer_ring_ratio 参数说明:设置并行导出时使用环形缓冲区的阈值大小。 参数类型:USERSET 取值范围:整型,1~1000 默认值:250 默认值表示阈值为shared_buffers的250/1000即1/4。 最小为shared_buffers的1/1000。 最大为shared_buffers的大小。 设置建议:导出时出现缓存命中率不符合预期的场景建议在DN中设置此参数。
  • temp_buffers 参数说明:设置每个数据库会话使用的LOCAL临时缓冲区的大小。 参数类型:USERSET 取值范围:整型,800~INT_MAX/2,单位为8KB。 默认值:8MB 在每个会话的第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。 一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。
  • max_process_memory 参数说明:设置一个数据库节点可用的最大物理内存。 参数类型:POSTMASTER 取值范围:整型,2*1024*1024~INT_MAX/2,单位为KB。 默认值:非从备DN节点自动适配,公式为(物理内存大小)* 0.8 / (1+主DN个数),当结果不足2GB时,默认取2GB。从备DN默认为12GB。 设置建议: DN上该数值需要根据系统物理内存及单节点部署主DN个数决定的。计算公式如下:(物理内存大小 – vm.min_free_kbytes)* 0.8 / (n+主DN个数)。该参数目的是尽可能保证系统的可靠性,不会因数据库内存膨胀导致节点OOM。这个公式中提到vm.min_free_kbytes,其含义是预留操作系统内存供内核使用,通常用作操作系统内核中通信收发内存分配,至少为5%内存。即, max_process_memory=物理内存*0.8/(n+主DN个数),其中,当集群规模小于256时, n=1;当集群规模大于256且小于512时, n=2;当集群规模超过512时,n=3。 CN上该数值内存可设置与DN数值一样。 RAM:集群规划时分配给集群的最大使用内存。
  • enable_memory_limit 参数说明:启用逻辑内存管理模块。 参数类型:POSTMASTER 取值范围:布尔型 on表示启用逻辑内存管理模块。 off表示不启用逻辑内存管理模块。 默认值:on 若max_process_memory-max_shared_memory-cstore buffers少于2G,GaussDB(DWS)强制把enable_memory_limit设置为off。 max_shared_memory参数与shared_buffer、max_connections以及max_prepared_transactions参数强相关,如果max_shared_memory过大,可以通过调整这三个参数减小。 动态负载管理功能依赖内存管理功能,当关闭参数enable_memory_limit后,动态负载管理和TopSQL功能会失效。
  • 数据库用户类型 表1 数据库用户类型 用户类型 描述 可进行的操作 如何创建 管理员dbadmin 管理员也称作系统管理员,是指具有SYSADMIN属性的账户。 非三权分立模式下,拥有系统的最高权限,能够执行所有的操作。系统管理员具有与对象所有者相同的权限。 在GaussDB(DWS) 管理控制台创建集群时创建的用户dbadmin是系统管理员。 使用CREATE USER或ALTER USER语法创建和设置管理员用户。 CREATE USER sysadmin WITH SYSADMIN password '{Password}'; ALTER USER u1 SYSADMIN; 普通用户 普通用户 使用工具连接数据库。 拥有数据库系统特定操作的属性,如CREATEDB、CREATEROLE、SYSADMIN。 访问数据库对象。 执行SQL语句。 使用CREATE USER语法创建普通用户。 CREATE USER u1 PASSWORD '{Password}'; 私有用户 在非三权分立模式下,创建的具有INDEPENDENT属性的私有用户。 数据库管理员在未经其授权前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行INSERT、DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER操作。 使用CREATE USER语法创建私有用户。 CREATE USER user_independent WITH INDEPENDENT IDENTIFIED BY '{Password}';
  • PG_RESOURCE_POOL PG_RESOURCE_POOL系统表存储数据库资源池的信息。 表1 PG_RESOURCE_POOL字段 名称 类型 描述 respool_name name 资源池名称。 mem_percent integer 内存配置的百分比。 cpu_affinity bigint 保留字段,无实际意义。 control_group name 资源池所在的control group名字。 active_statements integer 资源池上最大的并发数。 max_dop integer 资源池允许的简单作业最大并发数。-1和0代表不限制。 memory_limit name 资源池最大的内存。 parentid oid 父资源池OID。 io_limits integer 保留字段,无实际意义。 io_priority text 保留字段,无实际意义。 is_foreign boolean 表示资源池是否用于逻辑集群之外的用户。如果为true,表示资源池用来控制不属于当前资源池的普通用户的资源。 short_acc boolean 资源池是否开启短查询加速,默认开启。 短查询加速开启,简单查询在快车道管控。 短查询加速关闭,简单查询在慢车道管控。 except_rule text 资源池关联的异常规则,支持关联多个异常规则,异常规则间用逗号分隔。 父主题: 系统表
  • PG_SHADOW PG_SHADOW视图显示了所有在PG_AUTHID中标记了rolcanlogin的角色的属性。 此系统视图的名称源于它不是所有用户可读的,因为包含口令。PG_USER是一个在PG_SHADOW上全局可读的视图,只是把口令域填充成了空白。 表1 PG_SHADOW字段 名字 类型 引用 描述 usename name PG_AUTHID.rolname 用户名。 usesysid oid PG_AUTHID.oid 用户的ID。 usecreatedb boolean - 用户可以创建数据库。 usesuper boolean - 用户是系统管理员。 usecatupd boolean - 用户可以更新系统表。即使是系统管理员,如果此字段不为真,也不能更新系统表。 userepl boolean - 用户可以初始化流复制和使系统处于或不处于备份模式。 passwd text - 口令(可能是加密的);如果没有则为null。参阅PG_AUTHID获取加密的口令是如何存储的信息。 valbegin timestamp with time zone - 账户的有效开始时间;如果没有设置有效开始时间,则为NULL。 valuntil timestamp with time zone - 账户的有效结束时间;如果没有设置有效结束时间,则为NULL。 respool name - 用户使用的资源池。 parent oid - 父资源池。 spacelimit text - 永久表存储空间限额。 tempspacelimit text - 临时表存储空间限额。 spillspacelimit text - 算子落盘空间限额。 useconfig text[ ] - 运行时配置变量的会话缺省。 父主题: 系统视图
  • enable_dynamic_workload 参数说明:是否开启动态负载管理功能。 参数类型:POSTMASTER 取值范围:布尔型 on表示打开动态负载管理功能。 off表示关闭动态负载管理功能。 默认值:on 开启内存自适应后,收集统计信息后不再需要使用work_mem进行算子内存使用调优,由系统根据当前负载情况,为每个语句生成计划,并估算每个算子的内存使用量和整个语句的内存使用量。系统根据负载情况和整个语句内存使用量进行队列调度,所以多并发场景会出现语句排队的情况。 由于优化器行数估算不准现象的存在,会出现语句内存使用量低估或高估的情况。低估时,执行时内存会自动扩展。高估时,会导致系统内存利用不足,排队语句增多,可能导致性能非最优。此时需要识别语句估算内存远大于实际DN峰值内存的语句,通过设置query_max_mem进行调优,详见SQL调优关键参数调整。
  • topsql_retention_time 参数说明:设置历史TopSQL中gs_wlm_session_info和gs_wlm_operator_info表中数据的保存时间。 参数类型:SIGHUP 取值范围:整型,0~3650,单位为天。 值为0时,表示数据永久保存。 值大于0时,表示数据能够保存的对应天数。 默认值:30 设置此GUC参数启用数据保存功能前,请先清理gs_wlm_session_info和gs_wlm_operator_info表中的数据。 新建集群默认值为30,升级场景该参数的默认值为保持前向兼容维持原值。
  • transaction_pending_time 参数说明:当enable_transaction_parctl为on时,事务块语句和存储过程语句排队的最大时间。 参数类型:USERSET 取值范围:整型,-1~INT_MAX,单位为秒。 值为-1或0:事务块语句和存储过程语句无超时判断,排队至资源满足可执行条件。 值大于0:事务块语句和存储过程语句排队超过所设数值的时间后,无视当前资源情况强制执行。 默认值:0 此参数仅对存储过程及事务块的内部语句有效,即PG_SESSION_WLMSTAT中enqueue字段显示为Transaction或StoredProc的语句才会生效。
  • wlm_sql_allow_list 参数说明:用于指定资源管理SQL白名单语句,SQL白名单语句不受资源管理监控。 参数类型:SIGHUP 取值范围:字符串 默认值:空 wlm_sql_allow_list中可指定一条或多条SQL白名单语句,指定多条时,通过“;”进行分隔。 系统通过前置匹配判断SQL语句是否受监控,不区分大小写,例如:wlm_sql_allow_list='SELECT',则所有select语句均不受资源管理监控。 识别参数值白名单字符串头部的空格,例如:'SELECT'与' SELECT'的含义是不一致的,' SELECT'只过滤头部带空格的SELECT语句。 系统默认部分SQL语句为白名单语句,默认白名单语句不可修改;可以通过系统视图gs_wlm_sql_allow查询默认和已经通过GUC设置成功的SQL白名单语句。 通过wlm_sql_allow_list指定的SQL语句不可追加,只能通过覆盖的方式设置;若需追加SQL语句,需要先查出原先指定的GUC值,在原值后面加补上新增的语句,以“;”分隔后重新设置。
  • resource_track_duration 参数说明:设置资源监控实时视图(参见表1)中记录的语句执行结束后进行历史信息转存的最小执行时间。当执行完成的作业,其执行时间不小于此参数值时,作业信息会从实时视图(以statistics为后缀的视图)转存到相应的历史视图(以history为后缀的视图)中。该参数只有当enable_resource_track为on时才有效。 参数类型:USERSET 取值范围:整型,0~INT_MAX,单位为秒。 值为0时,资源监控实时视图(表1)中记录的所有语句都进行历史信息归档。 值大于0时,资源监控实时视图(表1)中记录的语句的执行时间超过这个值就会进行历史信息归档。 默认值:60s
  • session_respool 参数说明:当前的session关联的resource pool。 参数类型:USERSET 即如果先设置cgroup_name,再设置session_respool,那么session_respool关联的控制组起作用,如果再切换cgroup_name,那么新切换的cgroup_name起作用。 切换cgroup_name的过程中如果指定到Workload控制组级别,数据库不对级别进行验证。级别的范围只要在1-10范围内都可以。 建议尽量不要混合使用cgroup_name和session_respool。 取值范围:字符串,通过create resource pool所设置的资源池。 默认值:invalid_pool
共100000条