华为云用户手册

  • 注意事项 只有模式的所有者或者被授予了模式ALTER权限的用户有权限执行ALTER SCHEMA命令,三权分立开关关闭时,系统管理员默认拥有此权限。但要修改模式的所有者,当前用户必须是该模式的所有者或者系统管理员,且该用户是新所有者角色的成员。 对于除public以外的系统模式,如pg_catalog、sys等,只允许初始用户修改模式的所有者。修改系统自带模式的名称可能会导致部分功能不可用甚至影响数据库正常运行,默认情况下不允许修改系统自带模式的名称,考虑到前向兼容性,仅允许当系统在启动或升级过程中或参数allow_system_table_mods为on时修改。 除初始用户外,其他用户无法将schema的所有者修改为运维管理员。
  • 参数说明 schema_name 现有模式的名称。 取值范围:已存在的模式名。 RENAME TO new_name 修改模式的名称。非系统管理员要改变模式的名称,则该用户必须在此数据库上有CREATE权限。 new_name:模式的新名称。 模式名不能和当前数据库里其他的模式重名。 模式名不能和当前数据库的初始用户重名。 模式的名称不可以“pg_”开头。 模式的名称不可以“gs_role_”开头。 取值范围:字符串,要符合标识符命名规范。 OWNER TO new_owner 修改模式的所有者。非系统管理员要改变模式的所有者,该用户还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。 new_owner:模式的新所有者。 取值范围:已存在的用户名/角色名。 { WITH | WITHOUT } BLOCKCHAIN 修改模式的防篡改属性,使用WITH选项为防篡改模式。具有防篡改属性模式下的普通行存表均为防篡改历史表,不包括外表,临时表,系统表。当该模式下不包含任何表时才可修改防篡改属性。另外,不支持临时表模式、toast表模式、dbe_perf模式、blockchain模式修改防篡改属性。只有模式中不包含任何表的情况下,才能使用该语法在普通模式和防篡改模式中互转。 修改普通模式为防篡改模式,需设置GUC参数enable_ledger为on,该参数默认值为off,级别为SIGHUP。
  • 范围分区示例 VALUES LESS THAN --创建表空间。 CREATE TABLESPACE tbs_test_range1_p1 RELATIVE LOCATION 'tbs_test_range1/tablespace_1'; CREATE TABLESPACE tbs_test_range1_p2 RELATIVE LOCATION 'tbs_test_range1/tablespace_2'; CREATE TABLESPACE tbs_test_range1_p3 RELATIVE LOCATION 'tbs_test_range1/tablespace_3'; CREATE TABLESPACE tbs_test_range1_p4 RELATIVE LOCATION 'tbs_test_range1/tablespace_4'; --创建分区表test_range1。 CREATE TABLE test_range1( id INT, info VARCHAR(20) ) PARTITION BY RANGE (id) ( PARTITION p1 VALUES LESS THAN (200) TABLESPACE tbs_test_range1_p1, PARTITION p2 VALUES LESS THAN (400) TABLESPACE tbs_test_range1_p2, PARTITION p3 VALUES LESS THAN (600) TABLESPACE tbs_test_range1_p3, PARTITION pmax VALUES LESS THAN (MAXVALUE) TABLESPACE tbs_test_range1_p4 ); --插入1000条数据 INSERT INTO test_range1 VALUES(GENERATE_SERIES(1,1000),'abcd'); --查看p1分区的行数199条,[1,200)。 SELECT COUNT(*) FROM test_range1 PARTITION (p1); count ------- 199 (1 row) --查看p2分区的行数200条,[200,400)。 SELECT COUNT(*) FROM test_range1 PARTITION (p2); count ------- 200 (1 row) --查看分区信息。 SELECT a.relname, a.boundaries, b.spcname FROM pg_partition a, pg_tablespace b WHERE a.reltablespace = b.oid AND a.parentid = 'test_range1'::regclass; relname | boundaries | spcname ---------+------------+-------------------- p1 | {200} | tbs_test_range1_p1 p2 | {400} | tbs_test_range1_p2 p3 | {600} | tbs_test_range1_p3 pmax | {NULL} | tbs_test_range1_p4 (4 rows) --删除 DROP TABLE test_range1; DROP TABLESPACE tbs_test_range1_p1; DROP TABLESPACE tbs_test_range1_p2; DROP TABLESPACE tbs_test_range1_p3; DROP TABLESPACE tbs_test_range1_p4; START END --创建分区表。 CREATE TABLE test_range2( id INT, info VARCHAR(20) ) PARTITION BY RANGE (id) ( PARTITION p1 START(1) END(600) EVERY(200), PARTITION p2 START(600) END(800), PARTITION pmax START(800) END(MAXVALUE) ); --查看分区信息。 SELECT relname, boundaries FROM pg_partition WHERE parentid = 'test_range2'::regclass AND parttype = 'p' ORDER BY 1; relname | boundaries ---------+------------ p1_0 | {1} p1_1 | {201} p1_2 | {401} p1_3 | {600} p2 | {800} pmax | {NULL} (6 rows) --删除。 DROP TABLE test_range2;
  • 哈希分区示例 --创建哈希分区表,指定分区数。 CREATE TABLE test_hash1(c1 int) PARTITION BY HASH(c1) PARTITIONS 3; --创建哈希分区表,并指定分区名。 CREATE TABLE test_hash2(c1 int) PARTITION BY HASH(C1)( PARTITION pa, PARTITION pb, PARTITION pc ); --查看分区信息。 SELECT b.relname AS table_name, a.relname AS partition_name FROM pg_partition a, pg_class b WHERE b.relname LIKE 'test_hash%' AND a.parttype = 'p' AND a.parentid = b.oid; table_name | partition_name ------------+---------------- test_hash1 | p2 test_hash1 | p1 test_hash1 | p0 test_hash2 | pc test_hash2 | pb test_hash2 | pa (6 rows) --删除。 DROP TABLE test_hash1,test_hash2;
  • 列表分区示例 --创建列表分区表。 CREATE TABLE test_list ( NAME VARCHAR ( 50 ), area VARCHAR ( 50 ) ) PARTITION BY LIST (area) ( PARTITION p1 VALUES ('Beijing'), PARTITION p2 VALUES ('Shanghai'), PARTITION p3 VALUES ('Guangzhou'), PARTITION p4 VALUES ('Shenzhen'), PARTITION pdefault VALUES (DEFAULT) ); --插入数据。 INSERT INTO test_list VALUES ('bob', 'Shanghai'),('scott', 'Sichuan'); --查询分区数据。 SELECT * FROM test_list PARTITION (p2); name | area ------+---------- bob | Shanghai (1 row) SELECT * FROM test_list PARTITION (pdefault); name | area -------+--------- scott | Sichuan (1 row) --删除。 DROP TABLE test_list;
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的表,不抛出错误,而是发出一个notice,告知表已存在。 partition_table_name 分区表的名称。 取值范围:字符串,要符合标识符命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符命名规范。 data_type 字段的数据类型。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation;”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 CONSTRAINT constraint_name 列约束或表约束的名称。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。 定义约束有两种方法: 列约束:作为一个列定义的一部分,仅影响该列。 表约束:不和某个列绑在一起,可以作用于多个列。在B模式数据库下(即sql_compatibility = 'B')constraint_name为可选项,在其他模式数据库下,必须加上constraint_name。 index_name 索引名。 index_name仅在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库下不支持。 对于外键约束,constraint_name和index_name同时指定时,索引名为constraint_name。 对于唯一键约束,constraint_name和index_name同时指定时,索引名以index_name。 USING method 指定创建索引的方法。 取值范围参考参数说明中的USING method。 USING method仅在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库下不支持。 在B模式下,未指定USING method时,对于ASTORE的存储方式,默认索引方法为btree;对于USTORE的存储方式,默认索引方法为ubtree。 ASC | DESC ASC表示指定按升序排序(默认)。DESC指定按降序排序。 ASC|DESC只在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库不支持。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表里面继承所有字段名及其数据类型和非空约束。 新表与原表之间在创建动作完毕之后是完全无关的。在原表做的任何修改都不会传播到新表中,并且也不可能在扫描原表的时候包含新表的数据。 字段缺省表达式只有在声明了INCLUDING DEFAULTS之后才会包含进来。缺省是不包含缺省表达式的,即新表中所有字段的缺省值都是NULL。 如果指定了INCLUDING UPDATE,则原表列的ON UPDATE CURRENT_TIMESTAMP属性会复制到新表列中。默认不复制该属性。 如果指定了INCLUDING GENERATED,则原表列的生成表达式会复制到新表中。默认不复制生成表达式。 非空约束将总是复制到新表中,CHECK约束则仅在指定了INCLUDING CONSTRAINTS的时候才复制,而其他类型的约束则永远也不会被复制。此规则同时适用于表约束和列约束。 被复制的列和约束并不使用相同的名称进行融合。如果明确的指定了相同的名称或者在另外一个LIKE子句中,将会报错。 如果指定了INCLUDING INDEXES,则原表上的索引也将在新表上创建,默认不建立索引。 如果指定了INCLUDING STORAGE,则原表列的STORAGE设置也将被复制,默认情况下不包含STORAGE设置。 如果指定了INCLUDING COMMENTS,则原表列、约束和索引的注释也会被复制过来。默认情况下,不复制源表的注释。 如果指定了INCLUDING RELOPTIONS,则原表的存储参数(即源表的WITH子句)也将复制至新表。默认情况下,不复制源原的存储参数。 如果指定了INCLUDING IDENTITY,则原表的identity功能会复制到新表中,并创建一个与原表SEQUENCE参数相同的SEQUENCE。默认情况下,不复制原表的identity功能。 如果指定了INCLUDING ILM,则源表的ILM策略信息会被复制到新表中,如果需要同时复制源表上的分区对象的ILM策略信息,需要同时指定INCLUDING PARTITION。 INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING UPDATE、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS、INCLUDING IDENTITY和INCLUDING ILM的内容。 “CREATE TABLE table_name LIKE source_table;”语法仅在B模式数据库(即sql_compatibility = 'B')下,且参数b_format_version值为5.7、b_format_dev_version值为s2时支持。 在B模式数据库下,且参数b_format_version值为5.7、b_format_dev_version值为s2时,不支持指定INCLUDING和EXCLUDING选项,缺省等同于指定INCLUDING ALL。 AUTO_INCREMENT [ = ] value 这个子句为自动增长列指定一个初始值,value必须为正整数,不得超过2127-1。 该子句仅在参数sql_compatibility='B'时有效。 COMMENT [ = ] 'string' COMMENT [ = ] 'string'子句表示给表添加注释。 在column_constraint中的COMMENT 'string'表示给列添加注释。 在table_constraint中的COMMENT 'string'表示给主键和唯一键对应的索引添加注释。 具体请参见:•COMMENT [ = ] 'string'。 CHARACTER SET | CHARSET charset 指定表字段的字符集。单独指定时会将字段的字符序设置为指定的字符集的默认字符序。 仅在B模式数据库下(即sql_compatibility = 'B')支持该语法,其他模式数据库不支持。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。对于B模式数据库下(即sql_compatibility = 'B')还支持utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci、binary、gbk_chinese_ci、gbk_bin、gb18030_chinese_ci、gb18030_bin字符序。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细描述如下所示: FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10~100的百分数。在Ustore存储引擎下,该值的默认值为92,在Astore存储引擎下默认值为100(完全填充)。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。 取值范围:10~100 ORIENTATION 决定了表的数据的存储方式。 取值范围: ROW(缺省值):表的数据将以行式存储。 orientation不支持修改。 STORAGE_TYPE 指定存储引擎类型,该参数设置成功后就不再支持修改。 取值范围: USTORE,表示表支持Inplace-Update存储引擎。特别需要注意,使用USTORE表,必须要开启track_counts和track_activities参数,否则会引起空间膨胀。 ASTORE,表示表支持Append-Only存储引擎。 默认值: 不指定时,由参数enable_default_ustore_table决定存储引擎方式,默认是Inplace-Update存储。 COMPRESSION 该参数仅支持列存压缩。 segment 使用段页式的方式存储。本参数仅支持行存表。不支持临时表、unlog表。 取值范围:on/off 默认值:off statistic_granularity 记录该表在分析统计信息时的默认partition_mode,partition_mode说明详见ANALYZE|ANALYSE参数说明,此参数对非分区表设置无效。 取值范围:见partition_mode取值范围。 默认值:AUTO。 autovacuum_enabled 自动清理功能是否对该表启用。 取值范围:on/off 默认值:on autovacuum_vacuum_threshold 自动清理功能中,指定在该表中触发VACUUM所需的更新或删除的最小元组数(仅对Astore表生效)。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_vacuum_threshold一致。 autovacuum_analyze_threshold 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除的最小元组数。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_analyze_threshold一致。 autovacuum_vacuum_scale_factor 自动清理功能中,指定在该表中触发VACUUM所需的插入、更新或删除元组的比例(仅对Astore表生效)。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_vacuum_scale_factor一致。 autovacuum_analyze_scale_factor 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除元组的比例。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_analyze_scale_factor一致。 autovacuum_freeze_min_age 自动清理功能中,指定在该表参数指定了一个行版本的最小年龄,超过这个年龄的行才会被冻结。 取值范围:0-1000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_min_age一致。 autovacuum_freeze_max_age 自动清理功能中,该表pg_class.relfrozenxid字段在超过多少个事务后,就会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM进程。清理操作还允许从pg_clog/子目录中删除旧文件(仅对Astore表生效)。 取值范围:100000-2000000000 默认值:-1,缺省时与GUC参数autovacuum_freeze_max_age一致。 autovacuum_freeze_table_age 自动清理功能中,该表被标记为不需要自动清理时,它将保持不变的时间。(仅对Astore表生效)。 取值范围:0-2000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_table_age一致。 [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] 创建新表时,可以调用ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW给行存添加高级压缩策略,分区继承表的策略。 AFTER n { day | month | year } OF NO MODIFICATION :表示n天/月/年没有修改的行。 ON ( EXPR ):行级表达式,用于判断行的冷热。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 PARTITION BY RANGE [COLUMNS] (partition_key) 创建范围分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='B'时使用,“PARTITION BY RANGE COLUMNS” 语义同 “PARTITION BY RANGE”。 (1)对于从句是VALUES LESS THAN的语法格式: 对于从句是VALUES LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 该情形下,分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、NVARCHAR、NVARCHAR2、NAME、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 (2)对于从句是START END的语法格式: 对于从句是START END的语法格式,范围分区策略的分区键仅支持1列。 该情形下,分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 (3)对于指定了INTERVAL子句的语法格式: 对于指定了INTERVAL子句的语法格式,范围分区策略的分区键仅支持1列。 该情形下,分区键支持的数据类型为:TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 PARTITION partition_name VALUES LESS THAN {( { partition_value | MAXVALUE } [,...] ) | MAXVALUE } 指定各分区的信息。partition_name为范围分区的名称。partition_value为范围分区的上边界,取值依赖于partition_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。 每个分区都需要指定一个上边界。 分区上边界的类型应当和分区键的类型一致。 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。 不在括号内的MAVALUE只能在sql_compatibility='B'时使用,并且只能有一个分区键。 PARTITION partition_name {START (partition_value) END (partition_value) EVERY (interval_value)} | {START (partition_value) END (partition_value|MAXVALUE)} | {START(partition_value)} | {END (partition_value | MAXVALUE)} 指定各分区的信息,各参数意义如下: partition_name:范围分区的名称或名称前缀,除以下情形外(假定其中的partition_name是p1),均为分区的名称。 若该定义是START+END+EVERY从句,则语义上定义的分区的名称依次为p1_1, p1_2, ...。例如对于定义“PARTITION p1 START(1) END(4) EVERY(1)”,则生成的分区是:[1, 2), [2, 3) 和 [3, 4),名称依次为p1_1, p1_2和p1_3,即此处的p1是名称前缀。 若该定义是第一个分区定义,且该定义有START值,则范围(MINVALUE, START)将自动作为第一个实际分区,其名称为p1_0,然后该定义语义描述的分区名称依次为p1_1, p1_2, ...。例如对于完整定义“PARTITION p1 START(1), PARTITION p2 START(2)”,则生成的分区是:(MINVALUE, 1), [1, 2) 和 [2, MAXVALUE),其名称依次为p1_0, p1_1和p2,即此处p1是名称前缀,p2是分区名称。这里MINVALUE表示最小值。 partition_value:范围分区的端点值(起始或终点),取值依赖于partition_key的类型,不可是MAXVALUE。 interval_value:对[START,END) 表示的范围进行切分,interval_value是指定切分后每个分区的宽度,不可是MAXVALUE;如果(END-START)值不能整除以EVERY值,则仅最后一个分区的宽度小于EVERY值。 MAXVALUE:表示最大值,它通常用于设置最后一个范围分区的上边界。 在创建分区表若第一个分区定义含START值,则范围(MINVALUE,START)将自动作为实际的第一个分区。 START END语法需要遵循以下限制: 每个partition_start_end_item中的START值(如果有的话,下同)必须小于其END值; 相邻的两个partition_start_end_item,第一个的END值必须等于第二个的START值; 每个partition_start_end_item中的EVERY值必须是正向递增的,且必须小于(END-START)值; 每个分区包含起始值,不包含终点值,即形如:[起始值,终点值),起始值是MINVALUE时则不包含; 一个partition_start_end_item创建的每个分区所属的TABLESPACE一样; partition_name作为分区名称前缀时,其长度不要超过57字节,超过时自动截断; 在创建、修改分区表时请注意分区表的分区总数不可超过最大限制(1048575); 在创建分区表时START END与LESS THAN语法不可混合使用。 即使创建分区表时使用START END语法,备份(gs_dump)出的SQL语句也是VALUES LESS THAN语法格式。 INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] 间隔分区定义信息。 interval_expr:自动创建分区的间隔,需要符合partition_key的字段类型,目前只支持数值类型和日期/时间类型,例如:1 day、1 month。 STORE IN (tablespace_name [, ... ] ):指定存放自动创建分区的表空间列表,如果有指定,则自动创建的分区从表空间列表中循环选择使用,否则使用分区表默认的表空间。 PARTITION BY LIST [COLUMNS] (partition_key) 创建列表分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='B'时使用,“PARTITION BY LIST COLUMNS” 语义同 “PARTITION BY LIST”。 对于partition_key,列表分区策略的分区键最多支持16列。 对于从句是VALUES [IN] (list_values)的语法格式,list_values中包含了对应分区存在的键值,每个分区的键值数量不超过64个。 从句"VALUES IN"只能在sql_compatibility='B'时使用,语义同"VALUES"。 分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、NVARCHAR、NVARCHAR2、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。分区个数不能超过1048575个。 PARTITION BY HASH(partition_key) 创建哈希分区。partition_key为分区键的名称。 对于partition_key,哈希分区策略的分区键仅支持1列。 分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、TEXT、NVARCHAR、NVARCHAR2、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。分区个数不能超过1048575个。 PARTITION BY KEY(partition_key) 只能在sql_compatibility='B'时使用,语义同“PARTITION BY HASH(partition_key)”。 AUTOMATIC 创建新表时,若指定关键字AUTOMATIC,则开启列表分区的自动扩展功能,缺省时表示不开启自动扩展功能。只有列表分区可以使用自动扩展功能。 开启自动扩展功能后,当插入数据无法匹配到已有分区时,会自动创建一个单独的分区。 PARTITIONS integer 指定分区个数。 integer为分区数,必须为大于0的整数,且不得大于1048575。 当在RANGE和LIST分区后指定此子句时,必须显式定义每个分区,且定义分区的数量必须与integer值相等。只能在sql_compatibility='B'时在RANGE和LIST分区后指定此子句。 当在HASH和KEY分区后指定此子句时,若不列出各个分区定义,将自动生成integer个分区,自动生成的分区名为“p+数字”,数字依次为0到integer-1,分区的表空间默认为此表的表空间;也可以显式列出每个分区定义,此时定义分区的数量必须与integer值相等。若既不列出分区定义,也不指定分区数量,将创建唯一一个分区。 { ENABLE | DISABLE } ROW MOVEMENT 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE(缺省值):行迁移开关打开。 DISABLE:行迁移开关关闭。 在打开行迁移开关情况下,并发UPDATE、DELETE操作可能会报错,原因如下: UPDATE和DELETE操作对于旧数据都是标记为已删除。在打开行迁移开关情况下,如果更新分区键时,导致了跨分区更新,内核会把旧分区中旧数据标记为已删除,在新分区中新增加一条数据,无法通过旧数据找到新数据。 在UPDATE和UPDATE并发、DELETE和DELETE并发、UPDATE和DELETE并发三个并发场景下,如果并发操作同一行数据时,数据跨分区和非跨分区结果有不同的行为。 对于数据非跨分区结果,第一个操作执行完后,第二个操作不会报错。 如果第一个操作是UPDATE,第二个操作能成功找到最新的数据,之后对新数据操作。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,就终止操作。 对于数据跨分区结果,第一个操作执行完后,第二个操作会报错。 如果第一个操作是UPDATE,由于新数据在新分区中,第二个操作不能成功找到最新的数据,就无法操作,之后会报错。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,但无法判断删除旧数据的操作是UPDATE还是DELETE。如果是UPDATE,报错处理。如果是DELETE,终止操作。为了保持数据的正确性,只能报错处理。 如果是UPDATE和UPDATE并发,UPDATE和DELETE并发场景,需要串行执行才能解决问题,如果是DELETE和DELETE并发,关闭行迁移开关可以解决问题。
  • 功能描述 创建分区表。分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。 常见的分区方案有范围分区(Range Partitioning)、间隔分区(Interval Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partitioning)等。目前行存表支持范围分区、间隔分区、哈希分区、列表分区。 范围分区是根据表的一列或者多列,将要插入表的记录分为若干个范围,这些范围在不同的分区里没有重叠。为每个范围创建一个分区,用来存储相应的数据。 范围分区的分区策略是指记录插入分区的方式。目前范围分区仅支持范围分区策略。 范围分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。这是最常用的分区策略。 间隔分区是一种特殊的范围分区,相比范围分区,新增间隔值定义,当插入记录找不到匹配的分区时,可以根据间隔值自动创建分区。 间隔分区只支持基于表的一列分区,并且该列只支持TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE数据类型。 间隔分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则根据分区键值和表定义信息自动创建一个分区,然后将记录插入新分区中,新创建的分区数据范围等于间隔值。 哈希分区是根据表的一列,为每个分区指定模数和余数,将要插入表的记录划分到对应的分区中,每个分区所持有的行都需要满足条件:分区键的值除以为其指定的模数将产生为其指定的余数。 哈希分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则返回报错和提示信息。 列表分区是根据表的一列,将要插入表的记录通过每一个分区中出现的键值划分到对应的分区中,这些键值在不同的分区里没有重叠。为每组键值创建一个分区,用来存储相应的数据。 列表分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。 分区可以提供若干好处: 某些类型的查询性能可以得到极大提升。特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下。分区可以减少数据的搜索空间,提高数据访问效率。 当查询或更新一个分区的大部分记录时,连续扫描该分区而不是访问整个表可以获得巨大的性能提升。 如果需要大量加载或者删除的记录位于单独的分区上,则可以通过直接读取或删除该分区以获得巨大的性能提升,同时还可以避免由于大量DELETE导致的VACUUM超载(哈希分区不支持删除分区)。
  • 语法格式 CREATE TABLE [ IF NOT EXISTS ] partition_table_name { ( [ { column_name data_type [ CHARACTER SET | CHARSET charset ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ] ] ) | LIKE source_table } [ table_option [ [ , ] ... ] ] [ htap_option ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespace_name ] PARTITION BY { {RANGE [COLUMNS] (partition_key) [ INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] ] [ PARTITIONS integer ] ( partition_less_than_item [, ... ] )} | {RANGE [COLUMNS] (partition_key) [ INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] ] [ PARTITIONS integer ] ( partition_start_end_item [, ... ] )} | {LIST [COLUMNS] (partition_key) [ AUTOMATIC ] [ PARTITIONS integer ] ( PARTITION partition_name VALUES [IN] (list_values) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ { COLVIEW | NOCOLVIEW } [ PRIORITY { HIGH | LOW | NONE } ] ][TABLESPACE [=] tablespace_name ][, ... ])} | {{ HASH | KEY } (partition_key) [ PARTITIONS integer ] ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ { COLVIEW | NOCOLVIEW } [ PRIORITY { HIGH | LOW | NONE } ] ][TABLESPACE [=] tablespace_name ][, ... ])} } [ { ENABLE | DISABLE } ROW MOVEMENT ]; 其中table_option为: { COMMENT [ = ] 'string' | AUTO_INCREMENT [ = ] value | [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset | [ DEFAULT ] COLLATE [ = ] default_collation | ENGINE [ = ] { InnoDB | 'InnoDB' | "InnoDB" } } 其中htap_option为: { COLVIEW [ PRIORITY { HIGH | LOW | NONE } ] | NOCOLVIEW [ PRIORITY { HIGH | LOW | NONE } ]} 列约束column_constraint: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | ON UPDATE update_expr | GENERATED ALWAYS AS ( generation_expr ) [STORED] | GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity_options ) ] | AUTO_INCREMENT | COMMENT 'string' | COLVIEW | NOCOLVIEW | UNIQUE [KEY] index_parameters | PRIMARY KEY index_parameters | REFEREN CES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 表约束table_constraint: [ CONSTRAINT [ constraint_name ] ] { CHECK ( expression ) | UNIQUE [ index_name ][ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | PRIMARY KEY [ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | FOREIGN KEY [ index_name ] ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] { [ COMMENT 'string' ] [ ... ] } like选项like_option: { INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | RELOPTIONS| UPDATE | IDENTITY | ILM | ALL } 索引存储参数index_parameters: [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 注意事项 唯一约束和主键约束的约束键包含所有分区键将为约束创建LOCAL索引,否则创建GLOBAL索引。 目前哈希分区仅支持单列构建分区键,暂不支持多列构建分区键。 只需要有间隔分区表的INSERT权限,往该表INSERT数据时就可以自动创建分区。 对于分区表PARTITION FOR (values)语法,values只能是常量。 对于分区表PARTITION FOR (values)语法,values在需要数据类型转换时,建议使用强制类型转换,以防隐式类型转换结果与预期不符。 分区数最大值为1048575个,一般情况下业务不可能创建这么多分区,这样会导致内存不足。应参照参数local_syscache_threshold的值合理创建分区,分区表使用内存大致为(分区数 * 3 / 1024)MB。理论上分区占用内存不允许大于local_syscache_threshold的值,同时还需要预留部分空间以供其他功能使用。 考虑性能影响,一般建议单表最大分区数不超过2000,子分区数 *(LOCAL索引个数 + 1) 不超过10000。 当分区数太多导致内存不足时,会间接导致性能急剧下降。 指定分区语句目前不能走全局索引扫描。 不支持XML类型数据作为分区键、二级分区键。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。
  • default_statistic_granularity 参数说明:默认情况下,当未指定PARTITION_MODE时,指定默认收集哪些分区表分区级统计信息。对非分区表不生效。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 取值范围: all:收集整表、一级分区、二级分区的统计信息。 global:收集整表的统计信息。 partition:收集一级分区的统计信息。 global_and_partition:收集整表、一级分区的统计信息。 subpartition:收集二级分区的统计信息。 all_complete:收集整表、一级分区、二级分区的统计信息。 默认值:all。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。如果需要收集分区级统计信息,可根据实际需要设置,但可能会对ANALYZE的性能产生一定影响。 设置不当的风险与影响:需要在维护开销与统计信息准确性间权衡,设置不当可能导致一方代价过大。
  • enable_fast_numeric_agg 参数说明:该参数控制是否开启针对numeric数据类型的agg优化。多租场景下,该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启numeric数据类型的agg优化。 off:表示不开启numeric数据类型的agg优化。 默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭后可能会导致对应场景查询性能下降。
  • stats_history_retention_time 参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留时间。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息的保留时间超过该阈值后,再次收集新的统计信息时,已经超过保留时间的统计信息会被清理。 参数类型:浮点型 参数单位:天 取值范围:-1、0 ~ 365000,-1表示历史统计信息不因时间而清除。 默认值:31 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,如果需要记录更早时间的历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。 设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。
  • enable_auto_explain 参数说明:控制是否开启自动打印执行计划,该参数可用来定位慢存储过程或慢查询。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启。 off:表示关闭。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,若需要查看执行计划,则开启,但会降低当前系统性能。 设置不当的风险与影响:开启后可能会降低当前系统性能。
  • enable_indexscan_optimization 参数说明:控制是否对astore存储引擎下的btree索引扫描(IndexScan和IndexOnlyScan)进行优化。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。
  • immediate_analyze_threshold 参数说明:插入数据后自动做analyze的阈值。当一次新增数据量达到原有数据量的immediate_analyze_threshold倍,且原有数据和本次新增数据的总行数超过一百时,会自动触发一次analyze。 参数类型:整型 参数单位:无 取值范围:0 ~ 1000。当取值为0时,该功能关闭。 默认值:0 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:对数据变化较快且需要不断更新统计信息的表设置为较小值,对达到一定量数据后统计信息才产生较大波动的表设置为较大值。 设置不当的风险与影响:设置过大时,可能导致统计信息未能及时更新;设置过小时,可能导致统计信息分析的开销过大。 该功能只支持永久表和非日志表,不支持临时表。 同一表不会在10s内两次被自动触发analyze。
  • enable_dynamic_samplesize 参数说明:是否动态调整采样行数。对于超过一百万行的大表,收集统计信息时动态调整采样行数,提高统计信息准确性。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示该功能打开。 off:表示该功能关闭。 默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭后可能会降低统计信息准确性。 动态调整采样行数的功能仅支持绝对值采样。
  • auto_explain_level 参数说明:控制自动打印执行计划的日志等级。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 取值范围: log:表示在日志中打印执行计划。 notice:表示以提示的形式打印出计划。 默认值:log。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • enable_inner_unique_opt 参数说明:控制是否对嵌套循环连接、哈希连接、排序归并连接进行Inner Unique优化,即在连接条件中内表对应的属性满足唯一性约束的情况下,是否减少匹配次数。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。
  • stats_history_record_limit 参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留数目上限。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息数量达到该阈值,再次收集新的统计信息时,时间较早的统计信息会被清理。 参数类型:整型 参数单位:条 取值范围:0 ~ 100 默认值:10 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,如果需要记录更多历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。 设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。
  • enable_force_vector_engine 参数说明:对于支持向量化的执行器算子,如果其子节点是非向量化的算子,通过设置此参数为on,强制生成向量化的执行计划。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示可以向量化的算子强制生成向量化。 off:表示由向量化算子优化器决定是否向量化。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,在向量化业务场景下推荐打开。 设置不当的风险与影响:启用该参数可能导致查询性能劣化。
  • enable_startwith_debug 参数说明:该参数控制是否显示start with/connect by用于debug的信息,打开该参数可以显示start with/connect by特性所有涉及的尾列相关信息。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启。 off:表示关闭。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,在问题定位时打开。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • auto_explain_log_min_duration 参数说明:控制自动打印执行计划的耗时阈值,整体耗时大于auto_explain_log_min_duration的执行计划才会被打印。比如该参数设置为0时,所有执行过的执行计划都会输出;设置为3000时,单次语句执行耗时超过3000毫秒的所有执行的执行计划会输出。该参数可在PDB级别设置。 参数类型:整型 参数单位:毫秒(ms) 取值范围:0 ~ 2147483647 默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,设置为100,不带单位,表示100ms;设置为2min,带单位,表示2min。取值如果要带单位,必须为ms、s、min、h、d。 设置建议:推荐使用默认值。可根据业务需要调整数值,以输出慢查询语句。 设置不当的风险与影响:设置过小可能会导致输出内容过多。
  • enable_uniq_idx_a_compat 参数说明:控制复合唯一索引针对Null值是否兼容A数据库。多租场景下,该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示兼容。 off:表示不兼容。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:该参数仅在A兼容性的数据库中适用,建议使用默认值。 设置不当的风险与影响:设置不当可能会影响兼容性或导致查询规划开销增加。
  • enable_invisible_indexes 参数说明:设置优化器是否可以使用不可见索引。该参数可在PDB级别设置。 索引在被设置为不可见状态后,可能会对查询语句的性能产生影响。此时若不想变更索引可见性状态,且打算使用不可见索引,可设置enable_invisible_indexes参数为on。 参数类型:布尔型 参数单位:无 取值范围: on:优化器可以使用不可见索引。 off:优化器不可以使用不可见索引。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:使用不可见索引但未开启此参数时,可能导致忽略不可见索引,因此可能有更优计划未被考虑。
  • codegen_cost_threshold 参数说明:由于LLVM编译生成最终的可执行机器码需要一定时间,因此只有当实际执行的代价大于编译生成机器码所需要的代价和优化后的执行代价之和时,利用代码生成才有收益。codegen_cost_threshold标识代价的阈值,当执行估算代价大于该代价时,使用LLVM优化。codegen使用执行算子的plan_rows作为代价与codegen_cost_threshold进行比较,plan_rows的值可以通过explain命令查看。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0 ~ 2147483647 默认值:100000。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,在需要调整codegen机制的触发阈值时再做修改。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • scan_wait_for_bloom_filter 参数说明:扫描算子是否等待BloomFilter创建完成。多租场景下,该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示算子必须等待BloomFilter创建完成再开始扫描。 off:表示算子无需等待BloomFilter创建完成即可开始扫描。待BloomFilter创建完成后,若扫描还未完成,会在下一个扫描的batch中开始使用BloomFilter。 默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在另一个参数enable_bloom_filter打开的情况下生效。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • enable_codegen_print 参数说明:标识是否允许在log日志中打印所生成的LLVM IR函数。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许在log日志中打印IR函数。 off:表示不允许在log日志中打印IR函数。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值,在问题定位时再开启。 设置不当的风险与影响:若开启则会产生大量的log日志,占用磁盘I/O,使数据库系统前台查询的读写性能下降。
  • enable_extrapolation_stats 参数说明:对于日期类型,标识是否允许基于历史统计信息使用推理估算的逻辑。若使用该逻辑,对于未及时收集统计信息的表,可以提高估算的准确性,但也存在推理错误导致估算过大的可能。在日期类型数据定期插入的场景下,需要开启此开关。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许基于历史统计信息使用推理估算的逻辑。 off:表示不允许基于历史统计信息使用推理估算的逻辑。 默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。在启用enable_extrapolation_stats之前,应该评估数据的变化频率和查询模式。如果数据变化很快,而且查询优化器经常需要处理不完整的统计信息,启用这个参数可能会有所帮助。在正式启用之前,应该在测试环境中进行充分的测试,以确定启用外推统计信息对性能的具体影响。启用外推统计信息后,应密切监控查询性能和数据库的统计信息准确性,确保没有引入性能问题或导致统计信息的准确性大幅下降。 设置不当的风险与影响:打开后可能会存在推理错误导致查询性能下降的可能。
  • codegen_compile_thread_num 参数说明:该参数用于设置Codegen编译线程的线程数量。 参数类型:整型 参数单位:无 取值范围:1 ~ 8 默认值:1 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值,当业务的并发量较大且业务的性能瓶颈在表达式执行流程时再做修改。 设置不当的风险与影响:线程数量设置过多,可能会导致系统性能下降。但当业务并发量较大时,可适当调大线程数以提升吞吐性能。
  • llvm_max_memory 参数说明:此参数设置Codegen编译产生的IR(包括缓存的和正在使用的)所占用的最大内存。Codegen使用的内存不采用预占的方式申请,属于max_dynamic_memory的一部分,且受llvm_max_memory参数的限制。 参数类型:整型 参数单位:kB 取值范围:0 ~ 2147483647,超过设定值则不再使用Codegen执行逻辑,降级为原有递归执行逻辑。当到达该上限触发执行降级后,调小llvm_max_memory的值无法立即释放多余IR所占用的内存,实际IR所占用的内存随着对应的SQL执行完毕后释放。 默认值:131072(即128MB) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,设置为100,不带单位,表示100kB;设置为16MB,带单位,表示16MB。取值如果要带单位,必须为kB、MB、GB。 设置建议:推荐使用默认值,当系统视图gs_total_memory_detail中llvm_used_memory项到达默认值上限且业务的性能瓶颈在表达式执行流程时再做修改。 设置不当的风险与影响: 最大占用内存如果设置过小,则易使系统不再使用Codegen执行逻辑,影响功能使用。 最大占用内存如果设置过大,可能会造成LLVM的编译过多占用其他线程的资源,造成系统整体性能下降。
共100000条