use*_*827 3 performance parallelism sql-server-2016 query-performance
我有一个查询,它与 8 的 MAXDOP 并行运行。当我查看时,sp_who2我看到相同的会话 ID 使用不同的连接 ID 重复多次(> 8)。
我使用了下面的查询,看到等待类型仍然是 CXCONSUMER 等待类型。但我看到 130 个不同的 exec_context id。
SELECT
dot.session_id,
dot.exec_context_id,
dot.task_state,
dowt.wait_type,
dowt.wait_duration_ms,
dowt.blocking_session_id,
dowt.resource_description
FROM sys.dm_os_tasks dot
LEFT JOIN sys.dm_os_waiting_tasks dowt
ON dowt.exec_context_id = dot.exec_context_id
AND dowt.session_id = dot.session_id
WHERE dot.session_id = 96
ORDER BY exec_context_id;
Run Code Online (Sandbox Code Playgroud)
如果查询并行运行,当我将负载分配到不同的工作线程时,它是否具有不同的 spid。?
看了肯德拉·利特尔 (Kendra Little) 的文章。非常有帮助的一个。
我使用查询来查看并行处理查询中使用的不同调度程序。
我看到多次使用相同的shcheduler_id/worker地址。这正常吗?
我的 MAXDOP 也是 4,但我看到 5 个不同的 scheduler_ids,这很奇怪。
同一查询的多个并行线程都共享相同的 session_id 或 spid。
肯德拉·利特尔 (Kendra Little) 写了一篇很棒的文章,在这里展示了这一点。
埃里克·达林 (Erik Darling) 也有一个很棒的,如果只是切线相关的,请在此处发布
如果您的查询本身阻塞,则表明一个线程需要更长的时间来完成其工作;这可能意味着您对相关表有过时的统计数据,或者仅仅是数据分布有偏差,以至于一个线程接收的工作比其他线程多得多。
此外,@Josh Darnell在一个非常相似的问题中提到,当您看到同一个 spid 的多个 connection_ids 时,这是因为它们有一个使用多个活动结果集 (MARS) 的应用程序。
参考线程数为 5,即使最大并行度设置为 4,第 5 个线程也是一个协调线程,正在等待 4 个并行线程的结果。由于调度程序与处理器相关,而不是线程,因此 scheduler_id 对于多个查询相同是完全正常的。有关详细信息,请参阅Microsoft Docs。此查询将显示每个调度程序的请求计数:
SELECT dos.scheduler_address
, dos.scheduler_id
, dos.active_workers_count
, RequestCount = (
SELECT COUNT(1)
FROM sys.dm_exec_requests der
WHERE dos.scheduler_id = der.scheduler_id
)
FROM sys.dm_os_schedulers dos
ORDER BY dos.scheduler_id;
Run Code Online (Sandbox Code Playgroud)
我的笔记本电脑的结果如下所示:
?????????????????????????????????????????????????????? ??????????????????????????? ? 调度程序地址?调度程序_id ? active_workers_count ?请求计数? ?????????????????????????????????????????????????????? ??????????????????????????? ? 0x00000017F7280040 ? 0 ? 6 ? 4 ? ? 0x00000017F72A0040 ? 1 ? 7 ? 5 ? ? 0x00000017F72C0040 ? 2 ? 7 ? 5 ? ? 0x00000017F72E0040 ? 3 ? 6 ? 6 ? ? 0x00000017F7A00040 ? 1048576?1 ? 0 ? ? 0x00000017F7880040 ? 1048578?1 ? 1 ? ? 0x00000017F1980040 ? 1048579?1 ? 1 ? ? 0x00000017F19A0040 ? 1048580?1 ? 1 ? ? 0x00000017F19C0040 ? 1048581?1 ? 1 ? ? 0x00000017F78A0040 ? 1048582?1 ? 0 ? ? 0x00000017F78C0040 ? 1048583?1 ? 0 ? ? 0x00000017EB020040 ? 1048584?1 ? 1 ? ?????????????????????????????????????????????????????? ???????????????????????????
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |