PR

検証1 Azure内でのコピー
10GBのファイルを複製 DMUの変更で速度が3割増

 検証1では、Azure内でのデータコピーという単純なETLフローを題材に、パフォーマンスチューニングを行う。

 Blob StorageからSQL Databaseへコピーするデータとして、Microsoftが公開しているテストデータセット「TPC-H」を使用する。

https://docs.microsoft.com/ja-jp/azure/data-factory/v1/data-factory-load-sql-data-warehouse

 検証に使ったリソースは以下の通りだ。いずれも西日本リージョンを用いた。

  • 入力元(データソース)
     Blob Storage
  • 出力先(ターゲット)
     SQL Database
     PremiumRS 250DTU 250GB
  • データセット
     lineitem.tbl(10GB)

 SQL DatabaseでPremiumRSを採用したのは、SQL Databaseが性能のボトルネックにならないようにするためだ。SQL Databaseがボトルネックになったかどうかは、最大DTUで判断できる。最大DTUが100%に達していなければ、ボトルネックになっていないと考えられる。

 10GBのデータセットを使用してBlob StorageからSQL Databaseへのデータコピーを行い、DMUとparallelCopiesによるパフォーマンスチューニングを行った。その結果を表1に示す。

表1 パフォーマンスチューニングの結果
10GBのデータセット、SQL Database PremiumRSを用いた
表1 パフォーマンスチューニングの結果
[画像のクリックで拡大表示]

 まずDMUというパラメーターの変更は効果があった。DMUを自動設定にしたときは所要時間が26分48秒だったが、DMUを4にすると18分36秒に短縮された。約3割の速度向上である。

 ただしDMUを8に増やしても効果が無かった。4DMUで頭打ちになったのは、Azureのネットワークがボトルネックになったのかもしれない。別途、Blobのスループットを測定したところ、60MB/秒のキャパシティーに対して9MB/秒程度しか出ていなかったからだ。

 parallelCopiesでは4、8に手動設定したが、自動設定値よりかえって遅くなった。

 検証1では10GBという大きなサイズのファイルコピーだったが、Webサーバーログのような膨大な数のファイルを対象とする場合はconcurrency(並列数)というパラメーターの調整も有効になるだろう。DMU、parallelCopiesと合わせて、三つのパラメーターによって効果的にチューニングしてほしい。

 なお、冒頭に紹介した通りData Factoryではコピー時間に課金されるため、シーケンシャルにコピーしてもパラレルにコピーしても、全体のデータ量が変わらなければコピー時間の合計も同じになることから、課金額が変わらない。

 この点は、Data Factoryを使うことのメリットといえる。