儲存體:Azure VM 上的 SQL Server 效能最佳做法

適用于:Azure VM 上的SQL Server

本文提供儲存體最佳做法與指導方針,以將 Azure 虛擬機器 (VM) 上 SQL Server 的效能最佳化。

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

若要深入了解,請參閱此系列的其他文章:檢查清單VM 大小安全性HADR 設定收集基準

檢查清單

請檢閱下列檢查清單,先簡單了解儲存體最佳做法的概要,本文其餘部分將提供更詳細的說明:

  • 在選擇磁碟類型之前,請先監視應用程式,並判斷 SQL Server 資料、記錄及 tempdb 檔案的儲存體頻寬和延遲需求
  • 若要將儲存體效能最佳化,請規劃最高未快取可用的 IOPS,並使用資料快取做為資料讀取的效能特徵,同時避免虛擬機器和磁碟上限
  • 將資料、記錄及 tempdb 檔案放在個別的磁碟機上。
    • 針對資料磁碟機,僅使用 Premium P30 和 P40 或較小型磁碟來確保快取支援的可用性
    • 評估 Premium P30-P80 磁碟時,針對容量和測試效能與成本相對的記錄磁碟機方案
      • 若需要快速儲存體延遲,請使用 Azure Ultra 磁碟 作為交易記錄。
      • 為 M 系列虛擬機器進行部署時,請考慮使用寫入加速器,而不是 Azure Ultra 磁碟。
    • 在選擇最佳的 VM 大小之後,對於不屬於容錯移轉叢集執行個體 (FCI) 的大部分 SQL Server 工作負載,將 tempdb 放在本機暫時 SSD (預設 D:\) 磁碟機。
      • 如果對 tempdb 來說,本機磁碟機的容量不足,請考慮調整 VM 的大小。 如需詳細資訊,請參閱資料檔案快取原則
    • 對於 FCI,請將 tempdb 放在共用儲存體上。
      • 如果 FCI 工作負載嚴重相依於 tempdb 磁碟效能,則以進階設定的方式將 tempdb 放在本機暫時 SSD (預設 D:\) 磁碟機,此磁碟機並非 FCI 儲存體的一部分。 這項設定將需要自訂監視和動作,由於此磁碟機的任何失敗都不會從 FCI 觸發動作,所以需要確保本機暫時 SSD (預設 D:\) 磁碟機處於隨時可用狀態。
  • 使用儲存空間來分割多個 Azure 資料磁碟,以將 I/O 頻寬增加高達目標虛擬機器的 IOPS 和輸送量限制。
  • 將資料檔案磁碟的主機快取設定為[唯讀]。
  • 將日誌檔案磁碟的主機快取設定為[無]。
    • 請勿在包含 SQL Server 資料或記錄檔的磁碟上啟用讀取/寫入快取。
    • 在變更磁碟的快取設定之前,請一律停止 SQL Server 服務。
  • 請考慮使用標準儲存體處理開發和測試工作負載,以及長期備份封存。 不建議使用標準 HDD/SDD 進行生產工作負載。
  • 只應針對較小型的開發/測試工作負載和部門系統考慮使用點數型磁碟高載 (P1-P20)。
  • 將您的資料磁碟格式化,以針對非位於暫存 D:\ 磁碟機的磁碟機上所有資料檔案使用 64 KB 的配置單位大小 (預設值為 4 KB)。 透過 Azure Marketplace 部署 SQL Server VM 隨附的資料磁碟會以配置單位大小進行格式化,並將存放集區集合的交錯設定為 64 KB。

若要將儲存體檢查清單與其他檢查清單相互比較,請參閱完整的效能最佳做法檢查清單

概觀

若要針對 Azure VM 上的 SQL Server 工作負載尋找最具效率的設定,請先測量您商務應用程式的儲存體效能。 了解儲存體需求之後,請選取支援必要 IOPS 和輸送量的虛擬機器,該虛擬機器應具備適當的記憶體與虛擬核心比例。

為您的工作負載需求選擇具有足夠儲存體可擴縮性的 VM 尺寸,以及符合您企業容量和效能需求的混合磁碟 (其通常位於存放集區中)。

磁碟的類型取決於磁碟上託管的檔案類型,以及您的最佳性能需求。

提示

透過 Azure 入口網站佈建 SQL Server VM 有助於引導您完成儲存體設定流程,並執行大部分的儲存體最佳做法,其中包括針對您的資料和記錄檔建立個別的存放集區、將 tempdb 定位至 D:\ 磁碟機、以及啟用最佳的快取原則。 如需佈建和設定儲存體的詳細資訊,請參閱 SQL VM 儲存體設定

VM 磁碟類型

您可以自行選擇您的磁碟效能等級。 可用於基礎儲存體的受控磁碟類型 (按照順序列出,效能能力越高排越後面) 為:標準硬碟 (HDD)、標準固態硬碟 (SSD)、進階固態硬碟 (SSD) 及 ultra 磁碟。

磁碟的效能會隨著容量而增加,並以高階磁碟標籤進行分組 (例如,具有 4 GiB 空間的 P1、120 IOPS 以及 P80 與 32 TiB 的儲存體和 20,000 IOPS)。 進階儲存體會支援儲存體快取,其可協助改善某些工作負載的讀取和寫入效能。 如需詳細資訊,請參閱受控磁碟概觀

對於您在 Azure VM 上的 SQL Server,您也需要考慮三大磁碟類型:作業系統磁碟、暫存磁碟以及資料磁碟。 請仔細選取儲存在作業系統磁碟機 (C:\) 和暫時性暫存磁碟機 (D:\) 上的內容。

作業系統磁碟

作業系統磁碟是指可開機,並掛接為執行中作業系統版本的虛擬硬碟 (VHD),且其標示為 C:\ 磁碟機。 建立 Azure 虛擬機器時,該平台會附加至少一個磁碟至 VM 作為作業系統磁碟。 C:\ 磁碟機為安裝應用程式和設定檔案時使用的預設位置。

對於生產 SQL Server 環境,請勿將作業系統磁碟用於資料檔案、記錄檔、或錯誤記錄檔。

暫存磁碟

許多 Azure 虛擬機器會包含另一個稱為暫存磁碟的磁碟類型 (標示為 D:\ 磁碟機)。 視虛擬機器系列和大小而定,此磁碟的容量將會隨其改變。 暫存磁片是暫時性的,這表示會重新建立磁碟儲存體 (如同該儲存體遭到解除配置,然後再次重新配置一遍),重新開機虛擬機器,或移至不同的主機 (例如,為了進行服務修復)。

暫存磁片磁碟機不會持續儲存檔案至遠端存放裝置,因此不應利用其儲存使用者資料庫檔案、交易記錄檔或任何必須予以保存的資料。

請將 tempdb 放在 SQL Server 工作負載的本機暫存 SSD D:\ 磁碟機上,除非您不想消耗本機快取。 如果您使用沒有暫存磁碟的虛擬機器,建議您將 tempdb 放在其個別的磁碟或存放集區,並將快取設定為[唯讀]。 若要深入瞭解,請參閱 tempdb 資料快取原則

資料磁碟

資料磁碟為遠端儲存體磁碟,通常會在存放集區中建立,此做法使其能超越任何單一磁碟可提供給虛擬機器的容量和效能。

以滿足工作負載的 IOPS、輸送量及容量需求為目的,連結最少的磁片數量。 請勿超過您預計中要調整大小的最小虛擬機器資料磁碟數量上限。

將資料和記錄檔放在已佈建為最符合效能需求的資料磁碟上。

將您的資料磁碟格式化,以使用 64 KB 的配置單位大小 (預設值為 4 KB) 對於位在暫存 D:\ 磁碟機以外的磁碟機上的所有資料檔案。 透過 Azure Marketplace 部署 SQL Server VM 隨附的資料磁碟會以配置單位大小進行格式化,並將存放集區的交錯設定為 64 KB。

注意

您也可以直接在 Azure Blob 儲存體SMB 儲存體 (例如 Azure 進階檔案共用) 上託管 SQL Server 資料庫檔案,但我們建議使用 Azure 受控磁碟,其可提供最佳效能、可靠性及功能可用性。

進階磁碟

針對生產 SQL Server 工作負載,請使用進階 SSD 磁碟搭配資料和記錄檔。 進階 SSD IOPS 和頻寬會根據磁碟大小和類型而有所不同。

針對生產工作負載,請使用 P30 和/或 P40 磁碟搭配 SQL Server 資料檔案,以確保快取支援,並使用 P30 或高達 P80 的 SQL Server 交易記錄檔。 為了享有最符合經濟效應的擁有權總成本,起始請先為資料和記錄檔設定 P30 (5000 IOPS/200 MBPS),而且只有在需要控制虛擬機器磁碟計數時,才選擇較高的容量。

針對 OLTP 工作負載,請使用尖峰時間的工作負載和 Disk Reads/sec + Disk Writes/sec 效能計數器,對於每個磁碟的目標 IOPS (或存放集區) 與效能需求進行比對。 針對資料倉儲和報告工作負載,請使用尖峰時間的工作負載來比對目標輸送量與 Disk Read Bytes/sec + Disk Write Bytes/sec

使用儲存空間來達到最佳效能、設定兩個集區,其一用於記錄檔,而另一個用於資料檔案。 如果您未使用磁碟等量分割,請使用兩個對應至個別磁碟機的進階 SSD 磁碟;其中一個磁碟機包含記錄檔,另一個則包含資料。

每個磁碟作為存放集區一部分使用所佈建的 IOPS 和輸送量。 磁碟的合併 IOPS 和輸送量功能是最大的功能,最高可達虛擬機器的輸送量限制。

最佳做法是盡可能使用最少的磁碟數量,同時符合 IOPS (和輸送量) 及容量的最低需求。 不過,價格和效能之間更佳的平衡通常來自於大量的小型磁碟,而不是少數的大型磁碟。

縮放進階磁碟的比例

第一次部署 Azure 受控磁碟時,該磁碟的效能層級會以佈建的磁碟大小為基礎。 在部署時指定效能層級,或在部署後再進行變更,且不變更磁碟的大小。 如果需求增加,您可以提高效能層級,以滿足您的商務需求。

變更效能層級可讓管理員為您做好準備,並滿足更高的需求,而不需依賴磁碟高載

在計費的設計目的是為了符合儲存體效能層級的情況下,您就可以在需要時使用較高的效能。 在不會增加容量的情況下,升級層級以滿足效能需求。 當不再需要額外的效能時,退回原始服務層級。

此類符合成本效益且暫時性的效能升級為適用於目標事件的強式使用案例,例如購物、效能測試、訓練事件及其他短暫的時間點 (只在短期內需要更佳的效能)。

如需詳細資訊,請參閱受控磁碟的效能層級

Azure Ultra 磁碟

如果需要降低延遲的快速回應時間,請考慮針對 SQL Server 記錄磁碟機使用 Azure Ultra 磁碟,或甚至考慮對 I/O 延遲非常敏感,與應用程式搭配的資料驅動器。

可以設定 Ultra 磁碟為容量和 IOPS 以獨立方式進行縮放。 使用 Ultra 磁碟,管理員可以根據應用程式需求,佈建具有容量、IOPS 及輸送量需求的磁碟。

並非所有 VM 系列都支援 Ultra 磁碟,而且有其他限制,例如區域可用性、備援以及 Azure 備份的支援。 若要深入瞭解,請參閱使用 Azure ultra 磁碟,取得關於限制的完整清單。

標準 HDD 和 SSD

標準 HDD 具有與 SSD 不同的延遲和頻寬,因此僅建議用於開發/測試工作負載。 生產工作負載應該使用進階 SSD。 如果您使用標準 SSD (開發/測試案例),建議您新增 VM 大小所支援的最大資料磁碟數量,並使用磁碟等量與儲存空間以發揮最佳效能。

Caching

支援進階儲存體快取的虛擬機器可以利用稱為 Azure BlobCache 或主機快取的額外功能,擴充虛擬機器的 IOPS 及輸送量功能。 針對進階儲存體和進階儲存體快取啟用的虛擬機器具有這兩種不同的儲存體頻寬限制,可一起搭配使用以改善儲存體效能。

沒有快取的 IOPS 和每秒百萬位元數 (MBps) 輸送量會算進虛擬機器未快取的磁碟輸送量限制。 最大快取限制會為讀取提供額外的緩衝區,此步驟會幫助解決成長及非預期的尖峰等問題。

在選項受到支援時,一律啟用進階快取,以在不需要額外費用的前提下,大幅改善對資料磁碟機的讀取效能。

讀取和寫入 Azure BlobCache (快取的 IOPS 和輸送量) 不會算進虛擬機器的未快取 IOPS 及輸送量限制。

注意

對於 4 TiB 和更大的磁碟,(P50 或更大) 將不支援磁碟快取。 如果將多個磁碟附加至您的 VM,小於 4 TiB 的每個磁碟會支援快取。 如需詳細資訊,請參閱磁碟快取

未快取的輸送量

最大未快取的磁碟 IOPS 和輸送量是虛擬機器可以處理的最大遠端存放庫限制。 這項限制是在虛擬機器上定義,且並非對於基礎磁碟儲存體的限制。 此限制僅適用于從遠端連線至 VM 的資料磁片磁碟機的 i/o,而非針對暫存磁片磁碟機的本機 i/o (D:\ 磁片磁碟機) 或 OS 磁片磁碟機。

您可以在虛擬機器的文件中,驗證可供 VM 使用的未快取 IOPS 和輸送量數量。

例如,M 系列 文件會顯示 Standard_M8ms VM 的最大未快取輸送量為 5000 IOPS,未快取磁碟輸送量為 125 MBps。

顯示 M 系列未快取磁片輸送量檔的螢幕擷取畫面。

同樣地,您可以看到 Standard_M32ts 支援 20,000 個未快取磁碟 IOPS 和 500 MBps 未快取的磁碟輸送量。 此限制一律受限於虛擬機器層級,與基礎進階磁碟儲存體無關。

如需詳細資訊,請參閱未快取和快取限制

快取和暫存儲存體輸送量

最大快取和暫存儲存體輸送量限制為獨立的限制,與虛擬機器上未快取的輸送量限制無關。 Azure BlobCache 由虛擬機器主機的隨機存取記憶與本機連結 SSD 的組合所組成。 虛擬機器中的暫存磁碟機 (D:\ 磁碟機) 也託管於此本機的 SSD。

只有在啟用主機快取時,最大快取和暫存儲存體輸送量限制會對本機暫存磁片磁碟機 (D:\ 磁碟機) 和 Azure BlobCache 進行控制。

當在進階儲存體啟用快取時,虛擬機器可以縮放至超過遠端存放裝置未快取的 VM IOPS 和輸送量限制的極限。

只有特定的虛擬機器能支援進階儲存體與進階儲存體快取 (必須在虛擬機器文件中進行驗證)。 例如,M 系列 文件顯示同時支援進階儲存體與進階儲存體快取:

顯示 M 系列進階儲存體支援的螢幕擷取畫面。

快取的限制將隨著虛擬機器大小變動。 例如,Standard_M8ms VM 支援 10000 快取的磁碟 IOPS 和 1000 MBps 快取的磁碟輸送量,總共快取大小為 793 GiB。 相等地,Standard_M32ts VM 支援 40000 快取的磁碟 IOPS 和 400 MBps 快取的磁碟輸送量,總共快取大小為 3174 GiB。

顯示 M 系列快取磁片輸送量檔的螢幕擷取畫面。

您可以在現有的 VM 上手動啟用主機快取。 在對虛擬機器的快取原則進行任何變更之前,請先停用所有應用程式工作負載和 SQL Server 服務。 變更任何虛擬機器快取設定會導致在套用設定之後,目標磁碟會遭到卸離並中斷連結,然後再重新連結。

資料檔案快取原則

您的儲存體快取原則會根據磁碟機上所託管的 SQL Server 資料檔案類型而有所不同。

下表提供建議快取原則的摘要,其基於 SQL Server 資料類型:

SQL Server 磁碟 建議
資料磁碟 針對裝載 SQL Server 資料檔案的磁碟啟用 Read-only 快取。
從快取讀取的速度會比從資料磁碟未快取的讀取更快。
未快取的 IOPS 和輸送量加上快取的 IOPS 和輸送量,將會產生 Vm 限制內虛擬機器可用的總可用效能,但實際的效能會因工作負載使用快取 (快取命中率) 的能力而異。
交易記錄磁碟 針對裝載交易記錄檔的磁碟,請將快取原則設定為 None。 針對交易記錄檔磁碟啟用快取並不會提供任何效能優勢,實際上,在記錄磁碟機上啟用 Read-onlyRead/Write 快取可能會降低寫入磁碟機的效能,並減少資料磁碟機可讀取的快取數量。
操作作業系統 (OS) 磁碟 預設的快取原則為 Read/write,適用於作業系統 (OS) 磁碟機。
不建議您變更作業系統磁碟機的快取層級。
tempdb 如果因為容量因素而無法將 tempdb 放在暫時磁碟機 D:\ 上,請調整虛擬機器的大小以取得較大的暫時磁碟機,或將 tempdb 放在已設定 Read-only 快取的個別資料磁碟機上。
虛擬機器快取和暫時磁碟機都使用本機 SSD,所以請記住,當您在暫時磁碟機上進行託管時,如果將 tempdb I/O 調整大小,則會將其算入快取的 IOPS 和輸送量虛擬機器限制。

重要

變更 Azure 磁碟的快取設定會將目標磁碟中斷連結再重新連結。 當您變更託管 SQL Server 資料、記錄檔或應用程式檔案之磁碟其中的快取設定時,請務必停用 SQL Server 服務以及任何其他相關的服務,以避免資料損毀。

若要深入瞭解,請參閱磁碟快取

磁碟等量分割

若要判斷資料磁碟的數量 (包括記錄檔和 tempdb),請分析 SQL Server 資料檔案所需的輸送量和頻寬。 輸送量和頻寬限制會依 VM 大小而有所不同。 若要深入了解,請參閱 VM 大小

如需更多的輸送量,請新增額外的資料磁碟,並使用磁碟等量分割。 例如,需要 12,000 IOPS 和 180 MB/秒 輸送量的應用程式可以使用三份等量 P30 磁碟來提供 15,000 IOPS 以及 600 MB/秒 輸送量。

若要設定磁碟等量分割,請參閱磁碟等量分割

磁碟上限

磁碟層級與虛擬機器層級都有輸送量限制。 每個 VM 和每個磁碟的最大 IOPS 限制都不盡相同,且各自獨立。

如果應用程式耗用的資源超出這些限制,其將會受到節流處理 (也稱為上限)。 選取磁碟等量中能夠滿足應用程式需求,且不會面臨上限限制的虛擬機器以及磁碟大小。 若要解決上限問題,請使用快取,或調整應用程式以減少需要的輸送量。

例如,有 12,000 IOPS 和 180 MB/秒 需求的應用程式可以採用下列方法:

  • 使用 Standard_M32ms,其最大未快取的磁碟輸送量為 20,000 IOPS 和 500 MBps。
  • 將三份 P30 磁碟進行分割以提供 15,000 IOPS 和 600 MB/秒的輸送量。
  • 使用 Standard_M16ms 的虛擬機器,並使用虛擬機器主機快取來利用本機快取,而不需耗用輸送量。

設定為在高使用率期間相應擴大的虛擬機器應佈建具有足夠 IOPS 和輸送量的儲存體,以支援最大的 VM 大小,同時讓磁碟的整體數量維持小於或等於要使用的最小 VM SKU 所支援的最大數目。

如需磁碟上限限制,以及如何使用快取來避免上限的相關詳細資訊,請參閱磁碟 IO 上限

注意

某些磁碟上限或許仍可提供令使用者滿意的效能;調整及維護工作負載,而不是調整大小為較大的 VM,可以在商務成本與效能之間達到平衡。

寫入加速

寫入加速為磁碟功能,僅適用於 M 系列 虛擬機器 (VM)。 寫入加速的目的是為了改善針對 Azure 進階儲存體的寫入 I/O 延遲,同時由於大量任務關鍵性 OLTP 工作負載或資料倉儲環境,而需要單一位數 I/O 延遲。

使用寫入加速來改善寫入延遲,針對裝載記錄檔的磁碟機。 請勿對於 SQL Server 資料檔案使用寫入加速。

寫入加速器磁碟會與虛擬機器共用相同的 IOPS 限制。 連結的磁碟不能超過 VM 的寫入加速器 IOPS 限制。

以下表格列出每個虛擬機器所支援的資料磁碟和 IOPS 數量:

VM SKU # 寫入加速器磁碟 每個 VM 的寫入加速器磁碟 IOPS
M416ms_v2、M416s_v2 16 20000
M128ms、M128s 16 20000
M208ms_v2、M208s_v2 8 10000
M64ms,M64ls,M64s 8 10000
M32ms,M32ls,M32ts,M32s 4 5000
M16ms,M16s 2 2500
M8ms,M8s 1 1250

使用寫入加速時有一些限制。 若要深入瞭解,請參閱使用寫入加速器時的限制

與 Azure ultra 磁片進行比較

寫入加速與 Azure ultra 磁碟之間的最大差異在於,「寫入加速」為虛擬機器功能,僅適用於 M 系列;而 Azure ultra 磁碟則是儲存體選項。 寫入加速為寫入最佳化的快取,其本身的限制取決於虛擬機器大小。 Azure ultra 磁碟為適用於 Azure 虛擬機器的低延遲磁碟儲存體選項。

如有可能,請對於交易記錄磁碟使用寫入加速,而不是 ultra 磁碟。 對於不支援寫入加速,但需要低延遲至交易記錄的虛擬機器,請使用 Azure ultra 磁碟。

監視儲存體效能

若要評估儲存體需求,並判斷儲存體的執行狀況如何,您必須了解測量基準,以及這些指標的含意。

IOPS (每秒輸入/輸出)是應用程式每秒對儲存體進行的要求數量。 使用效能監視器計數器 Disk Reads/secDisk Writes/sec 來測量 IOPS。 OLTP (線上交易處理)應用程式需要驅動更高的 IOPS,才能達到最佳效能。 付款處理系統、線上購物及零售銷售點系統等應用程式全都都是 OLTP (線上交易處理) 應用程式的範例。

輸送量為傳送到基礎儲存體的資料量,通常是以每秒 mb 數進行測量。 使用效能監視器的計數器 Disk Read Bytes/secDisk Write Bytes/sec 來測量輸送量。 資料倉儲 已進行最佳化,其透過 IOPS 來最大化輸送量。 用於分析的資料存放區、報告、ETL 工作流及其他商業智慧目標等應用程式都是資料倉儲應用程式的範例。

I/O 單位大小會影響 IOPS 和輸送量功能,由於較小的 I/O 大小會產生較高的 IOPS,而較大的 I/O 大小則會產生較高的輸送量。 SQL Server 會自動選擇最合適的 I/O 大小。 如需更多詳細資訊,請參閱針對您的應用程式最佳化 IOPS、輸送量及延遲

某些特定的 Azure 監視器計量非常適合用於探索虛擬機器和磁碟層級的上限,還有 AzureBlob 快取的耗用量以及健康情況。 若要識別需要新增至監視解決方案以及 Azure 入口網站儀表板的金鑰計數器,請參閱儲存體使用計量

注意

Azure 監視器目前未提供暫時暫存磁碟機 (D:\) 的磁碟層級計量。 VM 快取的 IOPS 耗用百分比連同 VM 快取的頻寬耗用百分比,將同時反映暫時暫存磁碟機 (D:\) 和主機快取的 IOPS 和輸送量。

下一步

若要深入了解,請參閱此最佳作法系列的其他文章:

如需安全性最佳做法,請參閱 Azure 虛擬機器上的 SQL Server 安全性考量

如需在 Azure VM 上使用 TPC-E 和 TPC_C 基準來測試 SQL Server 效能的詳細資訊,請參閱部落格最佳化 OLTP 效能一文。

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