web-dev-qa-db-ja.com

Azure Virtual Machineのディスクパフォ​​ーマンスが遅い

さて、まず第一に、私は運用担当者ではなく開発者であると言っておきます。なので、ここではちょっとした未知の土地に入りますので、ご容赦ください。

Azure仮想マシンを使用して、1.9 GBのZipファイルから50 GBのXMLファイルを抽出したいと思います。したがって、私はAzureでどのインスタンスサイズを使用して、必要以上のコストをかけずに優れたパフォーマンスを実現するかをテストしてきました。

ただし、Azure VMのディスクパフォ​​ーマンスは驚くべきものではなく、何か問題を起こしているのが私なのか、それとも期待どおりの結果が得られるのかを知りたいのです。

まず第一に、私は何をテストしてきましたか?カスタムの.NETコンソールアプリケーションがあり、Zipファイルを引数として取り、すぐにZipファイルが存在する同じディレクトリにZipファイルの抽出を開始します。抽出の進行中に、アプリケーションはメガバイト数を計算しますアプリケーションは毎秒ターゲットファイルに書き込み、それを出力します。

私のローカル開発マシンでは、このアプリケーション(160〜210 MB /秒の書き込み)でかなり良いパフォーマンスを得ています。したがって、全体の抽出プロセスには約8分かかります。私のローカルマシンの仕様は、Intel Core i7 950、3 GHz、4コア(8論理)、12 GB RAM、Samsung SSD 830シリーズ250 GBです。

さて、それで私は異なるインスタンスサイズのテストを始めました、そしてこれが私の結果です。

  • Windows Server 2012 Datacenter R2(8コア、14 GB RAM)を使用し、同じストレージアカウントを使用する4つの仮想ディスクのストライプRAIDを備えたA4インスタンスで、ホストキャッシュなしで、安定した30〜35 MB /秒、つまり全体抽出には24分48秒かかりました。ホストキャッシングを有効にしてみましたが、実際には違いはありませんでした。
  • Windows Server 2012 Datacenter(8コア、28 GB RAM、500 GBローカルSSDディスク)を備えたD4インスタンスでは、最初の数分間は非常に優れたパフォーマンス(150+ MB /秒)が得られ、ピーク時は200 MB /でパフォーマンスが変化しました9 MB /秒の谷と谷。平均パフォーマンスは70〜100 MB/sでした。抽出には9分40秒かかりました。
  • Windows Server 2012 Datacenter(4コア、14 GB RAM、250 GBローカルSSDディスク)を使用するD3インスタンスでは、最初の1分で本当に優れたパフォーマンス(150+ MB /秒)が得られましたが、その後、パフォーマンスは安定して20〜40 MBに低下しました/ s、抽出プロセスには21分49秒かかります。

D2およびD1インスタンスでは、ディスクのパフォーマンスはD3の場合よりも劣ります。

そして、これは私を本当に驚かせます。ローカルSSDディスクは、D1、D2、およびD3インスタンスの場合と同様に、どのようにパフォーマンスが悪いのでしょうか。また、ディスクパフォ​​ーマンスがD1とD4で大きく異なる理由を誰かが知っていますか?メモリの問題ですか?抽出が進行しているときにタスクマネージャーを見ると、メモリ使用量が急増しています。 Windowsが書き込まれたデータをキャッシュしているためだと思いますが、メモリが不足すると、データをディスクにフラッシュする必要があります。これが発生すると、ディスクのパフォーマンスが低下します。しかし、これはローカルマシンでは発生しないので、なぜこれらのVMでそのような積極的なキャッシュが必要なのでしょうか。

ローカルマシンとAzureでホストされている仮想マシンに違いがあることはわかっていますが、実際に発生しているディスクパフォ​​ーマンスは期待どおりですか?

(私が最初に投稿したのは Stackoverflowに関する私の質問 でした。原因はアプリケーションであると疑っていたためです。しかし、もう確信が持てません)

8
René

ここのパーティーには少し遅れましたが、Azureに「接続された」SSDの価値があるのは、マシンサイズに基づいてIOPが抑制されているためです。価格のどこにも記載されていませんでしたが、以下のブログ投稿を紹介してくれたときに、テクニカルサポートのチケットとしてこの問題を提起しました。

このリンクを参照してください: http://Azure.Microsoft.com/blog/2014/10/06/d-series-performance-expectations/

6
Richard Hauer

多分それは記憶とは関係ありません。 Azureの「物理」ディスクはBlobストレージと呼ばれるものを使用しているため、同様のハードウェアを使用しても、パフォーマンスがローカルコンピューターと同じではありません。この詳細については link を参照してください。これは、ディスクパフォ​​ーマンスに大きく依存しているSQL Serverコミュニティでは一般的な問題のようです。私が見つけた記事を引用します

Azure VMにおけるSQL Serverのパフォーマンスガイダンスホワイトペーパーでは、Azure VMではストレージスペースを使用してSQL Serverワークロードのストレージパフォーマンスを向上できると述べています(15および26ページ)。

記憶域スペースはWindows Server 2012の組み込み機能であり、複数の物理ディスクを使用して単一の仮想ディスクを作成できるため、VMディスク自体のI/O制限の回避策として。再度引用:

多数(最大16)の物理ディスクをサポートする大規模なVMでは、ストレージパフォーマンスの大幅な向上が可能です。これにより、単一のAzureディスクのI/Oパフォーマンスによる制約が多すぎるSQLワークロードの実行可能なプラットフォームとしてAzureを有効にすることができます。

これ 記事は、ストレージスペースを作成する手順を示します。

最初にこれを試してください。ストレージサービスはインスタンス自体とは別のサービスであるため、おそらくより小さなインスタンスを使用することもできます。

4
Bruno Faria