T-SQL执行内幕(2)——Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DBA_Huangzj/article/details/78953619

本文属于SQL Server T-SQL执行内幕系列


    接上文:T-SQL执行内幕(1)——简介


    本节以介绍一些基础的但又容易混淆的概念。包括:Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests

  • Scheduler:计划程序,特指SQL OS的Scheduler,用于管理SQL Server中的线程调度的对象,每个计划程序都映射到其中的单个处理器(逻辑CPU),它不控制事务,而是让Worker(工作线程)相互协作,把新任务分配给Workers。相关DMV:sys.dm_os_schedulers
  • Task:任务,标识需要被执行的工作。任务可能是下面的请求之一:查询请求(RPC事件或语言事件), 预登录请求(prelogin event),登录请求(连接事件),登出请求(断开连接事件),查询取消请求(注意事件),Bulk load请求(bulk load 事件),分布式事务请求(事务管理事件)。在调度层跟踪。相关DMV:sys.dm_os_tasks
  • Worker:工作线程,这是SQL Server对于一个线程(thread)的逻辑表现。它是计划程序中的一个结构,维护SQL Server特定信息。相关DMV:sys.dm_os_workers ,工作线程执行由计划程序分配的任务。
  • Thread:OS线程,通过调用类似CreateThread()/_beginthreadex()方法创建。Worker与Thread是1:1关系。相关DMV:sys.dm_os_threads
  • Request:请求,客户端到SQL Server中的查询请求的逻辑表现。请求被计划程序分配给某个任务,并交给某个Worker处理。这个标识查询请求及系统线程操作(如checkpoint、log writer等),在这里找不到登录登出和注意等事件,另外这部分在SQL执行引擎层,不是在SQL OS层。相关DMV:sys.dm_exec_requests
  • Sessions:会话,当客户端应用程序连到SQL Server时,两端就会建立起一个“会话”用于交换信息。严格来说,会话并不是物理连接,是SQL Server中关于连接的逻辑表现。但是在理解层面可以理解成一个连接。当在DMV中发现一个session有多个值时,意味着出现了并行查询。一个并行查询使用相同的会话,但是在SQL Server端使用多个Worker(Thread)用于服务这个请求。相关DMV:sys.dm_exec_sessions
  • Connections:连接,这是在底层的实际物理连接,Session和Connection是一一对应,相关DMV:sys.dm_exec_connections

总结

    当一个客户端创建物理连接到SQL Server时,应用程序发送一个预登录请求(pre-login request),然后一个任务就会被创建并分配给一个worker去执行。一旦服务器和客户端完成预登录过程,会发送一个登录请求(login request)同时产生另外一个任务并移交给一个worker。一旦登录成功。SQL Server创建一个会话用于表现与客户端的逻辑连接和信息交换。

    当客户端发送一个查询请求时,服务器再次创建一个任务和worker用于完成这个请求。如果中途取消查询,服务器会接收到一个注意请求(attention request)并再次创建一个新任务与worker完成这个注意请求。一旦查询完成或者客户端应用程序完成数据处理,会发送一个断开或者登出请求。

猜你喜欢

转载自blog.csdn.net/DBA_Huangzj/article/details/78953619