相关疑难解决方法(0)

在 SQL Server 中可视化并行线程使用情况的最简单和最准确的方法是什么?

这里继续我的另一个问题,我想要一种简单的方法来形象化答案。

我试过使用这样的查询,但“运行”线程的数量有时会超过 DOP。

SELECT    ost.session_id,
          ost.exec_context_id,
          ost.scheduler_id,
          qp.node_id,
          w.worker_address,
          qp.physical_operator_name,
          ost.task_state,
          qp.row_count
FROM      sys.dm_os_tasks AS ost
JOIN      sys.dm_os_workers AS w
    ON ost.worker_address = w.worker_address
LEFT JOIN sys.dm_exec_query_profiles AS qp
    ON w.task_address = qp.task_address
WHERE     ost.session_id = 57
AND       ost.task_state = 'RUNNING'
ORDER BY  ost.exec_context_id, ost.scheduler_id, qp.node_id, w.worker_address;
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用query_thread_profile扩展事件,但是对于具有多个并行分支的计划,它显示了相同的 N 个线程 ID。这似乎与给出的答案相反,因为 DOP 没有明确限制使用的线程总数。对于以 DOP 4 运行的查询,它看起来像这样。我确信相同的四个线程(加上协调器)不会用于所有分支和运算符。

xe_session

因此,在 DOP 8 上运行这样的查询会给我三个并行分支。

SELECT COUNT(DISTINCT t1.Data)
FROM dbo.t1 
JOIN dbo.t2 
ON t1.Id = t2.f_Id
JOIN t3
ON …
Run Code Online (Sandbox Code Playgroud)

sql-server parallelism

5
推荐指数
1
解决办法
255
查看次数

并行度和调度器使用

以有效并行度 运行的 SQL Server 查询是否有可能x将并行工作器分配给多个x不同的调度程序?即使执行计划有许多并行区域?

sql-server parallelism execution-plan

4
推荐指数
1
解决办法
143
查看次数

查询执行时使用了多少线程?

我在测试 SQL Server 2014 上安装了 AdventureWorks2014 数据库。我计划执行以下查询:

SELECT *
FROM Sales.SalesOrderDetail sod
INNER JOIN Production.Product p ON sod.ProductID = p.ProductID
ORDER BY Style
Run Code Online (Sandbox Code Playgroud)

在实际执行之前,我有我的工作线程的以下图片:

在此处输入图片说明

在查询执行时,我再次检查了工作线程的状态:

在此处输入图片说明

如您所见,第二张图片中的 active_workers_count 总数高于第一张屏幕截图中的总数。从第二个屏幕截图中,我可以假设查询执行所需的总工作线程为 1+2+1+2=6。但是,当我查看执行计划中索引扫描运算符的属性时,我看到:

在此处输入图片说明

似乎我的并行度为 4,这意味着 4 个线程正在并行处理行。

我很困惑,无法确定在查询执行期间运行了多少线程。有人可以向我解释为什么 active_workers_count 与 DOP 不同吗?

sql-server parallelism maxdop sql-server-2014

3
推荐指数
1
解决办法
238
查看次数

设置 max dop = cpu 数量会导致单个查询阻塞其他查询的情况吗?

我有 8 个 CPU 的 SQL Server。最大工作线程设置为 850。最大 dop 为 8。并行性的成本线程保持为 50。

这意味着 sql server 会将高于成本阈值的查询分解为 8 个线程。由于每个线程都在一个 cpu 上运行,那么这是否意味着在当前运行的 8 个线程中至少有一个被释放之前,不允许其他用户运行查询?

那么设置 max dop = cpu 数量会导致单个查询阻塞其他查询的情况吗?

sql-server maxdop

1
推荐指数
2
解决办法
1390
查看次数