【SQLServer】并行的保留线程和已使用线程

本文探讨了SQLServer的并行执行机制,解释了maxdop和并行度成本阈值参数的作用,并通过实例展示了如何观察查询的并行度、保留线程和已使用线程。通过分析不同查询的执行计划,说明了线程使用不一定等于MAXDOP值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

我们都知道SQL Server的并行执行。为了快速处理一个请求,SQL Server会使用多个线程来处理一个请求。并行执行涉及两个重要的参数设置:·maxdop:最大并行度·并行度的成本阈值:如果任何估计的查询计划成本超过此值,则SQL Server优化器将尝试使用并行。

现在,回到我们的话题:保留线程(Reserved threads)和已使用线程(Used threads)。

假设我提交了一个查询,评估出的成本已经超出了并行度的成本阈值。SQL Server决定使用并行执行该查询。在我的测试环境中,maxdop采用的是默认值。也就意味着SQL Server可以使用所有的处理器来执行并行操作。此外,我将并行度的成本阈值设置为0,这样所有的查询都可以使用并行操作(这里只是为了示例)。SQL Server和使用多线程执行任务,且这些任务运行在调度器(schedulers)上。

与许多其他资源一样,SQL Server也保留了线程。展示一下Adventure Works 2014数据库中以下查询的执行计划:

?

| 12345678910111213 | SELECT [SalesOrderID]``,[SalesOrderDetailID]``,[CarrierTrackingNumber]``,[OrderQty]``,[ProductID]``,[SpecialOfferID]``,[UnitPrice]``,[UnitPriceDiscount]``,[LineTotal]``,[rowguid]``,[ModifiedDate]``FROM [AdventureWorks2014].[Sales].[SalesOrderDetail]``ORDER BY ModifiedDate DESC |

现在可以右击select node,查看属性:

在上面的属性中,可以看到SQL Server使用并行度为2。计算此执行的分支为1。保留线程数和已使用线程数为2。

请记住,保留或使用的线程数并不总是等于查询的MAXDOP值。我来给你展示一下:

?

| 123456 | Select SOD.SalesOrderID, SOD.UnitPrice, SOD.LineTotal,``SOH.TotalDue, SOH.DueDate, SOH.OrderDate``from [Sales].[SalesOrderDetail] SOD``inner join [Sales].[SalesOrderHeader] SOH``on sod.SalesOrderID=SOH.SalesOrderID``ORDER BY SOH.TotalDue DESC |

现在右击select node,查看属性:

在上面的属性中,可以看到SQL Server使用了并行度4。这里执行的分支数是2。保留线程数和使用线程数是8。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值