SQL Server 版本的計算容量限制
適用於:SQL Server
本文會討論 SQL Server 版本的計算容量限制,以及其在具有同步多執行緒 (SMT) 處理器的實體與虛擬化環境中有何差異。 在 Intel CPU 上,SMT 被稱為超執行緒。
概觀
下表說明上圖中的標記法:
值 | 描述 |
---|---|
0..1 | 零個或一個 |
1 | 只有一個 |
1..* | 一個或多個 |
0..* | 零個或多個 |
1..2 | 一個或兩個 |
詳細說明:
- 一個虛擬機器 (VM) 會配有一或多個虛擬處理器。
- 一個或多個虛擬處理器只會配置給一個虛擬機器。
- 零個或一個虛擬處理器會對應至零個或多個邏輯處理器。 當虛擬處理器與邏輯處理器之間的對應為:
- 一對零:表示客體作業系統未使用未繫結邏輯處理器。
- 一對多:表示過度認可。
- 零對多,表示虛擬機器不在主機系統上。 因此 VM 未使用任何邏輯處理器。
- 一個插槽會對應至零個或多個核心。 當插槽與核心之間的對應為:
- 一對零:表示空的插槽。 未安裝任何晶片。
- 一對一:表示插槽內裝有單核晶片。 這種對應目前不多。
- 一對多:表示插槽內裝有多核晶片。 典型值為 2、4 和 8。
- 一個核心會對應至一個或兩個邏輯處理器。 當核心與邏輯處理器之間的對應為:
- 一對一:SMT 已關閉。
- 一對二:SMT 已開啟。
下列定義適用於本文所用的詞彙:
從 SQL Server、作業系統、應用程式或驅動程式的觀點而言,執行緒或邏輯處理器都是單一邏輯計算引擎。
核心則是處理器單元, 可能由一或多個邏輯處理器組成。
一個實體處理器可能是由一個或多個核心組成。 實體處理器與處理器套件或插槽相同。
將每個 NUMA 節點的邏輯核心數目限制為 64
您可以在每個 NUMA 節點有超過 64 個邏輯處理器的伺服器上遇到堆疊傾印之類的問題。 BIOS 或韌體設定可將邏輯核心計數減少到每個NUMA節點最多64個邏輯處理器,提供給作業系統。
警告
SQL Server 2022 (16.x) 累積更新 11 引進中斷性變更,其中如果每個 NUMA 節點偵測到超過 64 個邏輯核心,則不會啟動 資料庫引擎。
您可以藉由停用 SMT 來減少 Azure 虛擬機器中每個 NUMA 節點的邏輯核心計數。 針對 裸機 SQL Server 執行個體,您可以使用子 NUMA 叢集 (SNC) 或每個通訊端的節點 (NPS) 選項來減少邏輯核心計數。
停用 Aure 虛擬機器中的 SMT
SQL Server 每個 NUMA 節點最多支援 64 個邏輯核心。 在某些情況下,Azure Mv3 系列 VM 可能會超過此限制,進而可防止 SQL Server 啟動,或允許其以降級的效能執行。 若要停用 SMT,請使用 PowerShell 和登錄編輯程式 (reg.exe
) 進行下列變更。 在編輯登錄之前,請務必先進行備份。
檢查邏輯核心數目。 如果比率為 2:1,則會啟用 SMT (邏輯核心數目是核心數目的兩倍)。
Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
透過下列兩個登錄變更停用 SMT,然後重新啟動 VM。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
再次檢查邏輯核心數目。 邏輯核心數目應與核心數目相符。
Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
減少裸機執行個體上的邏輯核心計數
下表說明如何減少 SQL Server 裸機執行個體的邏輯核心計數。
在 Intel CPU 上,您可以啟用子 NUMA 叢集 (SNC),先前稱為「晶片上叢集」(Cluster-on-Die, CoD),在單一實體通訊端內產生兩個 NUMA 網域。
組態設定 | 描述 |
---|---|
SNC 已停用 (預設值) | 停用子 NUMA 叢集。 |
SNC 已啟用 | 啟用子 NUMA 叢集。 |
在 AMD CPU 上,您可以啟用多個 [每個通訊端的節點數] (NPS) 選項。
組態設定 | 描述 |
---|---|
NPS0 |
在雙通訊端系統中,NUMA 會以單一節點的形式呈現,且所有記憶體通道會跨各節點交錯。 |
NPS1 (預設值) |
此設定會顯示每個通訊端一個 NUMA 節點。 |
NPS2 |
此設定會顯示每個通訊端兩個 NUMA 節點,類似於 SNC。 |
NPS4 |
此設定會顯示每個通訊端四個 NUMA 節點。 |
備註
具有多個實體處理器的系統或是具有多核心及/或 SMT 之實體處理器的系統可讓作業系統同時執行多個工作。 每個執行的執行緒都會顯示成邏輯處理器。 例如,如果電腦具有兩個啟用 SMT 的四核心處理器,且每個核心都有兩個執行緒,則一共有 16 個邏輯處理器:2 個處理器 x 每個處理器 4 個核心 x 每個核心 2 個執行緒。 值得注意的是:
來自 SMT 核心之單一執行緒的邏輯處理器計算容量小於來自停用 SMT 之相同核心的邏輯處理器計算容量。
SMT 核心中兩個邏輯處理器的計算容量則大於停用 SMT 之相同核心的計算容量。
每個 SQL Server 版本都有兩個計算容量限制:
插槽 (或實體處理器或處理器套件) 數目上限
作業系統所報告的核心數目上限
這些限制適用於單一 SQL Server 執行個體。 它們代表單一執行個體會使用的計算容量上限。 並不會限制要部署執行個體的目標伺服器。 實際上,在相同的實體伺服器上部署多個 SQL Server 執行個體,可有效地使用插槽及 (或) 核心數目超過所允許容量限制之實體伺服器的計算容量。
下列資料表會指定每個 SQL Server 版本其單一執行個體的計算容量限制:
SQL Server 版本 | 單一執行個體的計算容量上限 (SQL Server 資料庫引擎) | 單一執行個體的計算容量上限 (AS、RS) |
---|---|---|
Enterprise Edition:核心授權 1 | 作業系統最大值 | 作業系統最大值 |
開發人員 | 作業系統最大值 | 作業系統最大值 |
標準 | 限制為 4 個插槽或 24 個核心的較小者 | 限制為 4 個插槽或 24 個核心的較小者 |
Express | 限制為 1 個插槽或 4 個核心的較小者 | 限制為 1 個插槽或 4 個核心的較小者 |
1 伺服器 + 用戶端存取使用權 (CAL) 的 Enterprise Edition 授權限制為每個 SQL Server 執行個體 20 個核心。 (新協議未提供此授權。) 核心伺服器授權模式之下沒有任何限制。
在虛擬環境中,計算容量限制的依據為邏輯處理器的數目,而非核心數目。 原因是客體應用程式看不見處理器架構。
例如,如果一部伺服器的四個插槽都插入四核心處理器,而且能夠為每個核心啟用兩個 SMT 執行緒,則在啟用 SMT 的情況下,總共包含 32 個邏輯處理器。 但是在停用 SMT 的情況下,只包含 16 個邏輯處理器。 這些邏輯處理器可對應至伺服器上的虛擬機器。 而該邏輯處理器之虛擬機器計算負載則對應至主機伺服器中實體處理器上執行的執行緒。
當每個虛擬處理器的效能都很重要時,建議您停用 SMT。 您可以在 BIOS 設定期間使用處理器的 BIOS 設定,以設定 SMT,但這通常是伺服器範圍的作業,會影響伺服器上執行的所有工作負載。 您可考慮分隔在虛擬環境中執行的工作負載與實體作業系統環境中可從 SMT 效能獲益的工作負載。
相關內容
取得協助
- 對 SQL 的想法:有任何協助改善 SQL Server 的建議嗎?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (標籤 sql-server):詢問 SQL Server 問題
- Stack Overflow (標籤 sql-server):SQL 開發問題的回答
- Reddit:有關 SQL Server 的一般討論
- Microsoft SQL Server 授權條款及資訊
- 適用於商務使用者的支援選項
- 連絡 Microsoft
- 其他 SQL Server 說明與意見反應
參與編輯 SQL 文件
您知道您可以自行編輯 SQL 內容嗎? 這樣做不僅可以協助改善文件,也能名列該頁面的參與者。
如需詳細資訊,請參閱如何參與 SQL Server 文件