1. 程式人生 > >T-SQL執行內幕(2)——Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests

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

本文屬於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完成這個注意請求。一旦查詢完成或者客戶端應用程式完成資料處理,會發送一個斷開或者登出請求。