本文提供一系列最佳做法與指導方針的快速檢查清單,以將 Azure 虛擬機器 (VM) 上 SQL Server 的效能最佳化。
如需完整的詳細資料,請參閱此系列的其他文章:VM 大小、儲存體、安全性、HADR 設定、收集基準。
啟用適用於 Azure VM 上 SQL Server 的 SQL 評定,將會根據 Azure 入口網站之 SQL VM 管理頁面上的已知最佳做法和結果來評估 SQL Server。
如需最佳化 SQL Server VM 效能和自動化管理的最新功能影片,請觀看下列 Data Exposed 影片 (英文):
- Caching and Storage Capping
- 使用 SQL Server IaaS 代理程式延伸模組自動化管理
- 使用 Azure 監視器計量追蹤 VM 快取健康狀態
- 在 Azure VM 中為您的 SQL Server 工作負載獲取最佳性價比
- 使用 PerfInsights 評估資源健康狀態並進行疑難排解
- Best Price-Performance with Ebdsv5 Series
- 在 Azure 虛擬機器上使用 SQL 評定最佳化 SQL Server 的設定。
- 在 Azure VM 上部署和管理的全新改良 SQL Server 體驗
概觀
在 Azure 虛擬機器中執行 SQL Server 時,請繼續使用相同的資料庫效能微調選項,這些選項適用於內部部署伺服器環境中的 SQL Server。 不過,公用雲端中關聯式資料庫的效能優劣取決於許多因素,例如虛擬機器的大小和資料磁碟的設定。
通常必須在最佳化成本與最佳化效能之間做出取捨。 此效能最佳做法系列著重於取得 Azure 虛擬機器上 SQL Server 的「最佳」效能。 如果工作負載需求不高,則不一定要遵循每個最佳化建議。 評估以下建議時,請考量您的效能需求、成本和工作負載模式。
手動將 SQL Server 安裝至 Azure VM
如果您打算在 Azure VM 上手動安裝 SQL Server,請考慮下列事項:
- 請確定您有可供安裝的產品金鑰。
- 避免 不支持的 組態,例如:
- 每個 NUMA 節點有超過 64 個虛擬核心。
- 具有8 KB扇區大小的記憶體。
- Azure Virtual Machine Scale Sets.
- 如果它們還不存在,請在啟動安裝媒體之前,先建立 SQL Server 安裝和數據文件的資料夾。
- 將安裝媒體複製到本機磁碟驅動器,而不是直接從掛接的 ISO 進行安裝。
- 安裝之後,請使用 SQL Server IaaS 代理程式擴充功能註冊 SQL Server VM,以自動化管理工作。
- Place the
tempdb
database on the local SSD ephemeral storage when possible.
VM 大小
本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的 VM 大小最佳做法。
- 識別工作負載效能特性,以判斷適合您企業的 VM 大小。
- 如果您要移轉至 Azure,請使用資料 移轉小幫手 和 SKU 等工具來尋找現有 SQL Server 工作負載的正確 VM 大小,然後使用 Azure Data Studio 進行移轉。
- Use Azure Marketplace images to deploy your SQL Server VMs as the SQL Server settings and storage options are configured for optimal performance.
- 使用具有 4 個或更多 vCPU 的 VM 大小。
- 使用記憶體最佳化的虛擬機器大小,使 SQL Server 工作負載達到最佳效能。
- Edsv5 系列和 Msv3 和 Mdsv3 系列提供 OLTP 工作負載建議的最佳記憶體對虛擬核心比率。
- Mbdsv3 系列 VM 為 Azure VM 上的 SQL Server 工作負載提供最佳效能。 針對任務關鍵 OLTP 和數據倉儲 SQL Server 工作負載,請先考慮此系列。
- Ebdsv5 系列提供高 I/O 輸送量到虛擬核心的比例,以及 8:1 的記憶體與虛擬核心比率。 此系列可為 Azure VM 上的 SQL Server 工作負載提供最佳的效能價格。 針對大部分的 SQL Server 工作負載,請先考慮這些 VM。
- M 系列系列提供在 Azure 中記憶體配置最高的 VM。
- Mbsv3 和 Mbdsv3 系列 VM 提供高記憶體配置,以及 M 系列系列中最高的 I/O 輸送量與虛擬核心比率,以及至少 8:1 的一致記憶體與虛擬核心比率。
- 使用較低層級的 D 系列、B 系列或 Av2 系列開始開發環境,並隨著時間成長您的環境。
- 請檢查 VM 支援性,以避免不支持的設定。
謹慎
SQL Server isn't supported on VM sizes that deploy with an uninitialized ephemeral disk. 若要深入瞭解,請檢閱 VM 部署和 SQL Server 失敗。
Storage
本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的儲存體最佳做法。
- 在選擇磁碟類型之前,請先監控應用程式,並判斷 SQL Server 資料、記錄及 檔案的存放頻寬和延遲需求 。
- If available, configure the
tempdb
data and log files on the D: local SSD volume when you deploy a new virtual machine, or after you've installed SQL Server manually. SQL IaaS 代理程式延伸模組會處理重新佈建時所需的資料夾和權限。 - 若要將儲存效能最佳化,請規劃使用最高可用的未快取 IOPS,並利用資料快取來增強資料讀取效能,同時避免限制虛擬機器和磁碟的效能上限。
- 使用 Ebdsv5 或 Ebsv5 系列 SQL Server VM 時,使用 進階 SSD v2 以取得最佳價格效能。 您可以使用 Azure 入口網站透過進階 SSD v2 部署 SQL Server VM (目前為預覽狀態)。
- 如果您的工作負載需要超過 160,000 IOPS,請使用 Premium SSD v2 或 Azure Ultra 磁碟。
- 將資料、記錄與
tempdb
檔案放在不同的磁碟機上。- 針對資料磁碟機,使用進階 P30 和 P40 或較小型磁碟來確保快取支援的可用性。 在使用 Ebdsv5 VM 系列時,使用進階 SSD v2,它為需要高 IOPS 和 I/O 輸送量的工作負載提供更好的價格效能。
- For the log drive plan for capacity and test performance versus cost while evaluating either Premium SSD v2 or Premium SSD P30 - P80 disks
- If submillisecond storage latency is required, use either Premium SSD v2 or Azure ultra disks for the transaction log.
- 為 M 系列虛擬機器進行部署時,請考慮使用寫入加速器,而不是 Azure Ultra 磁碟。
- Place tempdb on the temporary disk (the temporary disk is ephemeral, and defaults to
D:\
) for most SQL Server workloads that aren't part of a failover cluster instance (FCI) after choosing the optimal VM size.- 如果對
tempdb
來說,本機磁碟機的容量不足,請考慮調整 VM 的大小。 如需詳細資訊,請參閱資料檔案快取原則。
- 如果對
- For failover cluster instances (FCI) place
tempdb
on the shared storage.- 如果 FCI 工作負載嚴重相依於
tempdb
磁碟效能,則以進階設定的方式將tempdb
放在本機暫時 SSD (預設D:\
) 磁碟機,此磁碟機並非 FCI 儲存體的一部分。 這項設定需要客製化監控和行動,以確保本機暫存 SSD(預設D:\
)磁碟機處於隨時可用狀態,因為此磁碟機的任何故障都不會觸發 FCI 採取行動。
- 如果 FCI 工作負載嚴重相依於
- 使用儲存空間來分割多個 Azure 資料磁碟,以將 I/O 頻寬增加高達目標虛擬機器的 IOPS 和輸送量限制。
- 將資料檔案磁碟的主機快取設定為唯讀。
- 將記錄檔磁碟的主機快取設定為 [無]。
- 請勿在包含 SQL Server 資料或記錄檔的磁碟上啟用讀取/寫入快取。
- 在變更磁碟的快取設定之前,請一律停止 SQL Server 服務。
- 將數個不同的工作負載移轉至雲端時,Azure 彈性 SAN 可以成為符合成本效益的合併儲存體解決方案。 不過,使用 Azure 彈性 SAN 時,達到 SQL Server 工作負載所需的 IOPS/輸送量通常需要超額佈建容量。 雖然通常不適合單一 SQL Server 工作負載,但將低效能工作負載與 SQL Server 結合時,您可以取得符合成本效益的解決方案。
- 請考慮使用標準儲存體處理開發和測試工作負載,以及長期備份封存。 不建議使用標準 HDD/SSD 進行生產工作負載。
- Credit-based Disk Bursting (P1-P20) should only be considered for smaller dev/test workloads and departmental systems.
- 若要將儲存效能最佳化,請規劃可用的最高未快取 IOPS,並將資料快取用作資料讀取的效能增強功能,同時避免限制/調節虛擬機器和磁碟的性能。
- 將您的資料磁碟格式化,以針對位於暫存
D:\
磁碟機以外之磁碟機上的所有資料檔案使用 64 KB 的配置單位大小 (預設值為 4 KB)。 SQL Server VMs deployed through Azure Marketplace come with data disks formatted with allocation unit size and interleave for the storage pool set to 64 KB. - 在與 SQL Server VM 相同的區域中設定儲存體帳戶。
- 停用 Azure 異地備援儲存體 (異地複寫) 並在儲存體帳戶上使用 LRS (本地備援儲存體)。
- 啟用 SQL 最佳做法評估,以識別可能的效能問題,並評估您的 SQL Server VM 是否已設定為遵循最佳做法。
- 使用儲存體 IO 使用率計量來檢閱和監視磁碟和 VM 限制。
- 從防毒軟體掃描中排除 SQL Server 檔案,包括資料檔案、記錄檔和備份檔案。
安全性
本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的安全性最佳做法。
SQL Server 特徵和功能提供在資料庫層級保護數據的方法,這些方法可與基礎結構層級的安全性功能結合。 這些功能一起為雲端式和混合式解決方案的基礎結構層級提供 深度 防禦。 此外,透過 Azure 安全性措施,您可以加密敏感性資料、保護虛擬機器免於病毒和惡意程式碼的威脅、保護網路流量、識別和偵測威脅、符合合規性需求,並提供單一方法來管理及報告混合式雲端中的任何安全性需求。
- 使用適用於雲端的 Microsoft Defender 來評估和採取動作,以改善您資料環境的安全性態勢。 Azure 進階威脅防護 (ATP) 等功能可以跨混合式工作負載使用,以改善安全性評估,並讓您能夠回應風險。 Registering your SQL Server VM with the SQL IaaS Agent extension surfaces Microsoft Defender for Cloud assessments within the SQL virtual machine resource of the Azure portal.
- 利用適用於 SQL 的 Microsoft Defender 來探索及減輕潛在資料庫弱點,以及偵測可能對 SQL Server 執行個體和資料庫層造成威脅的異常活動。
- 弱點評定是適用於 SQL 的 Microsoft Defender 的一部分,可探索並協助補救您 SQL Server 環境的潛在風險。 它可讓您查看安全性狀態,並包含解決安全性問題的可行步驟。
- 使用 Azure 機密 VM 來強化對待用資料的保護,並防止主機操作員存取待用資料。 Azure 機密 VM 可讓您放心地將敏感性資料儲存在雲端,並符合嚴格的合規性需求。
- 如果您使用的是 SQL Server 2022,請考慮使用 Microsoft Entra 驗證來連線到 SQL Server 執行個體。
- Azure Advisor 會分析您的資源設定和使用量遙測,然後建議可協助您改善 Azure 資源成本效益、效能、高可用性和安全性的解決方案。 在虛擬機器、資源群組或訂閱層級使用 Azure Advisor 來協助識別並套用最佳做法,以最佳化您的 Azure 部署。
- 當您的合規性與安全性需求要求您使用加密金鑰來進行端對端資料加密 (包括加密暫時性磁碟 (本機連結的暫存磁碟)) 時,請使用 Azure 磁碟加密。
- 預設使用 Azure 儲存體服務加密將受控磁碟在靜止狀態下加密,加密金鑰由 Microsoft 管理,儲存在 Azure。
- 如需受控磁碟加密選項的比較,請檢閱受控磁碟加密比較圖表
- 您應該在虛擬機器上關閉管理連接埠 - 開啟遠端管理連接埠會使您的 VM 暴露在網際網路型攻擊的高風險層級之下。 這些攻擊會嘗試對憑證發動暴力破解,來取得機器的系統管理員存取權。
- 開啟 Azure 虛擬機器的 Just-In-Time (JIT) 存取
- 透過遠端桌面通訊協定 (RDP) 使用 Azure Bastion。
- 使用 Azure 防火牆來鎖定連接埠並僅允許必要的應用程式流量,這是一項受控防火牆即服務 (FaaS),可根據原始 IP 位址授與/拒絕伺服器存取。
- 使用網路安全性群組 (NSG) 來篩選 Azure 虛擬網路中的 Azure 資源往返流量
- 使用應用程式安全性群組,將具有類似連接埠篩選需求及類似功能的伺服器分組在一起,例如網頁伺服器和資料庫伺服器。
- 針對網頁伺服器和應用程式伺服器,請使用 Azure 分散式阻斷服務 (DDoS) 保護。 DDoS 攻擊旨在耗盡網路資源,讓應用程式變慢或沒有回應。 DDos 攻擊通常會以使用者介面為目標。 Azure DDoS 保護會在不必要的網路流量影響服務可用性之前先予以清理
- 利用 VM 擴充功能可協助解決反惡意程式碼、預期狀態、威脅偵測、預防及補救,以解決作業系統、電腦和網路層級的威脅:
- 來賓設定擴充功能會在虛擬機器內執行稽核與設定作業。
- 適用於 Windows 和 Linux 的網路監看員代理程式擴充功能會監視網路效能、診斷和分析服務,以允許監視 Azure 網路。
- 適用於 Windows 的 Microsoft Antimalware 擴充功能,可協助識別和移除病毒、間諜軟體及其他惡意程式碼,並具有可設定的警示。
- 評估協力廠商擴充功能,例如適用於 Windows VM 的 Symantec Endpoint Protection (/azure/virtual-machines/extensions/symantec)
- 利用 Azure 原則來建立可套用至您環境的商務規則。 Azure 原則會根據 JSON 格式中定義的規則比較這些資源的屬性,以評估 Azure 資源。
- Azure 藍圖可讓雲端架構設計師和中央資訊技術人員定義一組可重複使用的 Azure 資源,其中實作並遵循組織的標準、模式和需求。 Azure 藍圖與 Azure 原則不同。
- 使用 Windows Server 2019 或 Windows Server 2022 使 Azure VM 上的 SQL Server 符合 FIPS 規範。
SQL Server 功能
The following is a quick checklist of best practices for SQL Server configuration settings when running your SQL Server instances in an Azure virtual machine in production:
- 在適當的情況下啟用 [資料庫頁面壓縮]。
- 啟用 [備份壓縮]。
- 針對資料檔案,啟用 [立即檔案初始化] 功能。
- 限制資料庫的 [自動成長] 功能。
- 停用資料庫的 [自動壓縮] 功能。
- 停用資料庫的自動關閉。
- 將所有的資料庫 (包括系統資料庫) 移到資料磁碟。
- 將 SQL Server 的錯誤記錄檔和追蹤檔案目錄移至資料磁碟。
- 設定預設備份和資料庫檔案位置。
- 設定最大 SQL Server 記憶體限制,以保留足夠的記憶體給作業系統。 (使用記憶體\可用的位元組來監視作業系統記憶體健康狀態)。
- 啟用 鎖定頁面於記憶體中。
- 在 OLTP 負載較重的環境中,啟用針對臨時工作負載的最佳化。
- 針對已安裝的 SQL Server 版本評估並套用最新的累積更新。
- 在所有生產 SQL Server 資料庫上啟用 查詢存放區,並遵循最佳做法。
- 在關鍵任務應用程式資料庫上啟用
自動調整 。 - 確定已遵循所有 tempdb 最佳做法。
-
使用建議的檔案數目,並使用多個
tempdb
資料檔案,從每個核心一個檔案開始,最多八個檔案。 - 如果可用,請在 D: 本機 SSD 磁碟區上設定
tempdb
資料和記錄檔。 SQL IaaS 代理程式延伸模組會處理重新佈建時所需的資料夾和權限。 - 排程 SQL Server 代理程式作業,以執行 DBCC CHECKDB、索引重新組織、索引重建和更新統計資料作業。
- 監視和管理 SQL Server 交易記錄檔的健康情況和大小。
- 請善用任何該版本新增的 SQL Server 功能。
- 請注意您正在考慮部署的版本之間的支援功能差異。
- 從防毒軟體掃描中排除 SQL Server 檔案。 這包括資料檔案、記錄檔案和備份檔案。
Azure 功能
The following is a quick checklist of best practices for Azure-specific guidance when running your SQL Server on Azure VM:
- 向 SQL IaaS 代理程式延伸模組註冊,以挖掘許多功能的優點。
- 運用 SQL Server 工作負載的最佳備份與還原策略。
- 確定已在虛擬機器上啟用加速網路。
- 運用適用於雲端的 Microsoft Defender,來改善虛擬機器部署的整體安全性態勢。
- 運用適用於雲端的 Microsoft Defender、與適用於雲端的 Microsoft Defender 整合,以取得特定 SQL Server VM 涵蓋範圍,包括弱點評量和及時存取,以減少攻擊服務,並在必要時允許合法使用者存取虛擬機器。 若要深入瞭解,請參閱弱點評量、啟用 SQL Server VM 的弱點評量和即時存取。
- 運用 Azure Advisor 來解決效能、成本、可靠性、卓越的營運和安全性建議。
- 運用 Azure 監視器收集、分析及處理來自 SQL Server 環境的遙測資料。 這包括找出 VM 深入解析的基礎結構問題,以及使用 Log Analytics 監視資料以取得更深入的診斷。
- 針對開發和測試環境啟用 [自動關機]。
- 實作高可用性和災害復原 (HADR) 解決方案,以符合您的商務持續性 SLA,請參閱適用於 Azure VM 上 SQL Server 的 HADR 選項選項。
- 使用 Azure 入口網站 (支援 + 疑難排解),來評估資源健康狀態和歷程記錄;視需要提交新的支援要求。
HADR 設定
本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的 HADR 最佳做法。
高可用性和災害復原 (HADR) 功能,例如 Always On 可用性群組,而容錯移轉叢集執行個體會依賴基礎 Windows Server 容錯移轉叢集技術。 請檢閱修改 HADR 設定的最佳做法,以更妥善地支援雲端環境。
針對您的 Windows 叢集,請考慮下列最佳做法:
- 盡可能將 SQL Server VM 部署至多個子網路,以避免依賴 Azure Load Balancer 或分散式網路名稱 (DNN),將流量路由傳送至 HADR 解決方案。
- 將叢集變更為較不積極的參數,以避免因為暫時性網路失敗或 Azure 平台維修而發生非預期的中斷。 若要深入了解,請參閱心跳和閾值設定。 針對 Windows Server 2012 和更新版本,請使用下列建議值:
- SameSubnetDelay:1 秒
- SameSubnetThreshold: 40 heartbeats
- CrossSubnetDelay:1 秒
- CrossSubnetThreshold: 40 heartbeats
- 將您的 VM 放置在可用性設定組或不同的可用性區域中。 若要深入了解,請參閱 VM 可用性設定。
- 每個叢集節點都會使用單一 NIC。
- Configure cluster quorum voting to use 3 or more odd number of votes. 請不要將投票指派給災害復原區域。
- 請仔細監視資源限制,以避免由於資源限制而造成非預期的重新啟動或容錯移轉。
- 確定您的作業系統、驅動程式和 SQL Server 都是最新組建。
- 針對 Azure VM 上的 SQL Server 最佳化效能。 若要深入了解,請檢閱本文中的其他小節。
- 減少或分散工作負載,以避免資源限制。
- 移至限制較高的 VM 或磁碟,以避免侷限。
針對 SQL Server 高可用性群組或容錯移轉叢集執行個體,請考慮下列最佳做法:
- 如果您經常遇到非預期的失敗,則請遵循本文其餘部分所述的效能最佳做法。
- If optimizing SQL Server VM performance doesn't resolve your unexpected failovers, consider relaxing the monitoring for the availability group or failover cluster instance. 不過,這麼做可能無法解決問題的基礎來源,而且可能會透過降低失敗的可能性來掩蓋徵兆。 您可能還是需要調查並解決基礎根本原因。 針對 Windows Server 2012 或更高版本,請使用下列建議值:
-
租用逾時:使用此方程式來計算租用逾時最大值:
Lease timeout < (2 * SameSubnetThreshold * SameSubnetDelay)
.
從 40 秒開始。 如果您要使用先前建議的寬鬆SameSubnetThreshold
和SameSubnetDelay
值,則請不要超過 80 秒的租用逾時值。 - 指定期間內的失敗次數上限:將此值設定為 6。
-
租用逾時:使用此方程式來計算租用逾時最大值:
- 使用虛擬網路名稱 (VNN) 和 Azure Load Balancer 連線至您的 HADR 解決方案時,請在連接字串中指定
MultiSubnetFailover = true
,即使您的叢集只橫跨一個子網路也是一樣。- 如果用戶端不支援
MultiSubnetFailover = True
,則您可能需要設定RegisterAllProvidersIP = 0
和HostRecordTTL = 300
,以在較短的時間內快取用戶端認證。 不過,這麼做可能會對 DNS 伺服器造成額外的查詢。
- 如果用戶端不支援
- 若要使用分散式網路名稱 (DNN) 連線至 HADR 解決方案,請考慮下列事項:
- 您必須使用支援
MultiSubnetFailover = True
的用戶端驅動程式,且此參數必須在連接字串中。 - 連線至可用性群組的 DNN 接聽程式時,請在連接字串中使用唯一的 DNN 連接埠。
- 您必須使用支援
- 針對基本可用性群組使用資料庫鏡像連接字串,以略過負載平衡器或 DNN 的需求。
- 在部署高可用性解決方案之前,請先驗證 VHD 的磁區大小,以避免發生不一致的 I/O。 若要深入了解,請參閱 KB3009974。
- 如果 SQL Server 資料庫引擎、Always On 可用性群組接聽程式或容錯移轉叢集執行個體健康情況探查設定為使用 49,152 與 65,536 之間的連接埠 (TCP/IP 的預設動態連接埠範圍),則請新增每個連接埠的排除。 這樣做將讓其他系統無法動態指派相同的連接埠。 下列範例針對連接埠 59999 設置排除:
netsh int ipv4 add excludedportrange tcp startport=59999 numberofports=1 store=persistent
效能疑難排解
以下是可協助您進一步對 SQL Server 效能問題進行疑難排解的資源清單。
- 排查高 CPU 使用量問題
- 了解並解決封鎖問題
- 針對執行緩慢的查詢進行疑難排解
- 針對 I/O 所造成效能緩慢的問題進行疑難排解
- Troubleshoot query time-out errors
- Troubleshoot out of memory or low memory
- 效能儀表板提供對 SQL Server 效能狀態的深入解析。
相關內容
考慮為 Azure VM 上的 SQL Server 啟用 SQL 評定。
請檢閱 Azure 虛擬機器上的 SQL Server 概觀中其他「SQL Server 虛擬機器」的相關文章。 如果您有 SQL Server 虛擬機器的相關問題,請參閱常見問題集。