🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 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。