更新时间:2024-07-12 GMT+08:00

8.1.3.x补丁新增功能及解决问题

8.1.3.333

表1 8.1.3.333新增功能/解决问题列表

类别

功能或问题描述

问题原因

问题出现版本

修复建议

新增功能

-

-

-

解决问题

集群升级后权限丢失。

升级到8.1.3.330后出现部分链路业务报错提示权限不足。低版本存在不合理的权限绕过,升级到修复了该问题的版本后,出现行为变更。

8.1.3.330

升级到8.1.3.333及以上

ceil函数使用输出-0影响业务判断。

负值float在ceil取整后是-0,使用SQL时将-0转成字符串'-0'存入表里,和'0'做比较由于不相等,造成条件不匹配。

8.1.3.33以前版本

subplan基础查询使用sqlbuil的fuzz测试,复杂查询出现core:(ctePlan != __null && ctePlan->isCtePlan&&InitStreamFlow。

finalize_node_id阶段会拷贝initplan,然后调整glob->subplans的顺序,但是plan->referencedCtePlanIds指向的cte的位置不会调整,因此指向了错误的subplan,后续就会认为这些cte没有用户引用,导致置为NULL。

8.1.3.33以前版本

DWS只写外表(hdfs)使用decimal数据类型hive查询为null。

DWS与Hive对decimal的处理存在部分差异。

8.1.3.333以前版本

with recursive语句长时间运行未结束。

arm环境下线程信息同步问题,导致变量更新不同步。

8.1.3.323

8.1.3.330

表2 8.1.3.330新增功能/解决问题列表

类别

功能或问题描述

问题原因

问题出现版本

修复建议

新增功能

-

-

-

解决问题

insert into select语句在计划生成阶段core,执行select部分不会core。

ORCLAUSE转换,对两个相同的sublink替换,将其指向同一个OpExpr,再次提升时在OffsetVarNodes中会将varno调整两次,造成后续core。

8.1.3.330以前版本

升级到8.1.3.330及以上

列存轻量化用例概率触发core:CStorePartitionInsert::findBiggestPartition。

列存分区表统计bulkloadUsedMemSize, 将update算子和insert算子混在一起统计,但是在判断是刷盘到disk时,内存自适应的大小是根据每个算子估出来的,导致g_bulkloadUsedMemSize统计常常大于估算值,update算子占用内存到估算内存临界值时,可能造成insert算子一条数据都无法插入。

8.1.3.330以前版本

出现wait ccn排队,但是看资源池的估算内存和占用内存,以及并发数未到排队阈值。

作业在CCN排队时无法进行全局内存校准,阻塞了作业。

8.1.3.330以前版本

用户直接查表没有权限 ,但是嵌套一层查询就可以查到。

light proxy的权限检查是在CN的checkLightQuery中调用权限校验公共函数ExecCheckRTPerms实现的,在DN上不会再进行权限检查。而在调用ExecCheckRTPerms时,其入参rangeTables需要是RTE_RELATION。否则会在ExecCheckRTEPerms中直接返回true。当是嵌套SQL时,类型是RTE_SUBQUERY,绕过了权限检查。

8.1.3.330以前版本

作业运行过程中偶现删除语句报错,报错信息为canceling statement due to statement timeout。

w报文未重新设置事务时间,导致线程复用。

8.1.3.330以前版本

json类型查询内存泄露,导致重分布占用大量内存影响业务。

在jsonb的out函数中存在内存未释放问题,数据量大时出现堆积造成使用内存高。

8.1.3.330以前版本

作业并发执行报错:tuple concurrently updated。

分区和表的oid相同,analyze时使用分区的oid更新了pg_object,实质上是将表的pg_object记录更新。此时有并发的DDL操作,例如alter table同时更新了表的pg_object记录,就会出现并发更新的报错。

8.1.3.330以前版本

8.1.3.325

表3 8.1.3.325新增功能/解决问题列表

类别

功能或问题描述

问题原因

问题出现版本

修复建议

新增功能

  • 新增支持GB18030_2022的字符编码。
  • 支持禁用子查询hint功能。
  • GDS外表兼容utf8非法字符。

-

-

-

解决问题

DN节点重启,日志截断,集群出现hang问题。

stream线程报错打印日志时,响应了cancel信号,再次打印日志会引发hang问题。

8.1.3.320

升级到8.1.3.325。

  • 业务表创建偶现报错:relation “xxx” already exists。
  • 业务偶现报错:could not read block xxx in file "xxx"。

OID使用超过42亿之后重新开始分配,在复用过程中引起业务偶现报错。

8.1.3.323及以下版本

DN备机checkpoint无法成功,导致备机xlog日志无法回收,持续堆积。

DN备机在redo checkpoint时,如果看到有不完整的btree分裂就会报告RM 11问题,实际上可能是btree分裂失败或者处于btree分裂过程中。

8.1.3.323及以下版本

列存表执行轻量化update和后台执行autovacuum并发操作时报错:Unsupported to update different rows with the same cuid and col in light update。

在轻量化update中,不支持使用相同的cuid和col更新不同的行。

8.1.3.323及以下版本

某些场景no_merge的hint操作不生效。

不支持禁用子查询hint功能。

8.1.3.323及以下版本

后台执行长时间查询语句时,通过CTRL + C方式结束语句未等语句彻底退出,又通过CTRL + Z方式退出gsql客户端,会导致语句残留。

CN收到CTRL + C的取消信号后,CN线程处于报错长跳转流程中,此时去调用EmitErrorReport,而EmitErrorReport未响应信号。

8.1.3.323及以下版本

使用大宽表与实时表做关联更新时出现内存占用率太高,影响性能。

使用大宽表与实时表做关联更新,更新时update会将无关列加上,导致执行计划做优化器估算时内存占用率太高,影响性能。

8.1.3.323及以下版本

ShareScan计划中,存放CTE的tuplestore和batchstore的内存不能扩展易产生下盘。

ShareScan执行计划结构体中的cteMaxMem未进行copy、read和write处理,导致DN上在CTE的执行计划上未获取到该值,导致创建的保存CTE结果集的tuplestore和batchstore无法进行内存扩展而下盘。

8.1.3.323及以下版本

执行列存轻量化update报错:could not determine data type of parameter。

在执行计划的Remote query中,创建parame参数为其在基表中的位置,且系统列也匹配不上该参数。

8.1.3.323及以下版本

8.1.3.322

表4 8.1.3.322新增功能/解决问题列表

类别

功能或问题描述

问题原因

问题出现版本

修复建议

新增功能

early stop功能行为变更:GUC参数enable_limit_stop默认值改为on。

-

-

-

解决问题

-

-

-

8.1.3.320

表5 8.1.3.320新增功能/解决问题列表

类别

功能或问题描述

问题原因

问题出现版本

修复建议

新增功能

truncate、exchange与select并发:

新增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下发的所有查询语句,自动起事务,不支持该特性。

-

-

-

支持控制LIMIT语句是否启用early stop优化:

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

-

-

-

解决问题

语句级估算内存超过max_process_memory限制,导致ccn排队。

语句级估算内存超过max_process_memory限制。

8.1.3.310及以下版本

升级到8.1.3.320及以上版本。

执行merge报错:value xxx is out of range for type integer。

pg_toast_get_baseid()函数中使用int接口处理OID。

8.1.3.310及以下版本

查询20万行数据大表的脏页率视图,内存占用大。

查询数据的时候,查询统计信息的内置函数中创建的链表内每个结点上申请了内存空间用于存放tupStatus,查询结束后,仅释放了链表上结点的内存,结点内申请的内存未释放。

8.1.1.x版本

Vacuum执行超时被查杀后,部分DN出现线程残留,无法响应信号,阻塞其他语句执行。

由于btvacuumscan中未响应信号,导致Vacuum执行超时被查杀后,部分dn出现线程残留,无法响应信号。

8.1.1.x版本

对MySQL兼容库中的分区表、时序表执行analyze百分比采样操作时报错:unsupported feature with temporary/unlogged table for partitioned table。

由于8.1.3版本中为了兼容MySQL中CREATE TABLE LIKE语法,默认继承模式为INCLUDING ALL,且执行analyze百分比采样时,含有自动创建临时复制表命令,导致analyze时出现报错。

8.1.3.310及以下版本

冷热表的select查询语句触发runtime autoanalyze,性能慢。

执行truncate partition,exchange partition,drop partition,alter distribute,alter column type这五种操作后,再执行select该表会触发autoanalyze。

8.1.3.310及以下版本

pg_session_wlmstat中elapsed_time与TOP SQL实际执行的时间不一致。

查询pg_session_wlmstat视图,语句处于RUNNING状态时elapsed_time过大。

8.0.x

给外表执行grant select权限时报错:has no distribute type。

obs dfs server只写外表没有指定默认的分布方式导致报错。

8.1.3.310及以下版本