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


    我们都知道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数据库中以下查询的执行计划:

    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值。我来给你展示一下:

    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。

  • 相关阅读:
    shell脚本编程-重定向
    web安全-剖析_基础构架剖析
    shell脚本编程-函数
    shell脚本编程-循环
    web安全-入侵基础
    shell脚本编程-检查和测试
    shell脚本编程-特殊字符
    shell脚本编程-计算方式
    python例子-抓取网站IP列表
    linux问题-APR not Found
  • 原文地址:https://www.cnblogs.com/abclife/p/16683133.html
Copyright © 2020-2023  润新知