Azure虚拟机上的磁盘性能变慢

好吧,首先,让我说我不是一个操作人员,而是一个开发人员。 所以我在这里进入一个未知的土地,所以请忍受我。

我想使用Azure虚拟机从1.9 GB的zip文件中提取50 GB的XML文件。 所以我一直在testingAzure上的哪个实例大小,以便获得更好的性能,同时不会超出我的需要。

然而,Azure虚拟机的磁盘性能并不是很好,我想知道是我做错了什么,或者如果我的结果是可以预料的。

首先,我一直在testing什么? 我有一个自定义的.NET控制台应用程序,它只是将一个zip文件作为参数,然后立即开始将zip文件解压缩到zip文件所在的相同目录中。解压缩过程中,应用程序计算有多less兆字节应用程序每秒都写入目标文件并输出。

在我的本地开发机器上,我用这个应用程序获得了非常好的性能,编写160-210 MB / s。 所以整个提取过程大约需要8分钟。 我的本地机器的规格是英特尔酷睿i7 950,3 GHz,4核心(8逻辑),12 GB内存,三星SSD 830系列250 GB。

好的,所以我开始testing不同的实例大小,这是我的结果。

  • 在带有Windows Server 2012 Datacenter R2(8核,14 GB RAM)的A4实例上,使用同一个存储帐户的4个虚拟磁盘的条带化RAID,无需主机caching,我可以稳定的30-35 MB / s,这意味着整个提取花了24分48秒。 我也尝试启用主机caching,但它并没有真正有所作为。
  • 在使用Windows Server 2012数据中心(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实例中,第一分钟的性能performance非常好(150 MB / s),但是性能下降到稳定20-40 MB / s,使提取过程花费21分49秒。

在D2和D1实例上,磁盘性能比D3差。

而这真的让我感到惊讶。 本地SSD磁盘如何在D1,D2和D3实例上执行得如此糟糕? 有没有人知道为什么D1到D4的磁盘性能差距如此之大? 这是一个记忆问题? 当我在提取操作系统的时候查看任务pipe理器的时候,内存的使用情况是爆炸性的。 我怀疑这是因为Windows正在caching写入的数据,但是当内存不足时,它必须将数据刷新到磁盘。 发生这种情况时,磁盘性能下降。 但是这不会发生在我的本地机器上,那么为什么这些虚拟机需要这样的攻击性caching呢?

我知道我的本地计算机和托pipe在Azure中的虚拟机之间存在差异,但是我正在经历的磁盘性能真的是预期的吗?

(我最初在Stackoverflow上发布了我的问题 ,因为我怀疑这是我的应用程序,但是我不太清楚)

    在这里参加派对的时间已经晚了,但是对于Azure中值得“附加”的固态硬盘,他们的IOP根据机器大小进行节stream。 这个价格在任何地方都没有提到,但是当我把这个问题提交给下面的博客文章的时候,我提出了这个问题作为技术支持的票。

    看到这个链接: http : //azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/

    也许这跟记忆没有关系 Azure上的“物理”磁盘使用所谓的Blob存储,这就是性能与您的本地计算机(即使使用类似硬件)性能不一样的原因。 您可以在此链接中find更多信息。 这似乎是严重依赖磁盘性能的SQL Server社区的常见问题。 我会引用我发现的一篇文章

    Azure虚拟机中的SQL Server性能指南白皮书中提到(第15和26页),在Azure虚拟机中,可以使用存储空间来提高SQL Server工作负载的存储性能

    存储空间是Windows Server 2012的内置function,可让您使用多个物理磁盘创build单个虚拟磁盘,从而解决VM磁盘本身的I / O限制问题。 再次引用:

    对于支持很多(最多16个)物理磁盘的较大VM,存储性能的显着提高是可能的。 这可以使Azure成为许多SQL工作负载的可行平台,否则将受到单个Azure磁盘的I / O性能限制。

    本文将向您展示创build存储空间的步骤。

    你应该先尝试一下。 可能甚至可以使用较小的实例,因为存储服务是实例本身的单独服务。