What Are Threads(執行儲)

為什麼需要了解Threads?

Threads為SQL底層運作的基礎,SQL的工作執行是由SQLOS layer of the Storage Engine來主導,其工作運作的最小單位為Threads,在執行的過程中,SQL會不斷的調度資源,可能是從IO,可能是從CPU,當資源有限時會造成等待資源的狀況出現。因此了解目前DB在等待什麼資源(Waittype)是一種對資料庫調校的科學方法,可以藉此知道資源瓶頸發生在哪裡。而了解各種Waittype之前的基本功,就是先了解Thread和其運作方式。

  • Thread為Process執行的單位
  • 一個Process裡面可以存在多個Thread
  • 每個Thread會有一個極小的等待時間,而其等待執行的動作為Scheduling
  • SQL Server系統會分配CPU資源給Thread使其執行命令,為Worker Thread
  • 有一些Threads是專用的,例如執行 Checkpoints, deadlock monitoring。
    一搬來說,大部分的Threads在Pool裡面等待,直到有新的Requests
  • SQL Server 不仰賴Windows scheduling,他有自己獨立的一套工作模式,叫做non-preemptive scheduling,其效率遠比仰賴Windows scheduling高。
  • 底層由SQLOS layer of the Storage Engine來主導
  • 每一個Core(無論是實體還是邏輯)都擁有一個Scheduler (有8個Core就有8個Scheduler)
  • 每個Scheduler負責管理每一個Threads的Execution
  • sys.dm_os_schedulers DMV可以用來查詢schedulers

繼續閱讀 “What Are Threads(執行儲)"