CPU 組態
SQL Server 效能對 CPU 和核心組態有多項相依性。
超執行緒
超執行緒是指同時執行多執行緒( SMT )、可改善在 x86 處理器上執行運算的平行化。Intel 和 AMD 處理器均提供 SMT 。
超執行緒會產生邏輯 CPU 、在作業系統中顯示為實體 CPU 。SQL Server 接著會看到這些額外的 CPU 、並使用這些 CPU 、就好像核心數量比實際存在的數量還多。這可以透過增加平行化來大幅改善效能。
此處的注意點是、每個 SQL Server 版本都有自己的運算能力限制。如需詳細資訊、請參閱依 SQL Server 版本計算容量限制。
核心與授權
SQL Server 授權有兩個選項。第一個稱為伺服器 + 用戶端存取授權( CAL )模式、第二個是每個處理器核心模式。雖然您可以使用伺服器 + CAL 策略存取 SQL Server 中所有可用的產品功能、但每個插槽的硬體限制為 20 個 CPU 核心。即使您的伺服器的 SQL Server Enterprise Edition + CAL 每個插槽有超過 20 個 CPU 核心、應用程式也無法在該執行個體上同時使用所有這些核心。
下圖顯示啟動後的 SQL Server 記錄訊息、指出核心限制的強制執行。
因此、若要使用所有 CPU 、您應該使用每個處理器核心授權。如需 SQL Server 授權的詳細資訊、請參閱 "SQL Server 2022 :現代化的資料平台"。
CPU 親和性
除非您遇到效能問題、否則您不太可能需要變更處理器親和性預設值、但仍值得您瞭解它們是什麼、以及它們的運作方式。
SQL Server 可透過兩個選項來支援處理器關聯性:
-
CPU 親和性遮罩
-
關聯性 I/O 遮罩
SQL Server 會使用作業系統提供的所有 CPU (如果選擇了每個處理器核心授權)。它也會建立排程器 f0r 每個 CPU 、以充分利用任何指定工作負載的資源。當多工處理時、伺服器上的作業系統或其他應用程式可以將處理執行緒從一個處理器切換至另一個處理器。SQL Server 是一種資源密集的應用程式、發生這種情況時、效能可能會受到影響。為了將影響降至最低、您可以設定處理器、以便將所有 SQL Server 負載導向預先選定的處理器群組。這是透過使用 CPU 關聯性遮罩來達成的。
關聯性 I/O 遮罩選項會將 SQL Server 磁碟 I/O 繫結至 CPU 子集。在 SQL Server OLTP 環境中、此延伸功能可大幅提升 SQL Server 執行緒的效能、以執行 I/O 作業。
平行度上限( MAXDOP )
根據預設、如果選擇個別處理器核心授權、 SQL Server 會在查詢執行期間使用所有可用的 CPU 。
雖然這對大型查詢很有幫助、但可能會造成效能問題並限制並行處理。更好的方法是將平行度限制在單一 CPU 插槽中的實體核心數量。例如、在具有兩個實體 CPU 插槽、每個插槽有 12 個核心的伺服器上、無論超執行緒為何、都 `MAXDOP`應設為 12 。 `MAXDOP`無法限制或指定要使用的 CPU 。而是限制單一批次查詢可以使用的 CPU 數量。
* NetApp 推薦 * 適用於資料倉儲等 DSS 、從 50 開始 MAXDOP 、視需要探索調校或調校。進行變更時、請務必測量應用程式中的關鍵查詢。
|
最大工作執行緒數
當大量用戶端連線至 SQL Server 時、最大工作執行緒選項可協助最佳化效能。
通常會為每個查詢建立個別的作業系統執行緒。如果數百個同時連線到 SQL Server 、則每個查詢的單執行緒組態可能會消耗過多的系統資源。此 `max worker threads`選項可讓 SQL Server 建立一個工作執行緒集區、以共同為大量查詢要求提供服務、進而協助改善效能。
預設值為 0 、可讓 SQL Server 在啟動時自動設定工作執行緒數量。這適用於大多數系統。Max Worker 執行緒是進階選項、如果沒有經驗豐富的資料庫管理員( DBA )的協助、就不應變更。
何時應設定 SQL Server 使用更多工作執行緒?如果每個排程器的平均工作佇列長度超過 1 、您可能會因為在系統中新增更多執行緒而受益、但前提是負載未受 CPU 限制或遇到任何其他繁重的等待。如果發生上述任一種情況、新增更多執行緒並不會有幫助、因為它們最終會等待其他系統瓶頸。如需工作者執行緒上限的詳細資訊、請參閱 "設定最大工作執行緒伺服器組態選項"。
使用 SQL Server Management Studio 設定最大工作執行緒。
下列範例說明如何使用 T-SQL 設定最大工作執行緒選項。
EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE ; GO EXEC sp_configure 'max worker threads', 900 ; GO RECONFIGURE; GO