SQL 查询意外并行执行

问题描述 投票:0回答:1

尽管“并行成本阈值”的值设置为 50,但估计成本为 32 的 SQL 查询仍会并行执行。

此屏幕截图取自 SQL Server 2022CU10 服务器,但我在 SQL Server 2019 上看到了相同的行为。

谁能告诉我为什么这个查询是并行执行的?

screenshot of query plan

重现步骤

  1. 将“并行成本阈值”设置为 50

  2. 创建一个测试数据库并在表中插入 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
  1. 执行以下查询
SELECT
      [A],[B],[C],[D],[E],[F],[G],[H],[I],[J],[K],[L]
FROM
      [TEST].[dbo].[table_0]
ORDER BY 
    5, 3, 1, 8 
sql-server parallel-processing
1个回答
1
投票

运行查询时,优化器将首先探索非并行计划选项并评估找到的最佳计划的成本,如果单线程计划的成本超过阈值,它将探索并行计划。

假设并行计划的成本较低,生成的计划将是并行的,这就是您在实际计划上看到的this成本,它确实可以低于指定的并行成本阈值。

我在本地 SQL Server 实例上尝试了类似的测试,当强制执行串行计划时,查询成本为 94,而并行成本为 23,因此在我的成本阈值为 55 的情况下,优化器选择了并行计划,这是预期的。

© www.soinside.com 2019 - 2024. All rights reserved.