关于citus.limit_clause_row_fetch_count优化参数

简介:

关于citus.limit_clause_row_fetch_count优化参数

citus.limit_clause_row_fetch_count是citus的一个性能优化的参数。具体适应于什么场景呢?

官方文档说明

下面是官方文档说明,还是不够具体。

https://docs.citusdata.com/en/v7.3/develop/api_guc.html?highlight=limit_clause_row_fetch_count

Planner Configuration

citus.limit_clause_row_fetch_count (integer)

Sets the number of rows to fetch per task for limit clause optimization. 
In some cases, select queries with limit clauses may need to fetch all 
rows from each task to generate results. In those cases, and where an 
approximation would produce meaningful results, this configuration value
 sets the number of rows to fetch from each shard. Limit approximations 
are disabled by default and this parameter is set to -1. This value can 
be set at run-time and is effective on the coordinator.

测试用例

从citus的测试用例中,可以清楚的看到它的作用。

citus-7.2.1\src\test\regress\expected\multi_limit_clause_approximate.out

-- Enable limit optimization to fetch one third of each shard's data
SET citus.limit_clause_row_fetch_count TO 600;
SELECT l_partkey, sum(l_partkey * (1 + l_suppkey)) AS aggregate FROM lineitem
    GROUP BY l_partkey
    ORDER BY aggregate DESC LIMIT 10;
DEBUG:  push down of limit count: 600
 l_partkey | aggregate  
-----------+------------
    194541 | 3727794642
    160895 | 3671463005
    183486 | 3128069328
    179825 | 3093889125
    162432 | 2834113536
    153937 | 2761321906
    199283 | 2726988572
    185925 | 2672114100
    196629 | 2622637602
    157064 | 2614644408
(10 rows)

上面的SQL,如果不加SET citus.limit_clause_row_fetch_count TO 600,CN需要到worker上把所有数据都捞出来,然后再在CN上排序取TopN结果。
大数据量的情况,性能会非常糟糕。加上SET citus.limit_clause_row_fetch_count TO 600,就只会到每个worker上取前600的记录。但可能会带来准确性的损失。

另外一个需要注意的是,上面的GROUP BY字段l_partkey不是分片字段,如果GROUP BY字段已经包含了分片字段,不需要这个优化,因为这种情况下可以直接把LIMIT下推下去。

另一个测试用例,形式类似

...
SET citus.limit_clause_row_fetch_count TO 150;
SET citus.large_table_shard_count TO 2;
SELECT c_custkey, c_name, count(*) as lineitem_count
    FROM customer, orders, lineitem
    WHERE c_custkey = o_custkey AND l_orderkey = o_orderkey
    GROUP BY c_custkey, c_name
    ORDER BY lineitem_count DESC, c_custkey LIMIT 10;
DEBUG:  push down of limit count: 150
 c_custkey |       c_name       | lineitem_count 
-----------+--------------------+----------------
        43 | Customer#000000043 |             42
       370 | Customer#000000370 |             38
        79 | Customer#000000079 |             37
       689 | Customer#000000689 |             36
       472 | Customer#000000472 |             35
       685 | Customer#000000685 |             35
       643 | Customer#000000643 |             34
       226 | Customer#000000226 |             33
       496 | Customer#000000496 |             32
       304 | Customer#000000304 |             31
(10 rows)

小结

  • 适用场景

    • citus.limit_clause_row_fetch_count适用于分组聚合并取TopN结果的SQL的性能优化
  • 不适用场景

    • 要求精确结果
    • 聚合字段包含分片字段
    • count(DISTINCT)
相关文章
|
监控 关系型数据库 程序员
|
4月前
|
存储 自动驾驶 物联网
大模型应用:高精度量化感知训练(QAT)与低成本后训练量化(PTQ)方案优选.55
本文深入解析大模型量化两大核心技术:后训练量化(PTQ)与量化感知训练(QAT)。涵盖原理、流程、代码实现及选型策略,对比其在精度损失、算力成本、部署效率等方面的差异,助开发者根据数据、算力与精度需求,科学选择最优量化方案。
625 15
|
4月前
|
搜索推荐 开发者
阿里云账号注册完成后,怎么实名认证?需要上传哪些材料?
阿里云账号注册后需完成实名认证方可购买产品。个人认证推荐支付宝扫码,几分钟完成;企业认证支持法人扫脸、企业银行卡、企业支付宝等4种方式,最快几分钟通过。2026年最新全流程指南,含材料清单与操作图解。(239字)
414 1
|
5月前
|
存储 弹性计算 Linux
2026年阿里云服务器购买攻略:三种核心购买方式对比与实操指南
阿里云服务器提供快速购买、自定义购买和活动购买三种方式,适合不同场景需求。选购前需综合考量业务场景、成本策略、地域选择及安全合规。快速购买适用于基础配置速购,提供基础、标准、专业、增强四类套餐,匹配个人开发、企业官网、电商平台等场景,并需注意镜像选择(如Alibaba Cloud Linux性能优化)、带宽计费模式(固定带宽、按量计费、共享带宽包)及完整购买流程。
|
4月前
|
人工智能 安全 机器人
OpenClaw × ListenHub 实战拆解:如何给 Agent 一键赋予语音与画图能力?
OpenClaw是轻量级Agent调度框架,专注任务编排与工具调用;ListenHub提供播客、视频、图文等多模态Skills能力。二者协同构建安全、可控、可扩展的自动化内容生产系统,推动AI从对话工具迈向工程化生产节点。
|
编解码 监控 前端开发
《别盲目做Web3D交互!Three.js和React Three Fiber难点大揭秘》
Web3D交互通过沉浸式体验和视觉呈现,广泛应用于电商、教育和建筑等领域。Three.js与React Three Fiber的结合是实现这一体验的热门技术,但其开发过程面临诸多挑战。模型渲染复杂时会导致性能下降,高分辨率纹理虽提升真实感却增加加载时间;动态场景更新可能引发性能问题,而两者的学习曲线陡峭,集成中也易出现“水土不服”。此外,移动端适配、交互逻辑设计及操作响应性等问题进一步增加了开发难度。尽管如此,随着技术进步与经验积累,这些难点将被逐步解决,推动Web3D交互迈向更精彩的未来。
705 14
|
9月前
|
监控 算法 搜索推荐
JVM性能优化实战手册:从监控到调优策略
本文基于DataBuff监控数据,系统探讨JVM性能优化实战,涵盖监控体系构建、GC调优、内存与线程管理等关键策略。通过调整堆大小、启用G1回收器等参数优化,有效降低Full GC频次,提升应用稳定性,为Java性能调优提供可落地的实践指南。(238字)
|
9月前
|
人工智能 自然语言处理 搜索推荐
拔俗AI政务智能体:让政务服务更聪明、更贴心
AI政务智能体是基于人工智能的“数字公务员”,可24小时在线解答政策疑问、智能引导办事、自动填表申报,让政务服务更高效便捷。它整合政策数据,实现“一问即答、一办到底”,提升群众满意度,助力政府治理现代化,推动“数据多跑路,群众少跑腿”真正落地。
500 0
|
Ubuntu 数据库
解决Ubuntu系统获取锁失败的问题
不过记住,这种方式有如凤凰涅槃,万不得已时才使用。这样,繁琐的锁定问题就被巧妙解决了。从此,当你再次面对这类状况时,就能秉持锁匠之智,轻松应对。
494 23