Sql-Server

SQL Server 執行緒和並行度

  • June 15, 2017

我對 SQL Server 執行緒的理解是,SQL Server 將會話中的執行請求分解為多個任務,並將每個任務與一個工作執行緒相關聯。因此 SQL Server 總是嘗試使用多個執行緒(如果可用且需要)來執行查詢,無論它是並行查詢還是非並行查詢。

但是以下語句(來自 Microsoft SQL Server 2012 Internals (MS Press) 一書)似乎陳述了一些不同的內容:

一個並行查詢執行計劃可以使用多個執行緒;非並行查詢使用的串列執行計劃僅使用單個執行緒。

編輯:我最初的理解是(可能不正確)調度程序可能(在需要時)使用來自同一個 NUMA 節點的多個工作人員/執行緒來處理同一執行請求的不同任務,當它是串列執行時。

對於並行執行,多個調度程序/處理器將同時處理相同的執行請求(分解為多個任務),並且每個調度程序將使用(再次,當需要時)來自它們各自的 NUMA 節點。

換句話說,無論是否並行,都有可能使用多個執行緒。

明明我原來的理解肯定有瑕疵,但不知道錯在哪裡。我最初的理解是否僅在執行PARALLEL查詢時適用?

謝謝

我最初的理解是(可能不正確)調度程序可能(在需要時)使用來自同一個 NUMA 節點的多個工作執行緒/執行緒來處理同一執行請求的不同任務,當它是串列執行時。

串列計劃不會使用多個執行緒,它只會使用單個執行緒來執行任務。當串列查詢開始時,它將綁定到調度程序,並且該調度程序將不會執行任何其他任務,除非它完成此查詢。調度程序可能會等待程序完成,從而迫使查詢等待。

還值得注意的是,MAXDOP 設置控制用於並行處理的執行緒數量,並且始終在執行計劃中為每個運算符指定 MAXDOP,而不是每個執行計劃

我強烈建議您閱讀以下 Paul White 的文章

了解和使用 SQL Server 中的並行性

引用自:https://dba.stackexchange.com/questions/175977