正在打开每日关注
正在打开每日关注
PGRust将计划时固定并行度改为运行时动态分配空闲CPU,提升多核查询资源利用率。
My favorite change we made to @pgrustdb is how we rearchitected parallel queries. Postgres decides a fixed degree of parallelism at plan time. For pgrust, we assign cpus to queries dynamically. For beefy machines with many cores, this results in a massive speedup https://t.co/RGgYtgMKFv
是什么 这条推文介绍PGRust对并行查询执行器的重构:PostgreSQL在计划阶段确定固定并行度,而PGRust把CPU分配推迟到运行时。配图用16个vCPU、Query A/B和morsel任务块,直观展示两种策略在不同执行阶段的差异。
核心设计 PGRust的关键变化是从按查询预留固定Worker,转向由空闲vCPU主动领取下一个morsel。这样查询可以根据实时负载获得更多或更少的计算资源,避免某些Worker完成后仍有其他查询排队、机器却存在空闲核。图中PGRust一侧的任务块跨vCPU重新分布,正是这一调度模型的视觉化表达。
关键洞察 在多核数据库上,计划时的静态决策很容易被实际并发度、数据分布和查询完成时间打破。运行时调度把资源利用率作为持续反馈,可能带来更高吞吐和更低平均空闲;但图中指标属于演示过程,不能替代同负载、同硬件下的基准测试。
边界与风险 实现时仍需权衡调度开销、查询公平性、尾延迟、NUMA与缓存局部性,以及长短查询互相争抢资源的问题。真正值得借鉴的不是简单增加并行度,而是让资源分配时机与工作单元粒度匹配实际负载。