Azure 虛擬機上的磁碟性能緩慢
好的,首先,請允許我說我不是運營人員,而是開發人員。所以我要在這裡進入一個不為人知的地方,所以請多多包涵。
我想使用 Azure 虛擬機從 1.9 GB 的 zip 文件中提取 50 GB 的 XML 文件。因此,我一直在測試我應該使用 Azure 上的哪個實例大小來獲得良好的性能,同時不支付超出我需要的費用。
但是,Azure VM 的磁碟性能並不出色,我想知道是我做錯了什麼,還是我的結果是可以預期的。
首先,我一直在測試什麼?我有一個自定義的 .NET 控制台應用程序,它只將 zip 文件作為參數並立即開始將 zip 文件提取到 zip 文件所在的同一目錄中。在提取過程中,應用程序會計算多少兆字節應用程序每秒寫入目標文件並輸出它。
在我的本地開發機器上,我使用這個應用程序獲得了相當不錯的性能,寫入速度為 160-210 MB/s。所以整個提取過程大約需要8分鐘。我本地機器的規格是 Intel Core i7 950、3 GHz、4 核(8 個邏輯)、12 GB RAM、Samsung SSD 830 series 250 GB。
好的,所以我開始測試不同的實例大小,這是我的結果。
- 在具有 Windows Server 2012 Datacenter R2(8 核,14 GB RAM)的 A4 實例上,具有 4 個虛擬磁碟的條帶 RAID,使用相同的儲存帳戶,沒有主機記憶體,我得到穩定的 30-35 MB/s,這意味著整個提取耗時 24 分 48 秒。我也嘗試啟用主機記憶體,但它並沒有真正起到任何作用。
- 在帶有 Windows Server 2012 Datacenter(8 核,28 GB RAM,500 GB 本地 SSD 磁碟)的 D4 實例上,我在最初幾分鐘內獲得了非常好的性能(150+ MB/s),然後在 200 MB/峰值處出現了不同的性能s 和 9 MB/s 的谷值。平均性能在 70 到 100 MB/s 之間。萃取耗時 9 分 40 秒。
- 在帶有 Windows Server 2012 Datacenter(4 核,14 GB RAM,250 GB 本地 SSD 磁碟)的 D3 實例上,我在第一分鐘獲得了非常好的性能(150+ MB/s),但隨後性能下降到穩定的 20-40 MB /s,使得提取過程需要 21 分 49 秒。
在 D2 和 D1 實例上,磁碟性能比 D3 上的差。
這真的讓我很驚訝。本地 SSD 磁碟怎麼會像在 D1、D2 和 D3 實例上那樣表現如此糟糕?有誰知道為什麼 D1 到 D4 之間的磁碟性能差異如此之大?是記憶體問題嗎?當我在提取作業系統進行時查看任務管理器時,記憶體使用量正在爆炸式增長。我懷疑這是因為 Windows 正在記憶體寫入的數據,但是當它用完記憶體時,它必須將數據刷新到磁碟。發生這種情況時,磁碟性能會下降。但這不會發生在我的本地機器上,那麼為什麼這些虛擬機需要如此激進的記憶體呢?
我知道我的本地電腦和託管在 Azure 中的虛擬機之間存在差異,但我所體驗到的磁碟性能真的可以預期嗎?
(我最初在 Stackoverflow 上發布了我的問題,因為我懷疑這是我的應用程序造成的。但我不再那麼確定了)
在這裡聚會有點晚了,但值得一提的是,Azure 中“附加”的 SSD 會根據機器大小限制其 IOP。任何地方的定價中都沒有提到它,但是當他們將我推薦給下面的部落格文章時,我將這個問題作為技術支持的票提出來。
請參閱此連結: http ://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/
可能與記憶體無關。Azure 上的“物理”磁碟使用所謂的 Blob 儲存,這就是性能與本地電腦不同的原因,即使使用類似的硬體也是如此。您可以在此連結上找到更多資訊。對於嚴重依賴磁碟性能的 SQL Server 社區來說,這似乎是一個常見問題。我將引用一篇我發現的關於它的文章
Azure VM 中 SQL Server 的性能指南白皮書提到(第 15 和 26 頁)在 Azure VM 中,儲存空間可用於提高 SQL Server 工作負載的儲存性能
儲存空間是 Windows Server 2012 的內置功能,它允許您使用多個物理磁碟來創建一個虛擬磁碟,因此可以解決 VM 磁碟本身的 I/O 限制。再次引用:
對於支持許多(最多 16 個)物理磁碟的大型 VM,可以顯著提高儲存性能。這可以使 Azure 成為許多 SQL 工作負載的可行平台,否則這些工作負載會受到單個 Azure 磁碟的 I/O 性能的限制。
本文將向您展示創建儲存空間的步驟。
你應該先試試這個。可能您甚至可以使用較小的實例,因為儲存服務是與實例本身分開的服務。