尽管“并行成本阈值”的值设置为 50,但估计成本为 32 的 SQL 查询仍会并行执行。
此屏幕截图取自 SQL Server 2022CU10 服务器,但我在 SQL Server 2019 上看到了相同的行为。
谁能告诉我为什么这个查询是并行执行的?
重现步骤
将“并行成本阈值”设置为 50
创建一个测试数据库并在表中插入 100 万行
CREATE DATABASE TEST;
GO
USE TEST;
CREATE TABLE dbo.table_0
(
A char(1),
B char(1),
C char(1),
D char(1),
E char(1),
F char(1),
G char(1),
H char(1),
I char(1),
J char(1),
K char(1),
L char(1)
)
GO
INSERT INTO TEST.dbo.table_0 (A, B, C, D, E, F, G, H, I, J, K, L)
VALUES ('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z')
GO 1000000
SELECT
[A],[B],[C],[D],[E],[F],[G],[H],[I],[J],[K],[L]
FROM
[TEST].[dbo].[table_0]
ORDER BY
5, 3, 1, 8
运行查询时,优化器将首先探索非并行计划选项并评估找到的最佳计划的成本,如果单线程计划的成本超过阈值,它将探索并行计划。
假设并行计划的成本较低,生成的计划将是并行的,这就是您在实际计划上看到的this成本,它确实可以低于指定的并行成本阈值。
我在本地 SQL Server 实例上尝试了类似的测试,当强制执行串行计划时,查询成本为 94,而并行成本为 23,因此在我的成本阈值为 55 的情况下,优化器选择了并行计划,这是预期的。