Citus 9.2 提升HTAP工作负载的性能
Citus9.2(9.2.4)更新内容
更新摘要
- SQL覆盖率优化
-
性能提升
-
易操作性
-
extension支持(支持其他extension插件的聚合)
更新细节
CTE分布式查询提升10倍性能
CTE只是带有名称的子查询,但是PostgreSQL和Citus都是分开执行CTE的,无法优化查询计划。Citus过去总是在协调器上收集CTE的结果,然后将其广播到work节点进行join,这极大地提高了Citus对SQL的支持。
从PostgreSQL 12开始,CTE在PostgreSQL内部被当成子查询,这会拥有更快的查询计划。在Citus中也使用相同的方法。我们还提高了仅使用CTE结果的查询的性能。总体而言,这些性能改进可以使使用CTE进行分布式查询的速度比以前的Citus版本快10倍。
全面支持聚合函数
大多数分析型SQL使用诸如sum和avg之类的聚合函数来计算统计信息或将许多数据点合并为一个。诸如PostGIS和HyperLogLog(HLL)之类的扩展也向PostgreSQL添加了其他聚合函数。
现在,Citus在所有情况下都支持聚合功能。按分布列分组时将聚合向下推到工作节点,或者提取必要的数据到协调器节点进行聚合。现在查询分布式表时,所有PostGIS功能像内置聚合函数一样执行。
INSERT..SELECT(re-partition)提升5倍性能
INSERT..SELECT命令使您可以在数据库内部转换数据。您可以使用INSERT..SELECT对数据进行计算,例如将数据预聚合到另一个表中,还可以更改数据的存储方式。例如,您可以查询分区表中的原始JSON数据以加快写入速度,然后使用INSERT..SELECT提取与您的应用程序相关的字段,并将它们存储在索引较高的表中以加快查询速度。有效的INSERT..SELECT使您能够在一个数据库中创建多种不同类型的数据库系统。
在Citus中,Postgres的INSERT..SELECT命令特别强大,因为它通常可以在分布式表的所有分片上并行化,这意味着您可以在单个分布式数据库中处理大量数据。但是,利用并行性的要求是INSERT ..和SELECT部分中的表具有相同的分布列。在Citus 9.2之前,如果您写入具有不同分布列的表,则数据是在协调器上收集的,然后写入目标表。在幕后,我们使用COPY命令执行此操作,这实际上非常快,但是我们意识到,在许多情况下,我们可以做得更好。
在Citus 9.2中,现在INSERT..SELECT命令可以在Work之间重新整理数据,而不必将数据拖到协调器上。此更改意味着INSERT..SELECT的速度最高可以提高5倍。使用重新分区进行INSERT..SELECT的能力-意味着用户不再绑定到单个分发列,从而可以在Citus中实现更高级的实时分析方案。
re-partition join提升10倍性能
Citus针对实时分析场景进行了优化,但有些人发现Citus也可以充当数据仓库。
在数据仓库查询中,Citus通常需要在网络上对join的一个表或两个表进行重新分区。在Citus 9.2之前,此类join的查询通常是通过“任务跟踪器”执行的,这增加了很多额外的延迟。从Citus 9.2开始,这些重新分区join查询是通过Citus的“adaptive执行器”执行的,对于具有1000万行以下的join,其速度可以提高多达10倍。
随着我们为INSERT..SELECT引入新分区的新基础架构,我们将在接下来的几个发行版中对重新分区进行很多令人振奋的改进,这也将加快join速度。
分布式函数
存储过程对于进行复杂的事务很有用,无需在应用程序服务器和数据库服务器之间进行额外的网络数据交换。在像Citus这样的分布式SQL数据库中,存储过程可以变得更加强大,因为您可以通过我们称为“存储过程委托调用(分布式函数)”的技术来避免协调器与工作节点之间的交互,并可以横向扩展吞吐量。
您可能会使用分布式函数的典型方案是多租户应用程序,该事务具有一次在单个租户上运行的复杂事务。当您定义以租户ID作为参数的过程或函数时,可以使用create_distributed_function UDF将过程调用委派给存储该租户数据的work节点,而协调器上几乎没有开销。如果您对UDF进行更改,则更改将自动传播到工作节点。
存储过程调用委托(分布式函数)已在Citus 9.0中引入,但Citus 9.2将吞吐量提高了30%以上。随着Citus 9.2中存储过程调用的性能提高,存储过程通常将是扩展多租户应用程序的最佳方法。
9.2.0
-
支持INSERT SELECT 重新分区
-
增加citus.coordinator_aggregation_strategy支持更多聚合
-
MX模式下,增加shard的plan缓存
-
GRANT .. ON SCHEMA 自动传播
-
CTE 下推,性能提升
-
ALTER TABLE .. SET SCHEMA 自动传播
-
支持DROP ROUTINE & ALTER ROUTINE 命令
-
支持与参考表的任何内连接
-
fix bug 和调整很多内容
9.2.1-9.2.4
- fix bug 和调整很多内容
[CitusDB中国]站主,PostgreSQL粉丝,现从事Citus研发工作
愿Citus在中国发展的越来越好