Greenplum版本更新录(202x)
2023-10-14 20:04:45 阿炯

本文是从Greenplum的产品主页分离出来的,专门用于该软件的更新记录,截止到2029年12月31日。

Greenplum 是一个统一分析和人工智能 (AI) 平台,旨在帮助企业充分利用其数据资源。VMware Greenplum 核心是以开源 PostgreSQL 项目为基础,其独特之处在于将商业智能(BI)和人工智能(AI)功能无缝集成在同一平台上。

最新版本:5.0
基于PostgreSQL 8.3.23开发。

最新版本:6
GreenplumDB 6.0的正式版本已经发布,该版本包含了大量的新功能,包括将核心Postgres版本从8.3升级到9.4、复制表、并发更新和删除HEAP表时大幅度性能优化、使用zStandard算法更快更高效地进行数据压缩、磁盘配额、JSONB数据类型、支持GIN的文本和JSON索引、列级安全性、查询优化和执行的改进等等。更新列表非常长,具体内容请参见Greenplum从v5到v6的变更

最新版本:6.13
Greenplum 6.13.0于2020年12月18日发布,累积更新的新功能和bug修复信息如下:
--内置了全新的 VMware Tanzu Greenplum Connector for Apache NiFi 1.0.0.
该连接器提供了一种快速,简单,基于UI的方式来为Greenplum数据库搭建数据摄取管道,无需构建代码。连接器可以在VMware Tanzu Network上单独下载。
--GPSS 升级至1.5.0版本
以前强制设置的负载配置文件ERROR_LIMIT属性改成了可选
集成了开箱即用的Prometheus工具
--增加了 advanced_password_check contrib 模块
用户可以使用此模块为Greenplum数据库定制密码策略。
--Greenplum数据库查询优化器增加新的服务器配置参数
该参数被用于index-only scan,此类查询仅从索引回应查询,而无需访问堆表(heap table)。此配置参数名为optimizer_enable_indexonlyscan,并且默认情况下启用。

--集群管理
修复了gpstart的bug,在某些情况下cluster host无法访问时,gpstart可以继续启动进程;
修复了使用gpconfig -s client_min_messages设置客户端消息传递级别(如“notice”或“warning”)失效的问题
修复了当用户使用gpaddmirrors -p选项指定了有效的端口范围时,gpaddmirrors会生成类似这样的错误:Value of port offset supplied via -p option produces ports outside of the valid range. Mirror port base range must be between 6432 and 61000.

--计划器(planner)
修复了查询使用分组表达式(而非列名),且其他未分组目标引用了group key,会导致Postgres Planner崩溃或返回错误结果的问题。

**-**锁
改进了锁行为,以避免在append-only(AO)表上创建多个索引时可能发生的死锁。

--查询优化器
修复了对Greenplum复制表的serial-type column的查询(创建的DISTRIBUTED REPLICATED) 不能在所有segment上返回一致的值的问题

--执行器
解决了Greenpum数据库在EntryDb(在主实例上运行的特殊QE)中运行某些系统功能时有时会返回错误结果的问题。
解决了哈希表溢出到磁盘时可能导致segment fault的问题
修复了当某些查询包含merge join和动态分布消除时,计划器会生成不正确的查询计划的问题。

--Segment 镜像
修复了统计信息收集器收集镜像将统计信息时,内核Recv-Q缓冲区在Greenplum mirror segment实例上被占满,但由于镜像未处于热备用模式收集器未运行的问题。

--存储:Segment 镜像
更新了pg_rewind,以减少其执行的lstat操作的数量,从而提高大量数据文件的增量恢复的性能。

Greenplum 6.12.1

--服务器
修复了可能导致Stand Master节点出错关闭的内存溢出问题。

--Postgres 计划器
修复了选择在指定一个或多个空GROUP SETS的查询返回错误结果的问题。

--查询优化器
修复了当查询包含带有本地谓词和链接谓词的index join时,查询优化器未能执行分区消除,具有btree索引的表的查询时间比预期长的问题。

--优化器
修复了由于使用了全表扫描而非索引导致某些IN查询执行缓慢的问题。

--集群管理
修复了将mirror segment移动到备用host时,使用gprecoverseg -F失败的问题。
修复了使用gprecoverseg进行segment的增量恢复失败,而未记录或报告任何错误的问题。

--analyzedb
修复了在analyzedb过程中,当表被删除或重建时会导致analyzedb失败的问题。

--gpexpand
修复了集群扩展的重分发阶段,当尝试扩展实例化试图时,返回错误:failed to expand: error ERROR: ... is not a table 的问题。

--Metrics Collector
修复了在某些情况下,GPCC 6.3.0 和6.3.1在查询监控器中无法显示可视查询计划的问题。
修复了GPCC无法显示 CREATE TABLE AS SELECT...FROM和COPY(SELECT… FROM…) TO...等语句的指标。

--优化器
解决了在简化预处理过车中的约束时,GPORCA不会考虑将列与空数组进行比较的约束的情况,此类查询会导致GPORCA的崩溃。

--autovacuum
解决了当autovacuum daemon在template0数据库上执行VACUUM操作时可能发生的致命错误。

--资源组
修复了如果一个较早的DROP RESOURCE GROUP命令无法删除资源组,可能会导致查询失败的问题。

--Query Dispatcher
解决了可能导致事务错误地使用单阶段提交而非两阶段提交的问题
解决了当query dispatcher需要刷新实例化视图时,可能会导致错误:ERROR: unrecognized node type: 2139062143 (copyfuncs.c:6059)的问题。

Greenplum 6.12.0
现支持使用带有gp_interconnect_proxy_address参数定义代理端口时segment 主机名
增加了在执行TRUNCATE 命令对参照完整性的检查。
支持诊断和数据收集工具Greenplum Magic Tool(GPMT)
支持postgres_fdw PostgreSQL contrib模块

--Query Execution
当执行包含多字节字符的长查询时,Greenplum可能会错误的截断查询字符串(删除多字节字符),并且如果log_min_duration_statement设置为0,则可能随后写入无效的符号来分割日志。会导致gp_toolkit和Command Center的错误。该问题已被修复。修复了在表分区上执行CREATE UNIQUE INDEX会隐式更改分区的分发键的问题。

--事务
修复了在某些情况下,Greenplum数据库 master 重置会生成一个或多个孤立的、准备好的事务。
修复了在某些情况下,由于检查点和xlog COMMIT PREPARE记录之间的竞争状况,Greenplum数据库在重启后生成PANIC的问题。

--查询优化器
修复了在某些情况下,当查询优化器尝试从包含子查询的谓词生成索引扫描时,Greenplum数据库会出现崩溃的问题。
修复了由于查询优化器未生成唯一的扫描号来区分两个查询到外部表,事务中外部表上的第二个SELECT返回零条记录的问题。
修复了由于对存储区边界值与较小的Epsilon进行不正确的比较,查询优化器在合并UNION和UNION ALL查询中的双精度值的统计信息存储区时,进入无限循环的情况。
修复了当执行TRUNCATE 和CREATE TABLE语句时,共享内存不足的问题。

--Postgres Planner
修复了当查询的HAVING 子句包含子查询,且GROUP BY列集中也未指定盖子查询中引用的一个或者多个列时,Postgres Planner崩溃或产生不正确的结果的问题。
修复了为具有GROUPING SETS的子查询创建查询计划时可能导致Query Dispatcher崩溃的问题。

--资源组
修复了无法将pg_resgroup_get_status(NULL:oid)上的查询结果保存到表的问题。

--gpbackup
修复了当插入由bpchar分发的表中,并使用旧版bpchar哈希运算符时,行始终使用跳转一致哈希而不是旧式(模)哈希的问题。

最新版本:6.16
6.16.3于2021年7月上旬发布。

解决了分区键类型和搜索值类型不同时 Postgres planner 分区选择的问题;
解决了以下问题:在具有 exec 位置 INITPLAN 的函数上运行 \df+ 时,Execute on 列未正确显示“initplan”;
解决了由于服务器保存某些数据上下文的时间超过所需时间而可能发生的内存不足情况;
修复了创建 DOMAIN 时 master 和 segment 之间 collname 值的不一致;
解决了在指定 CREATE MATERIALIZED VIEW 失败并显示 ERROR:division by zero when WITH NO DATA was being specified;

执行器解决了由于内存上下文 TupleSort 的双重释放导致数据库出现 PANIC 的问题;

解决了 gpload 会因列名使用大写或混合大小写字符而失败的问题。gpload 现在会自动为 YAML 控制文件中尚未引用的列名添加双引号;

Greenplum 6.16.1
解决了使用 gprecoverseg 执行增量恢复从 pg_log 目录中删除日志文件的问题。gprecoverseg 现在将文件保留在 pg_log 下,以便它们可以在增量恢复后用于故障排除;

集群管理
解决了取消gpconfig 时由于主机无法访问而挂起的问题;
gprecoverseg 忽略无法访问主机上的segments的新功能由于会跳过了新主机替换无法访问主机的情况,从而导致 gprecoverseg -p newhost 选项的问题,已解决;
解决了当gpmovemirror 提供的配置文件出现问题时, 会导致打印错误的错误消息;

查询优化器
解决了优化器在查询视图时因segments错误而失败的问题,如果视图在表之间有连接并且任何表有一个在视图创建后被删除的列;
解决了优化器在内存不足时崩溃(而不是简单地抛出错误)的问题;
解决了当查询涉及带有 EXCEPT 子句的 CTE 时优化器返回错误结果的问题。出现此问题是因为查询优化器没有为类型与 SetOp 的输出类型不匹配的任何输入列添加标量转换;

服务器
解决了如果 WHERE 子句包含嵌入式查询,则 REFRESH MATERIALIZED QUERY 失败的问题;
解决了某些查询由于跟踪临时文件的方式而导致 master 崩溃的问题;
解决了在子句中使用 NOT 时导致视图创建查询性能缓慢的问题;
解决了 VACUUM FULL ANALYZE 无法清除某些膨胀表的问题;
解决了由于删除恢复所需的 WAL 文件,在必须恢复充当primary节点的故障segment时,增量恢复的相关问题;
解决了由于列未正确从 cstring 类型转换为date 类型而无法恢复具有未知字段的视图的问题;
解决了 gpload 中,重置会话时未中止全局事务的问题;

执行器解决了由于如何处理新分配的内存而导致多个段失败并出现 PANIC 错误的问题;

Greenplum 6.16.0
 除了现有的弹性模式之外,Greenplum 资源组现支持一种新的模式用于按百分比分配 CPU 资源:天花板强制模式;
此版本提供 PXF 6.0.0 发行版;
此版本提供GPSS 1.53发行版;
此版本提供MADlib 1.18.0的发行版,包括深度学习的新特性、改进和bug修复;
gp_sparse_vector 模块现在将其函数和对象安装到名为 sparse_vector 的模式中;
optimizer_join_order 服务器配置参数的默认值从exhaustive2 更改为exhaustive,这是Greenplum 6.14.0 版本之前的默认值。Greenplum 数据库查询优化器 (GPORCA) 使用此配置参数来识别查询的连接枚举算法。

查询优化器
解决了在 Greenplum 数据库版本 6.15.0 上使用 GPORCA 查询优化器的查询需要更长的时间才能完成的问题,其中 optimizer_join_order 服务器配置参数默认值为exhaustive2。此配置参数的默认值已更改为(回)exhaustive;
在查询定义为开放边界的分区表时,查询优化器会执行不必要的扫描。此问题已得到解决;
修复了查询分区表时在缓存中查找对象 0.0.0.0 失败的错误;

解决了 gp_sparse_vector array_agg() 函数覆盖系统 pg_catalog.array_agg() 函数并返回不同类型的数组的问题。gp_sparse_vector 模块现在将其函数和对象安装到名为 sparse_vector 的单独模式中;

GPORCA 会为投影列表中带有标量子查询的某些查询以及可以使用基础索引的谓词生成无效计划。这可能会导致 Greenplum 数据库在启用优化器的情况下运行某些功能时出现 PANIC。此问题现已解决。

服务器
修复了将日志记录配置为写入 NOTICE 级别消息时查询挂起的问题;
修复了在没有目标的情况下定义 VIEW 并且在 pg_attribute 中没有条目时 gpcheckcat 报告错误的问题;
修复了位图索引扫描与完整位图页面上的索引 INSERT 同时运行的问题,偶尔无法读取正确的 tid的问题;

Data Flow
在双栈 IPv4 和 IPv6 主机中,如果有另一个进程侦听同一个 IPv6 端口,gpfdist 将绑定到 IPv4 端口但无法绑定到 IPv6 端口。此问题已得到解决。

集群管理
当没有进行扩展,且 gpstate -s 输出显示健康的集群状态时,gpstate 将记录与 gpexapnd.status 相关的 ERROR/FATAL 消息。此问题已得到解决。

Greenplum 6.15
gprecoverseg 现在重新平衡主机可达的segments,即使有其他segments的主机不可达;对于无法访问的主机上的segments,gprecoverseg 现在会发出警告消息;
GPSS(Greenplum Streaming Server)在Greenplum这一版本升级至1.5.2版本;
analyzedb utility有一个新的 --skip_orca_root_stats 选项。指定此选项后,analyzedb 将不会更新根分区统计信息。仅当禁用 GPORCA 时才应使用此选项;

服务器
修复了错误资源组等待队列损坏 (resgroup.c:3502)导致Greenplum Master PANIC 的错误;
解决了使用分组功能时返回结果不一致的问题;
修复了由于计划程序问题导致查询因 FailedAssertion 错误而崩溃的计划程序问题;
禁止在 WHERE 子句中执行带有 set 返回函数的查询,这会导致segment panic。Greenplum 现在会生成类似以下内容的error信息:set-returning functions are not allowed in WHERE clause;

外部表:修复了 escape='OFF' 时 Web External Tables的问题;

查询优化器
某些使用 random() 或 timeofday() 等函数在分区表中选择随机行的查询会导致主机PANIC。此问题已得到解决;
修复了针对 CDOUBLE 类型(例如时间戳)的点查询的基数估计的优化器问题;

analyzedb
添加了--skip_orca_root_stats 选项,该选项可防止analyzedb 更新根分区统计信息;

Data Flow
dblink 包括跳过身份验证检查的函数 dblink_connect_no_auth;
解决了 gpfdist 从外部表读取导致“No route to host”错误的问题;

Interconnect
解决了当 gp_interconnect_type = proxy 时代理后台工作进程内存使用率高的问题,暂停/恢复流控制进程导致繁忙的接收器缓存或复制数据包,同时等待后端使用它们。Greenplum 数据库现在使用更主动的流控制机制来控制数据包缓冲和传输;

集群管理
gpinitsystem 现在将等效的语言环境等效对待(例如,en_US.UTF-8 现在被视为与 en_US.utf8 相同);
因为 gprecoverseg 现在会报告增量和完整segment恢复的进度,因此不再需要调用 gpstate -m 来确定恢复进度;

Greenplum 6.14.1
PostGIS 2.5.4+pivotal.4版本已升级,解决了PostGIS ticket中描述的segfault;

服务器
解决了带有运算符的视图定义中操作数的array类型转换被错误地转换为 anyarray 类型转换的问题。这会导致视图定义的备份和恢复出错;
优化了锁以解决 pg_partitions 系统视图上某些 SELECT 查询会等待其他操作获取的锁定的问题;
解决了从 5.28 版升级到 6.12 版本后,涉及外部表的查询执行导致查询 PANIC 和segment故障的问题。此问题已通过优化查询子计划解决;

查询优化器
解决了当查询优化器尝试访问函数的参数(例如 random() 或 timeofday())时,Greenplum 数据库在查询执行期间造成 PANIC,但查询未使用参数调用该函数的问题;
此版本优化了 Greenplum 数据库对具有多个连接谓词的连接的性能;

gpfdist:当使用转换配置外部表时,gpfdist 偶尔会返回error 404 Multiple reader to a pipe is forbidden。此问题已解决;

Greenplum 6.14.0
CentOS/RHEL 8 和 SUSE Linux Enterprise Server x86_64 12 (SLES 12) 客户端软件包以在此 Greenplum 数据库版本中支持;
PXF已升级至5.16.1版本;
optimizer_join_order 服务器配置参数的默认值从exhaustive更改为exhaustive 2;
optimizer_cost_model默认成本模型的服务器配置参数,calibrated已得到增强;GPORCA 现在更有可能使用嵌套循环连接而不是散列连接选择更快的位图索引;
GPORCA 通过改进其分区选择算法以更频繁地消除默认分区来提高查询执行性能;
GPORCA 会生成一个从left outer join变换为right outer join的等效替代方案;
gprecoverseg -a -s 命令的输出已更新以显示更详细的进度信息。用户现在可以以增量模式监视恢复segments的进度;
gpcheckperf 命令已更新为支持 Internet 协议版本 6 (IPv6);

服务器
解决了在使用非视图关系调用 pg_get_viewdef_name_ext() 函数时 Greenplum 数据库PANIC 的问题;
解决了当 gp_workfile_compression=on 时查询异常终止并出现错误 Context should be init first 的问题,因为 Greenplum 数据库忽略了来自 ZSTD 初始化函数的失败返回值;
当在实用程序模式连接中运行的查询调用 gp_toolkit.gp_param_setting() 函数时,Greenplum 数据库会 PANIC。此问题已解决;Greenplum 现在在实用模式下会忽略函数的 EXECUTE ON 选项,并且仅在本地节点上执行该函数;
在发生故障后的Segment节点的并行恢复和重新平衡过程中,如果Segment重新同步过程中发生错误,主恢复过程将停止并无限期等待。这个问题已被解决;

查询优化器
解决了当查询中的筛选条件匹配多个分区时 GPORCA 无法始终消除默认分区的性能问题;
修复了计划优化器问题,该问题由于计划时间由无关索引的排序过程支配,导致查询失败;
解决了 GPORCA 不使用动态分区消除并花费很长时间规划包含联合、外连接和子查询混合的查询的问题;
解决了 Greenplum 数据库返回错误 no hash_seq_search scan for hash table "Dynamic Table Scan Pid Index" 的问题,因为 GPORCA 生成的查询计划在动态分区消除期间错误地重新扫描了分区选择器。GPORCA 现在会生成不需要这种重新扫描的计划;
解决了优化器问题,其中带有 RETURNING 子句的 CTE 查询会失败并显示error:INSERT/UPDATE/DELETE must be execution by a writer segworker group;

集群管理:解决了 gprecoverseg、gpaddmirrors、gpmovemirrors、gpinitstandby 实用程序的文档和 --help 输出问题,其中之前缺少 --hba-hostnames 命令行标志详细信息;

计划器:解决了为涉及系统表和复制表的查询生成的索引扫描可能返回不正确结果的问题。在这种情况下,Greenplum 不再生成索引扫描。


最新版本:7
VMware Greenplum 7 现已于2023年10月中旬正式发布,发行公告指出 Greenplum 7 彰显了对创建和演进一个内在安全、成熟和灵活的基于 SQL 的在线分析处理(OLAP)平台的承诺。这一创新平台引入了一系列增强和新加功能,重点是针对各种数据类型(无论是结构化、半结构化还是非结构化数据)的资源管理和复杂分析功能。Greenplum 7 在无缝数据可扩展性、多负载处理和部署灵活性方面也有许多重要更新。新功能如下:

开放源代码和 PostgreSQL 12 的衍生:Greenplum 7 建立在开源代码的基础上,利用了现代 PostgreSQL 版本的功能、可靠性和灵活性。与前一版本相比,第 7 版植根于 PostgreSQL 12,并整合了近 5 年以来 PostgreSQL 的发布版本。

多种索引类型:Greenplum 7 支持多种索引类型,包括 B 树索引、哈希索引、位图索引、块范围索引、文本索引、地理空间索引和 AI 向量索引。该功能可优化数据检索和查询性能。Greenplum 查询优化器自 2009 年以来不断改进,在第 6 版中取得了良好的性能记录,在第 7 版中得到了扩展,提供了全面的索引选择支持。

利用 PXF 增强数据联合:Greenplum 7 中的平台扩展框架 (PXF) 经过改进,实现了卓越的数据联合。企业现在可以通过 JDBC 查询亚马逊简单存储服务 (S3) 对象存储、Hadoop 分布式文件系统 (HDFS) 和其他关系数据库中的数据集。它利用 PostgreSQL 的外来数据封装器 API 来并行访问远程数据源,提供抽象数据模型来管理远程数据的安全性和统计数据,以优化查询。

增强文本搜索:Greenplum 7 扩展了文本搜索功能,同时支持词法搜索和人工智能驱动的语义搜索,以提供更准确的搜索结果。词法搜索支持基于关键字的传统文本搜索,对于语义搜索,则由人工智能和向量 embeddings 提供支持。

升级地理空间分析:Greenplum 7 通过集成 PostGIS 版本 3 升级了地理空间分析功能。这一改进大大提高了地理空间查询的速度和特征丰富度。

行级安全权限: 该功能是对 Greenplum 中已有的基于角色的安全模型以及表级和列级权限的补充。

用于增强数据建模的生成列:Greenplum 7 中引入了生成列,从而改进了数据抽象和建模,解决了安全特征保留数据屏蔽等用例问题。

改进的 DBA 查询功能: Greenplum 7 对 DBA 查询功能进行了大量改进,包括 UPSERT 支持、带有事务的用户定义函数,以及对 ALTER TABLE 的改进以减少数据重写。

增强的半结构化和非结构化数据分析: Greenplum 7 除支持 XML 文档外,还支持半结构化数据处理,如增强的 JSON 和数组数据处理功能。全文搜索和基于文本的词法搜索索引可实现高效的文本存储、索引和搜索。此外,向量嵌入可实现非结构化数据的浓缩和高效表示,允许跨多种语言对匹配的文档、图像和视频进行相似性搜索,包括多语言搜索。

PostgreSQL 扩展生态系统: 更全面的 PostgreSQL 扩展支持,如高级密码检查、模糊字符串匹配、Hyperloglog、用于网络数据的 Ip4r、用于媒体数据的 Isn、纳秒时间戳、稀疏向量、用于透视的 Tablefunc、用于唯一标识符的 UUID 以及用于人工智能向量嵌入的 pg_vector,已全部支持。

先进的资源管理:Greenplum 7 引入了一系列高级资源管理功能。这些功能可确保在高负载情况下的稳健性能。

VMware vSphere 部署模型:Greenplum 7 可以参考推荐的架构部署在裸机或公共云环境中。也可利用第 7 版本中提供的自动部署模式无缝集成到 vSphere 私有云环境中。

多数据中心灾难恢复解决方案: 作为多数据中心灾难恢复解决方案的一部分,数据通过事务日志归档进行复制,从而实现比 Greenplum 以前版本更高效、更低的恢复点目标(RPO)和恢复时间目标(RTO)灾难恢复解决方案。

新的扩展 PostgresML:提供新的用户定义函数,使用户可以在 Greenplum 中使用数以万计的开源人工智能/机器学习预训练模型。