共用方式為


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

適用於:Azure VM 上的 SQL Server

本文提供檢查清單,作為一系列最佳做法和指導方針的一部分,以優化 Azure 虛擬機器 (VM) 上 SQL Server 的效能。 使用本指南來改善您的 VM 組態、儲存體設定、安全性狀態,以及針對常見的效能問題進行疑難排解。

本文中的檢查清單簡要概述了本系列以下文章中更全面的詳細資訊:

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

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

概觀

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

通常必須在最佳化成本與最佳化效能之間做出取捨。 此效能最佳做法系列著重於取得 Azure 虛擬機器上 SQL Server 的「最佳」效能。

後續步驟: 從第一個 VM 大小建議 區段開始,然後繼續瀏覽 儲存體安全性和SQL Server 功能 區段,以取得完整的最佳化方法。

如果工作負載需求不高,則不一定要遵循每個最佳化建議。 評估以下建議時,請考量您的效能需求、成本和工作負載模式。

手動將 SQL Server 安裝至 Azure VM

如果您打算在 Azure VM 上手動安裝 SQL Server,請遵循下列基本步驟,以避免常見的設定問題:

  • 請確定您有可供安裝的產品金鑰。
  • 避免 不支持的 組態,例如:
    • 每個 NUMA 節點有超過 64 個虛擬核心。
    • 具有8 KB扇區大小的記憶體。
    • Azure 虛擬機器規模設定集。
  • 如果它們還不存在,請在啟動安裝媒體之前,先建立 SQL Server 安裝和數據文件的資料夾。
  • 將安裝媒體複製到本機磁碟驅動器,而不是直接從掛接的 ISO 進行安裝。
  • 安裝之後,請使用 SQL Server IaaS 代理程式擴充功能註冊 SQL Server VM,以自動化管理工作。
  • tempdb盡可能將資料庫放在本機 SSD 暫時記憶體上。

VM 大小

警告

tempdb不支援將具有未初始化暫時性磁碟的 Azure VM 映像放在本機暫存磁碟上。 透過 Azure 入口網站進行部署可能會失敗,而且 SQL Server 可能無法啟動。 當您透過 Azure 入口網站部署 SQL Server 映像時,以及手動安裝 SQL Server 時,請使用不同的 VM 大小,或放在 tempdb 非暫時性儲存體上。 若要深入瞭解,請檢閱 VM 部署和 SQL Server 失敗

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

  • 識別工作負載效能特性,以判斷適合您企業的 VM 大小。
  • 如果您要移轉至 Azure,請使用 適用於 Azure Data Studio 的 Azure SQL 移轉延伸模組 來尋找現有 SQL Server 工作負載的正確 VM 大小,然後使用 Azure Data Studio 進行移轉。
  • 使用 Azure Marketplace 映像來部署您的 SQL Server VM,因為 SQL Server 的設定和儲存選項已經過配置以達到最佳效能。
  • 使用具有 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 支援性,以避免不支持的設定。

儲存體

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

  • 在選擇磁碟類型之前,請先監控應用程式,並判斷 SQL Server 資料、記錄及 檔案的存放頻寬和延遲需求
  • 如果可用,請在佈署新虛擬機器時,或在手動安裝 SQL Server 之後,配置 D: 本地 SSD 卷上的資料及記錄檔案。 SQL IaaS 代理程式延伸模組會處理重新佈建時所需的資料夾和權限。
  • 若要將儲存效能最佳化,請規劃使用最高可用的未快取 IOPS,並利用資料快取來增強資料讀取效能,同時避免限制虛擬機器和磁碟的效能上限
  • 使用 Ebdsv5 或 Ebsv5 系列 SQL Server VM 時,使用 進階 SSD v2 以取得最佳價格效能。 您可以使用 Azure 入口網站透過進階 SSD v2 部署 SQL Server VM (目前為預覽狀態)。
  • 如果您的工作負載需要超過 160,000 IOPS,請使用 Premium SSD v2Azure Ultra 磁碟
  • 將資料、記錄與 tempdb 檔案放在不同的磁碟機上。
    • 針對資料磁碟機,使用進階 P30 和 P40 或較小型磁碟來確保快取支援的可用性。 在使用 Ebdsv5 VM 系列時,使用進階 SSD v2,它為需要高 IOPS 和 I/O 輸送量的工作負載提供更好的價格效能。
    • 在評估進階 SSD v2 或進階 SSD P30 – P80 磁碟時,制定記錄磁碟機方案,考慮容量和測試效能相對於成本的表現。
    • tempdb置於臨時磁碟上(臨時磁碟為短暫性,默認為D:\),適用於大多數不屬於故障轉移叢集實例(FCI)之 SQL Server 工作負載。在選擇最佳 VM 大小後操作。
      • 如果對 tempdb 來說,本機磁碟機的容量不足,請考慮調整 VM 的大小。 如需詳細資訊,請參閱資料檔案快取原則
    • 對於容錯移轉叢集執行個體 (FCI),請將 tempdb 放在共用儲存體上。
      • 如果 FCI 工作負載嚴重相依於 tempdb 磁碟效能,則以進階設定的方式將 tempdb 放在本機暫時 SSD (預設 D:\) 磁碟機,此磁碟機並非 FCI 儲存體的一部分。 這項設定需要客製化監控和行動,以確保本機暫存 SSD(預設 D:\)磁碟機處於隨時可用狀態,因為此磁碟機的任何故障都不會觸發 FCI 採取行動。
  • 使用儲存空間來分割多個 Azure 資料磁碟,以將 I/O 頻寬增加高達目標虛擬機器的 IOPS 和輸送量限制。
  • 將資料檔案磁碟的主機快取設定為唯讀
  • 將記錄檔磁碟的主機快取設定為 [無]
    • 請勿在包含 SQL Server 資料或記錄檔的磁碟上啟用讀取/寫入快取。
    • 在變更磁碟的快取設定之前,請一律停止 SQL Server 服務。
  • 將數個不同的工作負載移轉至雲端時,Azure 彈性 SAN 可以成為符合成本效益的合併儲存體解決方案。 不過,使用 Azure 彈性 SAN 時,達到 SQL Server 工作負載所需的 IOPS/輸送量通常需要超額佈建容量。 雖然通常不適合單一 SQL Server 工作負載,但將低效能工作負載與 SQL Server 結合時,您可以取得符合成本效益的解決方案。
  • 請考慮使用標準儲存體處理開發和測試工作負載,以及長期備份封存。 不建議使用標準 HDD/SSD 進行生產工作負載。
  • 只應針對較小型的開發/測試工作負載和部門系統考慮信用計算磁碟爆量 (P1-P20)。
  • 若要將儲存效能最佳化,請規劃可用的最高未快取 IOPS,並將資料快取用作資料讀取的效能增強功能,同時避免限制/調節虛擬機器和磁碟的性能
  • 將您的資料磁碟格式化,以針對位於暫存 D:\ 磁碟機以外之磁碟機上的所有資料檔案使用 64 KB 的配置單位大小 (預設值為 4 KB)。 透過 Azure Marketplace 部署的 SQL Server VM 隨附的資料磁碟,格式化時會將配置單位大小設定為 64 KB,並將儲存體集區的交錯配置也設定為 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 for Cloud 評估結果。
  • 利用適用於 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 擴充功能可協助解決反惡意程式碼、預期狀態、威脅偵測、預防及補救,以解決作業系統、電腦和網路層級的威脅:
  • 利用 Azure 原則來建立可套用至您環境的商務規則。 Azure 原則會根據 JSON 格式中定義的規則比較這些資源的屬性,以評估 Azure 資源。
  • Azure 藍圖可讓雲端架構設計師和中央資訊技術人員定義一組可重複使用的 Azure 資源,其中實作並遵循組織的標準、模式和需求。 Azure 藍圖與 Azure 原則不同
  • 使用 Windows Server 2019 或 Windows Server 2022 使 Azure VM 上的 SQL Server 符合 FIPS 規範。

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 虛擬機器的相關問題,請參閱常見問題集