更新时间:2024-11-05 GMT+08:00

8.1.3版本新增功能

8.1.3.x版本新增功能参见新增功能,各补丁解决问题列表参见8.1.3.x补丁新增功能及解决问题

【V8.1.3.336版本发布时间】:2024年10月15日

【V8.1.3.333版本发布时间】:2024年06月30日

【V8.1.3.330版本发布时间】:2024年03月16日

【V8.1.3.325版本发布时间】:2023年11月02日

【V8.1.3.323版本发布时间】:2023年10月16日

【V8.1.3.322版本发布时间】:2023年08月04日

【V8.1.3.321版本发布时间】:2023年06月26日

【V8.1.3.320版本发布时间】:2023年05月19日

【V8.1.3.310版本发布时间】:2023年03月09日

【V8.1.3.300版本发布时间】:2022年12月19日

【V8.1.3.200版本发布时间】:2022年10月31日

【V8.1.3.110版本发布时间】:2022年08月23日

【V8.1.3.100版本发布时间】:2022年06月20日

【V8.1.3版本发布时间】:2022年04月15日

新增功能

表1 8.1.3新增功能

特性

描述

参考文档

支持自增分区和分区表管理功能

分区管理新增PERIOD(interval类型)和TTL(interval类型)

CREATE TABLE

ALTER TABLE

CREATE TABLE PARTITION

外表支持json格式

  1. HDFS外表READ ONLY外表支持JSON文件格式。
  2. OBS外表READ ONLY外表支持JSON文件格式。

CREATE FOREIGN TABLE (SQL on Hadoop or OBS)

跨集群互联互通特性

  1. 解除约束:
    1. 解除GDS的hang约束;
    2. 解除常用聚合函数约束:sum/count/min/max/avg等;
    3. 解除标量函数、分析函数约束;
    4. 增加互联互通外表与源表的列名、列类型强校验;
    5. 解除列名不可包含“WHERE”约束;
    6. 解除limit约束;
    7. 完善临时GDS外表策略。
  2. 本地集群是目标集群时,发起数据同步业务。

基于GDS的跨集群互联互通

冷热表功能增强

冷热自动搬迁。

CREATE TABLE

行存ring buffer可通过开关控制

ring buffer提供开关控制和阈值调整,大表批量更新不使用ring buffer

buffer_ring_ratio

GDS支持欧元符

GBK字符集支持欧元符。

CREATE DATABASE

OBS外表支持XSKY S3

OBS外表适配XSKY,新增eol参数。

CREATE FOREIGN TABLE (SQL on Hadoop or OBS)

SQL支持了位图功能(RoaringBitmap)

支持位图功能(RoaringBitmap),更好支撑互联网业务常见的客户画像业务。

位图函数和操作符

RoaringBitmap类型

TD兼容支持不区分大小写

TD数据源迁移至DWS的大量存储过程涉及到去重操作,源数据中存在大量内容相同但是大小写不同的数据,DWS中使用distinct去重后会有大量重复数据,使用upper函数会改变源数据,存储过程数量多,逻辑复杂,手动修改难度大,需要增加DWS不区分大小写的特性。

排序规则支持

排序规则版本函数

List分区

分区表支持List分区。

MySQL兼容性增强

ALTER TABLE支持同时修改多个列。

ALTER TABLE支持COMMENT。

ALTER TABLE支持CHANGE、DROP KEY、DROP PARTITION和FIRST/AFTER。

ALTER INDEXCREATE INDEX

ALTER TABLECREATE TABLE

ALTER TABLE PARTITION

projection pushdown

对于多列视图场景,引用时自动去除无用的列,避免多余计算。

rewrite_rule新增projection pushdown描述。

share scan

share scan

stream计划CTE支持share scan:

新增enable_stream_ctescan

logging_module增加取值STREAM_CTESCAN

SELECT语法的WITH子句中增加可选的[[NOT] MATERIALIZED]支持是否物化语法。

列存Bloom Filter

外表侧同线程包含有HDFS内外表或列存表的HASH JOIN会触发Bloom Filter。

enable_bloom_filter

列存复制表支持UPDATE

复制表支持UPDATE、DELETE和MERGE INTO等操作。

MERGE INTO

UPDATE

UPSERT

细粒度权限管理

  1. 新增表级权限Alter/Drop/Vacuum。
  2. 新增Schema级权限Alter/Drop。
  3. 新增预置角色role_signal_backend、role_read_all_stats。

解决INSERT OVERWRITE多CN死锁问题

多CN同时触发INSERT OVERWRITE不会造成死锁。

-

执行计划优化

  • SQL关联条件含or,执行计划走nestloop导致性能差,改写为union all优化。
  • SQL存在关联,过滤条件中含or条件,列存表的关联前对or的条件剪枝。
  • 集群DN数量较多时,大表与小表关联时,小表不走重分布操作而是走广播操作。

SQL调优关键参数调整

rewrite_rule新增projection_pushdown和or_conversion。

基于Relfile的空间统计与空间管控

  1. pg_table_size、pg_relation_size、table_skewness等系列视图的查询能够秒级返回结果。
  2. schema空间管控能够统计全量空间,解除当前约束。
  3. user/schema空间管控校准函数能够快速执行,schema空间校准函数自动执行。
  4. schema空间配额的SQL接口能够按照schema总空间分配而非DN级别。

性能定位定界增强专项

  1. 通信异常监测日志增强。
  2. pgxc_stat_activity视图增强。
  3. 支持Top SQL与Unique SQL关联。
  4. 新增pg_session_wlmstat分布式视图

资源负载管理优化重构

  1. 用户资源监控增强:用户资源监控逻辑整改。
  2. 资源监控增强:优化作业、用户资源监控,并增加队列级别资源监控。

分区表特性修改

  1. 边界值个数约束修改:分区表的所有分区数不超过32767个,所有分区的边界值个数不大于32767个。
  2. 修改创建默认分区策略:建分区表时,将创建两个默认分区,这两个默认分区的分区时间范围均为PERIOD。

CREATE TABLE PARTITION

Agg重分布列Hint

Oracle数仓迁移过程中,通过增强Hint特性手动指定分布列。

Plan Hint调优概述

Stream方式的Hint

新增除零返回NULL(8.1.3.110新增)

MySQL兼容模式下,除数为0时,控制除法取余操作是否报错。参数behavior_compat_options新增兼容配置项enable_division_by_zero_mysql。

behavior_compat_options

DDL锁超时配置(8.1.3.200新增)

新增GUC参数ddl_lock_timeout,可对DDL锁超时时间进行配置。

ddl_lock_timeout

PG_LOCKS视图增强(8.1.3.200新增)

  • 新增视图PGXC_WAIT_DETAIL和PGXC_LOCKWAIT_DETAIL
  • 增加wait_on_pid、query_id等字段。

数据脱敏可算不可见兼容配置(8.1.3.310新增)

新增GUC参数redact_compat_options,用于设置数据脱敏可算不可见兼容性行为配置项。

truncate、exchange与select并发(8.1.3.320新增)

新增GUC参数ddl_select_concurrent_mode,该特性主要解决数据量较大或复杂查询的场景中,查询语句持续时间过长,阻塞DDL的场景,与Oracle效果一致。

支持场景:

  • 支持truncate和select并发;
  • 支持exchange和select并发。

场景约束:

  • 与高级别的锁冲突(大于1级),不支持并发(比如autoanalyze_mode=normal时,同时select触发了autoanalyze);
  • 与事务块中的锁冲突,不支持并发。

DWS常用连接方式约束:

  • jdbc、odbc、python驱动时,如果程序设置了autocommit = false,不支持该特性;
  • Data Studio下发的所有查询语句,自动起事务,不支持该特性。

ddl_select_concurrent_mode

支持控制LIMIT语句是否启用early stop优化(8.1.3.320新增)

新增GUC参数enable_limit_stop,控制LIMIT语句是否启用early stop优化。

enable_limit_stop

early stop功能行为变更(8.1.3.322新增)

GUC参数enable_limit_stop默认值改为on。

enable_limit_stop

normalize_negative_zero(8.1.3.333新增)

behavior_compat_options参数中新增选项normalize_negative_zero,控制ceil(),round()函数在处理float类型特定值时返回-0与否。

开发指南 > GUC参数> 其他选项 >behavior_compat_options

internal_compat_options

(8.1.3.333新增)

新增参数GUC参数internal_compat_options控制数据库兼容性行为配置项。其中light_proxy_permission_compat选项用于light Proxy场景下嵌套查询权限配置项。

开发指南 > GUC参数>其他选项

disable_client_detection_commit

(8.1.3.333新增)

behavior_compat_options参数中新增disable_client_detection_commit选项,控制是否在每次事务提交之前,检测与客户端的连接是否存在。

开发指南 > GUC参数> 其他选项 >behavior_compat_options

enable_stream_ctescan新装默认关闭

(8.1.3.333修改)

修改enable_stream_ctescan参数,升级前向兼容,新装默认关闭。

开发指南 > GUC参数> 优化器方法配置

enable_trunc_orc_string

(8.1.3.336新增)

控制orc格式外表字段为varchar(n),但是orc文件字段类型为string,且string长度超过n时,外表查询的行为。

开发指南 > GUC参数> 其他选项 >behavior_compat_options

gds_fill_multi_missing_fields

(8.1.3.336新增)

gds_fill_multi_missing_fields

控制GDS外表容错性参数fill_missing_fields设置为true/on时的行为。

开发指南 > GUC参数> 其他选项 >behavior_compat_options

SQL语法

表2 SQL语法

变更类型

序号

名称

变更描述

新增

1

create foreign table (SQL on Hadoop or OBS)

OPTION选项format参数新增json。

2

create foreign table (SQL on Hadoop or OBS)

OPTION选项新增force_mapping。

3

列类型kvtype

建表和alter column语法在列类型后面指定kvtype类型(tstag, tsfield, tstime),用于指定时序表的列类型。

4

表级参数sub_partition_count

用于设置时序表二级分区的个数。

5

表级参数ttl

用于指定自增分区的过期时间。

6

表级参数period

用于指定add分区任务和drop分区任务的触发时间间隔、单个分区时间范围。

7

支持List分区

新增list分区操作语法,包括创建、ALTER各项操作。其中创建语法时单独的语法分支;AT语法除split外,其它和range分区类似。

8

alter table add index/drop index

新增alter table语法分支新增和删除索引。

9

create table ... like

新增create table ... like不带括号的语法形式 。

10

alter table ... add/modify column

新增alter table对column的添加和修改语句,现支持设置comment和default。

11

with cte as后新增[NOT] MATERIALIZED语法

with cte as后新增[NOT] MATERIALIZED语法。

12

alter index ... comment

增加alter index语法支持comment子句。

13

alter table ... add index comment

增加alter table add index语法支持comment子句。

14

create index index_name on table_name comment

增加create index语法适配comment子句。

15

copy to

copy to语句OPTION选项新增server、bom、fileprefix、maxrow。

16

create foreign table(obs导入导出)

create foreign table(obs导入导出)语句OPTION选项新增bom。

17

操作符=

如果两个roaringbitmap相等则返回true,否则返回false。

18

操作符<>

如果两个roaringbitmap不相等则返回true,否则返回false。

19

操作符&

计算两个roaringbitmap求交集以后的结果。

20

操作符|

计算两个roaringbitmap求并集以后的结果。

21

操作符|

计算一个roaringbitmap中增加一个id以后的结果。

22

操作符#

计算两个roaringbitmap做异或运算后的结果。

23

操作符-

计算在第一个roaringbitmap,但是不在第二个roaringbitmap中的集合。

24

操作符-

在roaringbitmap中去掉指定的id后的结果。

25

操作符@>

前面的roaringbitmap如果包含后面的元素则返回true,否则返回false。

26

操作符<@

前面的roaringbitmap如果被后面的元素包含则返回true,否则返回false。

27

操作符&&

两个roaringbitmap如果有交集则返回true,否则返回false。

28

ALTER TABLE DROP KEY

新增删除索引语法,与alter table drop index用法相同。

29

ALTER TABLE CHANGE

兼容MySQL中的change语法,可以同时修改列名以及列属性。

30

ALTER TABLE ... FIRST/AFTER colname

语法层实现支持FIRST/AFTER语法,但不实现实际语义,适用alter table add/modify/change column场景,受参数skip_first_after_mysql控制。

31

AGG HINT

新增对于agg的hint,可用于性能调优。

32

ALTER TABLE ... ALTER COLUMN cstore_cu_sample_ratio

为了少解压CU,样本都集中在随机选择的CU里,样本比较集中,不容易获取数据特征。

加这个字段属性是为了在不增大采样率的情况下,多筛选一些CU,易于获取数据特征。

修改

33

表级参数deltarow_threshold

表级参数deltarow_threshold的默认值设置为10000,指定列存表导入时小于多少行的数据进入delta表,只在表级参数enable_delta开启时生效。

34

btree索引支持类型扩展

该开源的引入,将btree索引支持的类型进一步扩展,在满足对应表支持类型的基础上,对行存表、列存表和时序表等都是适用的。btree_gin提供了一个为数据类型int2、int4、int8、float4、float8、timestamp with time zone、timestamp without time zone、time with time zone、time without time zone、date、interval、oid、money、"char"、varchar、text、bytea、bit、varbit、macaddr、macaddr8、inet、cidr、uuid、name、bool、bpchar和所有enum类型。

35

grant/revoke/alter default privileges语法

增加Alter/Drop/Vacuum权限。

36

ALTER TABLE ... DROP PARTITION

drop partition语法可支持删除多个分区。

37

CREATE/ALTER TABLE中字段DEFAULT子句

create/alter table中的DEFAULT子句,不再支持后缀操作符(当前唯一的后缀操作符是阶乘!),如:create table t (a int default 3!);

关键字

表3 关键字

变更类型

序号

名称

变更描述

新增

1

MATERIALIZED

with cte as后新增[NOT] MATERIALIZED语法。作为非保留关键字,不影响其作为其他对象名,作为列别名时需要加AS。

2

time_fill

用于时间填充表达式输出time_fill列,作为关键字,不能用作函数名和自定义数据类型名。

3

fill_first/fill_last/fill_avg

用于时间填充表达式,输出填充列,作为关键字,不能用作函数名和自定义数据类型名。

4

list

用于指定分区表类型,作为非保留关键字,不影响其作为其他对象名,作为列别名时需要加AS。

5

tsfield/tstag/tstime

用于指定时序表kvtype类型,作为非保留关键字,不影响其作为其他对象名,作为列别名时需要加AS。

系统表

表4 系统表

变更类型

序号

名称

变更描述

新增

1

rb_added

RoaringBitmap中增加一个值。

2

pg_partition

pg_partition新增字段boundexprs。

3

pg_relfilenode_size

新增系统表。

4

pg_attribute

pg_attribute新增attkvtype列,记录列的kvtype类型。

5

pg_collation

新增一条记录case_insensitive,用于支持大小写不敏感行为。

系统函数

表5 系统函数

变更类型

序号

名称

变更描述

新增

1

rb_build

将int数组转成一个bitmap类型。

2

rb_to_array

rb_build的逆向操作,把RoaringBitmap转成int数组。

3

rb_and

两个RoaringBitmap做交集操作。

4

rb_or

两个RoaringBitmap做并集操作。

5

rb_xor

两个RoaringBitmap做异或操作。

6

rb_andnot

两个RoaringBitmap做and后取反。

7

rb_cardinality

计算一个RoaringBitmap的基数。

8

rb_and_cardinality

计算两个RoaringBitmap求and以后的基数。

9

rb_or_cardinality

计算两个RoaringBitmap求or以后的基数。

10

rb_xor_cardinality

计算两个RoaringBitmap求xor以后的基数。

11

rb_andnot_cardinality

计算两个RoaringBitmap求andnot以后的基数。

12

rb_is_empty

判断一个RoaringBitmap是否为空。

13

rb_equals

判断两个RoaringBitmap是否相等。

14

rb_intersect

判断两个RoaringBitmap是否相交。

15

rb_contain

判断第一个RoaringBitmap是否包含指定的值。

16

rb_add

RoaringBitmap中增加一个值。

17

rb_remove

RoaringBitmap中删除一个值。

18

rb_flip

翻转指定范围的RoaringBitmap。

19

rb_min

求一个RoaringBitmap的最小值。

20

rb_max

求一个RoaringBitmap的最大值。

21

rb_rank

返回Bitmap中小于等于指定Offset的基数。

22

rb_contain_rb

判断第一个RoaringBitmap是否包含第二个roaringbitmap。

23

rb_containedby_rb

判断第二个RoaringBitmap是否包含第一个roaringbitmap。

24

rb_containedby

判断指定的值是否被指定的roaringbitmap包含。

25

rb_iterate

返回RoaringBitmap对应的int 。

26

rb_and_agg

将RoaringBitmap列按照and逻辑做聚合。

27

rb_or_agg

将RoaringBitmap列按照or逻辑做聚合。

28

rb_xor_agg

将RoaringBitmap列按照xor逻辑做聚合。

29

rb_and_cardinality_agg

将RoaringBitmap列按照and逻辑做聚合后的基数。

30

rb_or_cardinality_agg

将RoaringBitmap列按照or逻辑做聚合后的基数。

31

rb_xor_cardinality_agg

将RoaringBitmap列按照xor逻辑做聚合后的基数。

32

rb_build_agg

将int列聚合成RoaringBitmap类型数据。

33

pgxc_wlm_readjust_relfilenode_size_table()

空间统计校准函数,不重建PG_RELFILENODE_SIZE系统表,重新校准用户和schema空间。

34

gs_table_distribution()

快速查询系统中表大小的函数。

35

pg_obs_cold_refresh_time

修改obs多温表自动切换任务时间。

36

gs_clean_tag_relation

清理tag表中无用的tagid行数据。该函数入参为时序表OID,每个分区遍历cudesc表tagid列的最小值,从而得到整个时序表tagid的最小值。

37

proc_drop_partition

用于将分区boundary时间超过TTL的分区进行drop。

38

proc_add_partition

用于为分区表创建分区。

39

pg_collation_actual_version

返回ICU排序规则的实际版本号。

40

first

分组内第一个元素。

41

last

分组内最后一个元素。

42

mode

分组内出现频率最高的值。

43

delta

相邻两行的差值。

44

percentile_of_value

近似百分位的值。

45

value_of_percentile

近似百分位。

46

spread

分组内最大值和最小值的差值。

47

pg_flush_buffers

刷出所有行存脏页。

修改

48

pg_stat_activity系列视图

pg_stat_get_activity_with_conninfo、pg_stat_activity、pgxc_stat_activity、pg_stat_get_activity视图新增stmt_type和lwtid列。

49

pg_authid系统表新增两行

新增pg_role_signal_backend,pg_role_read_all_stats预置角色。

50

vac_fileclear_relation

可以返回指定表真实清理文件的数量,不清理返回0。

51

vac_fileclear_all_relation

可以返回所有列存表真实清理文件的数量,不清理则返回0。

系统视图

表6 系统视图

变更类型

序号

名称

变更描述

新增

1

pgxc_session_wlmstat

新增视图。

2

pg_comm_query_speed

新增视图,根据query_id查询发送信息。

3

pgxc_respool_resource_info

pgxc_respool_runtime_info

pgxc_respool_resource_history

gs_respool_resource_info

gs_respool_runtime_info

资源监控新增相关视图。

4

pgxc_wait_detail

pgxc_lockwait_detail

新增pg_locks增强视图。

修改

5

DBA_PART_INDEXES

DBA_PART_TABLES

DBA_TAB_PARTITIONS

USER_IND_PARTITIONS

USER_PART_INDEXES

USER_TAB_PARTITIONS

增加相关list分区描述。

6

pgxc_wlm_session_statistics

视图从所有CN查询TopSQL实时信息的逻辑由串行修改为并行,提升性能,功能不变。

7

all_indexes

sys和pg_catalog下面的视图all_indexes定义存在问题,不同scheam下存在同名对象的场景下会导致结果集膨胀。

行为变更

表7 行为变更

变更类型

序号

名称

变更描述

修改

1

create index目标表为时序表时

时序表创建的任何索引都会转换为tag表上的双索引,该双索引的索引列为指定的建索引的列。

2

负载管理新增二次管控

负载管理引入二次管控,提供更精细化的管控,FUNCTION、函数和多语句中包含复杂查询的可能触发多次管控,设置enable_transaction_parctl=off可以关闭二次管控,但同时会关闭事务块语句和多语句管控。

3

负载管理autoanalyze纳管

查询触发autoanalyze管控逻辑由不管控修改为管控,设置enable_transaction_parctl=off可以关闭autoanalyze管控。

4

用户监控视图pg_total_user_resource_info

  1. CPU/内存资源使用和限制全部修改为用户在集群内的资源使用和资源限制。
  2. CPU、IO、内存监控规格变更:由只监控复杂作业修改为监控所有作业。
  3. CPU监控逻辑变更:由cgroup监控修改为作业CPU监控汇总。

5

审计日志

  1. 事务内语句在未设置审计事务但设置审计对应语句类型时,仍进行审计。
  2. DECLARE CURSOR语句在guc参数audit_operation_exec设置select时也进行审计。

GUC参数

表8 GUC参数

变更类型

序号

名称

变更描述

新增

1

space_readjust_schedule

用户、schema空间是否自动校准的参数,默认值:auto,支持范围:off/auto/auto(xxxK/M/G)。

2

space_once_adjust_num

空间管控和空间统计功能中,控制慢速构建与细粒度校准操作中每次处理的文件个数阈值,默认值:300。

3

tag_cache_max_number

该参数用于设置全局哈希表tag cache缓存item的最大阈值,默认值10000000。

4

enable_tagbucket_auto_adapt

该参数用于设置是否开启tagbucket自适应调整,默认值on。

5

cache_tag_value_num

该参数用于在tag列lateread场景时,设置缓存的tag元组数量,默认值60000。

6

buffer_ring_ratio

用于控制行存Ringbuffer的阈值和开关,默认值250,即1/4(250/1000),与以前逻辑一致。

7

enable_stream_ctescan

新增参数,升级默认关闭,新装默认打开。控制stream计划是否开启share scan功能。

8

behavior_compat_options

新增disable_including_all_mysql选项用于控制MySQL兼容模式下create table like语法是否为including all模式,默认不设置,create table like语法为including_all模式。

9

profile_logging_module

增加GUC参数profile_logging_module配置记录性能日志的类型,升级和新装均默认打开OBS、HADOOP、REMOTE_DATANODE,关闭MD。该参数方法与日志模块开关logging_module相同。

10

object_mtime_record_mode

控制pg_object记录修改时间的行为,默认保持老版本行为,新增选项可控制不记录分区/truncate/grant/revoke。

11

skew_option

控制是否使用优化策略。

12

ddl_lock_timeout

配置ddl锁超时的时间。

修改

13

rewrite_rule

  • 新增选项orconversion,默认打开。

    使用等值关联的OR条件优化规则。变更点:计划从nestloop转到hashjoin。

  • 新增选项projection_pushdown,默认打开。

    变更点:子查询/CTE/视图中未使用的列被优化删除。

14

default_orientation

新增userset guc参数default_orientation,用于控制用户默认建表(不设置orientation)的类型,参数有三种类型可以设置:

行存表(row),列存表(column),开启delta表的列存表(column enabledelta)。

15

max_process_memory

初始化安装时OM设置max_process_memory公式为:可用内存*0.7/(1+DN数),其中系数0.7改为0.8。老集群升级、扩容等场景不变。

16

enable_bloom_filter

复用原参数,现用于控制列存BloomFilter,默认值不变(打开)。

17

retry_ecode_list

默认值新增45003,主要是处理list分区表查询和add分区并发场景下,查询分区可能错位的问题。

18

auth_iteration_count

将默认值从50000减少到10000,新装、升级均会修改。参数表示客户端和服务端密码哈希迭代次数。