檢查清單:Azure VM 上的 SQL Server 最佳作法

適用於:Azure VM 上的 SQL Server

本文提供一系列最佳做法與指導方針的快速檢查清單,以將 Azure 虛擬機器 (VM) 上 SQL Server 的效能最佳化。

如需完整的詳細資料,請參閱此系列的其他文章:VM 大小儲存體安全性HADR 設定收集基準

啟用適用於 Azure VM 上 SQL Server 的 SQL 評定,將會根據 Azure 入口網站之 SQL VM 管理頁面上的已知最佳做法和結果來評估 SQL Server。

如需最佳化 SQL Server VM 效能和自動化管理的最新功能影片,請觀看下列 Data Exposed 影片 (英文):

概觀

在 Azure 虛擬機器中執行 SQL Server 時,請繼續使用相同的資料庫效能微調選項,這些選項適用於內部部署伺服器環境中的 SQL Server。 不過,公用雲端中關聯式資料庫的效能優劣取決於許多因素,例如虛擬機器的大小和資料磁碟的設定。

通常必須在最佳化成本與最佳化效能之間做出取捨。 此效能最佳做法系列著重於取得 Azure 虛擬機器上 SQL Server 的「最佳」效能。 如果工作負載需求不高,則不一定要遵循每個最佳化建議。 評估以下建議時,請考量您的效能需求、成本和工作負載模式。

VM 大小

本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的 VM 大小最佳做法

  • 新的 Ebdsv5 系列提供 Azure 中最高的 I/O 輸送量對虛擬核心比率,以及比率為 8 的記憶體對虛擬核心比。 此系列可為 Azure VM 上的 SQL Server 工作負載提供最佳的效能價格。 針對大多數 SQL Server 工作負載,請優先考慮使用此系列。
  • 使用具有 4 vCPU (含) 以上的 VM 大小,例如 E4ds_v5 或更高版本。
  • 使用記憶體最佳化的虛擬機器大小,使 SQL Server 工作負載達到最佳效能。
  • Edsv5MMv2 系列提供 OLTP 工作負載所需的最佳記憶體對虛擬核心比。
  • M 系列 VM 可在 Azure 中提供最高的記憶體對虛擬核心比。 針對任務關鍵性和資料倉儲工作負載,請考慮使用這些 VM。
  • 使用 Azure Marketplace 映像來部署 SQL Server 虛擬機器,因為已針對最佳效能對 SQL Server 設定和儲存體選項進行設定。
  • 收集目標工作負載的效能特性,並以此判斷適合您業務的 VM 大小。
  • 使用 Data Migration AssistantSKU 建議工具,找出您現有 SQL Server 工作負載的正確 VM 大小。
  • 使用 Azure Data Studio 移轉至 Azure。

儲存體

本節中的檢查清單涵蓋了適用於 Azure VM 上 SQL Server 的儲存體最佳做法

  • 在選擇磁碟類型之前,請先監視應用程式,並判斷 SQL Server 資料、記錄及 tempdb 檔案的儲存體頻寬和延遲需求
  • 如果可用,請在 tempdbD:本機 SSD 磁碟區上設定資料和記錄檔。 SQL IaaS 代理程式延伸模組會處理重新佈建時所需的資料夾和權限。
  • 若要將儲存體效能最佳化,請規劃最高未快取可用的 IOPS,並使用資料快取做為資料讀取的效能特徵,同時避免虛擬機器和磁碟上限
  • 使用 Ebdsv5 或 Ebsv5 系列 SQL Server VM 時,請使用 進階版 SSD v2 以獲得最佳價格效能。 您可以使用 Azure 入口網站 來部署具有 進階版 SSD v2 的 SQL Server VM(目前為預覽版)。
  • 考慮將 Azure 彈性 SAN 用於 SQL Server 工作負載,以實現更佳的成本效益,因為儲存體整合、共用動態效能以及無需升級 VM 即可提高儲存體輸送量的能力。
  • 將資料、記錄與 tempdb 檔案放在不同的磁碟機上。
    • 針對資料磁碟機,使用進階 P30 和 P40 或較小型磁碟來確保快取支援的可用性。 在使用 Ebdsv5 VM 系列時,使用進階 SSD v2,它為需要高 IOPS 和 I/O 輸送量的工作負載提供更好的價格效能。
    • 評估進階 SSD v2 或進階 SSD P30 – P80 磁碟時,針對容量和測試效能與成本相對的記錄磁碟機方案
    • 在選擇最佳的 VM 大小之後,對於不屬於容錯移轉叢集執行個體 (FCI) 的大部分 SQL Server 工作負載,將 tempdb 放在暫存磁碟 (暫存磁碟是暫時性的,預設為 D:\)。
      • 如果對 tempdb 來說,本機磁碟機的容量不足,請考慮調整 VM 的大小。 如需詳細資訊,請參閱<資料檔案快取原則>(機器翻譯)。
    • 針對故障轉移叢集實例 (FCI) 放在 tempdb 共用記憶體上。
      • 如果 FCI 工作負載嚴重相依於 tempdb 磁碟效能,則以進階設定的方式將 tempdb 放在本機暫時 SSD (預設 D:\) 磁碟機,此磁碟機並非 FCI 儲存體的一部分。 這項設定需要自訂監視和動作,由於此磁碟機的任何失敗都不會從 FCI 觸發動作,所以需要確保本機暫時 SSD (預設 D:\) 磁碟機處於隨時可用狀態。
  • 使用儲存空間來分割多個 Azure 資料磁碟,以將 I/O 頻寬增加高達目標虛擬機器的 IOPS 和輸送量限制。
  • 將資料檔案磁碟的主機快取設定為 [唯讀]
  • 將記錄檔磁碟的主機快取設定為 [無]
    • 請勿在包含 SQL Server 資料或記錄檔的磁碟上啟用讀取/寫入快取。
    • 在變更磁碟的快取設定之前,請一律停止 SQL Server 服務。
  • 請考慮使用標準儲存體處理開發和測試工作負載,以及長期備份封存。 不建議使用標準 HDD/SSD 進行生產工作負載。
  • 只應針對較小型的開發/測試工作負載和部門系統考慮使用點數型磁碟高載 (P1-P20)。
  • 若要將儲存體效能最佳化,請規劃可用的最高未快取的 IOPS,並使用資料快取做為資料讀取的效能功能,同時避免虛擬機器和磁碟上限/節流
  • 將您的資料磁碟格式化,以針對位於暫存 D:\ 磁碟機以外之磁碟機上的所有資料檔案使用 64 KB 的配置單位大小 (預設值為 4 KB)。 透過 Azure Marketplace 部署的 SQL Server VM 隨附的資料磁碟會以配置單位大小進行格式化,並將儲存體集區的交錯設定為 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) 等功能可以跨混合式工作負載使用,以改善安全性評估,並讓您能夠回應風險。 向 SQL IaaS 代理程式延伸模組註冊您的 SQL Server VM,以在 Azure 入口網站的 SQL 虛擬機器資源內顯示適用於雲端的 Microsoft Defender 評定。
  • 利用適用於 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 儲存體服務加密將待用的受控磁碟加密,其中加密金鑰為儲存在 Azure 中的 Microsoft 受控金鑰。
  • 如需受控磁碟加密選項的比較,請檢閱受控磁碟加密比較圖表
  • 您應該在虛擬機器上關閉管理連接埠 - 開啟遠端管理連接埠會使您的 VM 暴露在網際網路型攻擊的高風險層級之下。 這些攻擊會嘗試對認證發動暴力密碼破解攻擊,來取得機器的系統管理員存取權。
  • 開啟 Azure 虛擬機器的 Just-In-Time (JIT) 存取
  • 透過遠端桌面通訊協定 (RDP) 使用 Azure Bastion
  • 使用 Azure 防火牆來鎖定連接埠並僅允許必要的應用程式流量,這是一項受控防火牆即服務 (FaaS),可根據原始 IP 位址授與/拒絕伺服器存取。
  • 使用網路安全性群組 (NSG) 來篩選 Azure 虛擬網路中的 Azure 資源往返流量
  • 使用應用程式安全性群組,將具有類似連接埠篩選需求及類似功能的伺服器分組在一起,例如網頁伺服器和資料庫伺服器。
  • 針對網頁伺服器和應用程式伺服器,請使用 Azure 分散式阻斷服務 (DDoS) 保護。 DDoS 攻擊旨在耗盡網路資源,讓應用程式變慢或沒有回應。 DDos 攻擊通常會以使用者介面為目標。 Azure DDoS 保護會在不必要的網路流量影響服務可用性之前先予以清理
  • 利用 VM 擴充功能可協助解決反惡意程式碼、預期狀態、威脅偵測、預防及補救,以解決作業系統、電腦和網路層級的威脅:
  • 利用 Azure 原則來建立可套用至您環境的商務規則。 Azure 原則會根據 JSON 格式中定義的規則比較這些資源的屬性,以評估 Azure 資源。
  • Azure 藍圖可讓雲端架構設計師和中央資訊技術人員定義一組可重複使用的 Azure 資源,其中實作並遵循組織的標準、模式和需求。 Azure 藍圖與 Azure 原則不同

SQL Server 功能

以下是在生產環境的 Azure 虛擬機器中執行 SQL Server 執行個體時,SQL Server 設定最佳做法的快速檢查清單:

Azure 功能的地圖

以下是在 Azure VM 上執行 SQL Server 時,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 個活動訊號
    • CrossSubnetDelay:1 秒
    • CrossSubnetThreshold:40 個活動訊號
  • 將您的 VM 放置在可用性設定組或不同的可用性區域中。 若要深入了解,請參閱 VM 可用性設定
  • 每個叢集節點都會使用單一 NIC。
  • 設定叢集仲裁投票,以使用 3 個或以上的奇數投票。 請不要將投票指派給災害復原區域。
  • 請仔細監視資源限制,以避免由於資源限制而造成非預期的重新啟動或容錯移轉。
    • 確定您的作業系統、驅動程式和 SQL Server 都是最新組建。
    • 針對 Azure VM 上的 SQL Server 最佳化效能。 若要深入了解,請檢閱本文中的其他小節。
    • 減少或分散工作負載,以避免資源限制。
    • 移至其限制較高的 VM 或磁碟,以避免受到限制。

針對 SQL Server 可用性群組或容錯移轉叢集執行個體,請考慮下列最佳做法:

  • 如果您經常遇到非預期的失敗,則請遵循本文其餘部分所述的效能最佳做法。
  • 如果最佳化 SQL Server VM 效能無法解決未預期的容錯移轉,則請考慮針對可用性群組或容錯移轉叢集執行個體放寬監視。 不過,這麼做可能無法解決問題的基礎來源,而且可能會透過降低失敗的可能性來掩蓋徵兆。 您可能還是需要調查並解決基礎根本原因。 針對 Windows Server 2012 或更高版本,請使用下列建議值:
    • 租用逾時:使用此方程式來計算租用逾時最大值:
      Lease timeout < (2 * SameSubnetThreshold * SameSubnetDelay).
      從 40 秒開始。 如果您要使用先前建議的寬鬆 SameSubnetThresholdSameSubnetDelay 值,則請不要超過 80 秒的租用逾時值。
    • 指定期間內的失敗次數上限:將此值設定為 6。
  • 使用虛擬網路名稱 (VNN) 和 Azure Load Balancer 連線至您的 HADR 解決方案時,請在連接字串中指定 MultiSubnetFailover = true,即使您的叢集只橫跨一個子網路也是一樣。
    • 如果用戶端不支援 MultiSubnetFailover = True,則您可能需要設定 RegisterAllProvidersIP = 0HostRecordTTL = 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 效能問題進行疑難解答。

考慮為 Azure VM 上的 SQL Server 啟用 SQL 評定

請檢閱 Azure 虛擬機器上的 SQL Server 概觀中其他「SQL Server 虛擬機器」的相關文章。 如果您有 SQL Server 虛擬機器的相關問題,請參閱常見問題集