max worker threads 選項

使用 max worker threads 選項,可以設定 Microsoft SQL Server 處理序可使用的工作者執行緒數目。SQL Server 使用 Microsoft Windows 2000 與 Windows Server 2003 作業系統的原生執行緒服務,因此會有一個或多個執行緒同時支援 SQL Server 所支援的每個網路、並且由另一個執行緒負責處理資料庫檢查點,至於所有使用者則由一個執行緒集區負責處理。

max worker threads 選項的用途

當大量用戶端連接到伺服器時,執行緒集區有助於最佳化效能。通常,會針對每一個查詢要求建立個別的作業系統執行緒。然而,在數以百計的伺服器連接之下,若每個查詢要求都使用一個執行緒,反而會耗用大量的系統資源。max worker threads 選項可讓 SQL Server 建立工作者執行緒集區,以服務更多的查詢要求數量,進而改善效能。

計算 max worker threads

max worker threads 的預設值為 0,可讓 SQL Server 在啟動時自動設定工作者執行緒的數目。此設定對大部分系統來說都是最適合的,但仍需視系統組態而定,有時候將 max worker threads 設為特定的值可改善效能。

下表顯示為 SQL Server 的不同 CPU 和版本組合自動設定的最大工作者執行緒數。

CPU 數

32 位元電腦

64 位元電腦

<= 4 個處理器

256

512

8 個處理器

288

576

16 個處理器

352

704

32 個處理器

480

960

警告注意事項注意

我們建議以 1024 當做 32 位元 SQL Server 的最大值。

當實際的查詢要求數目小於 max worker threads 的設定值時,就會由一個執行緒處理每一個查詢要求。然而,當實際的查詢要求數目超過 max worker threads 的設定值時,SQL Server 就會將工作者執行緒納入集區中,好讓下一個可用的工作者執行緒來處理要求。

從 SQL Server 2000 升級

在 SQL Server 2000 中,max worker threads 的預設值為 255。將 SQL Server 2000 Database Engine 的執行個體升級到較新的版本後,仍會保留 max worker threads 的組態值。升級時,我們建議您將新執行個體的 max worker threads 值變更為 0,好讓 Database Engine 能夠計算最佳執行緒數目。

設定 max worker threads

max worker threads 屬於進階選項。如果您要使用 sp_configure 系統預存程序來變更此設定,只有當 show advanced options 設為 1 時,才能變更 max worker threads。系統必須重新啟動,好讓新的設定生效。

[!附註]

當所有的工作者執行緒都在進行長時間執行的查詢時,SQL Server 可能會反應遲緩,直到工作者執行緒完成並恢復為可用狀態為止。雖然這不算是瑕疵,但有時卻讓人困擾。若處理序反應遲緩,而且無法處理新查詢,請使用專用管理員連接 (DAC) 來連接 SQL Server,然後清除處理序。若要避免這個問題,請增加 max worker threads 的最大數目。