You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何预估成本32的SQL查询在并行阈值50时仍并行执行?

为什么并行成本阈值设为50时,预估成本32的查询仍以并行方式执行?

核心原因分析

1. 排序操作的并行决策特殊逻辑

SQL Server里的排序(Sort)运算符,其并行计划的选择逻辑并不完全受Cost Threshold for Parallelism(并行成本阈值)的约束。当优化器判断串行排序会因为内存不足,不得不依赖tempdb进行磁盘排序,进而导致性能暴跌时,哪怕查询的整体预估成本低于阈值,也会选择并行执行来提升排序效率。

你的场景里,100万条数据的排序操作,虽然预估CPU成本只有32,但优化器评估后认为,串行排序的实际开销(尤其是磁盘IO带来的额外成本)远高于并行排序,因此触发了并行计划。

2. 预估成本的计算范围限制

Cost Threshold for Parallelism针对的是查询的整体预估CPU成本,但排序操作的并行决策还会结合数据量、内存授予情况等额外因素。比如当排序的行数较大时,优化器会优先考虑用并行排序来缩短执行时间,不会只盯着预设的成本阈值。

3. 新版本SQL Server的行为特性

在SQL Server 2019及2022版本中,优化器对并行计划的选择逻辑做了调整,针对大型数据集的排序、聚合等操作,会更倾向于选择并行计划来规避串行执行的性能瓶颈,哪怕成本没达到阈值。

验证思路

可以通过以下方式验证上述逻辑:

  • 减少表中数据量(比如改为10万行),重新执行查询,此时排序数据量小,优化器会选择串行计划。
  • 查看查询计划的内存授予信息,如果串行计划的内存配额不足以完成内存排序,优化器会自动切换到并行计划。

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:31