[SQL DWの落とし穴]大きいリソースの割り当てで遅くなる(知って安心!AWS・Azureのつまずきポイント)



 マイクロソフトのクラウドMicrosoft Azureのデータウエアハウス(DWH)サービス「SQL Data Warehouse」には「リソースクラス」という概念がある。リソースクラスは、ユーザーに対して割り当てるリソース量だ。大きいリソースクラスを割り当てるほど、多くのメモリーを使用したクエリー実行が可能になる。

 リソースクラスには、小さい順に「smallrc」「mediumrc」「largerc」「xlargerc」 の四つがある。初期状態のユーザーはsmallrcだ。

 ここで、ユーザーにデフォルトのsmallrcよりも大きいリソースクラスを割り当てたうえで複数のクエリーを同時実行すると、すべての結果が返ってくるまでに、かえって時間が掛かる場合がある。

 表1のとおり、DWU(SQL Data Warehouseのインスタンスサイズ)ごとに、割り当てられる同時実行スロット数が決まっており、これをリソースクラスごとの使用されるスロット数で割った値を上回らない整数が、同時実行の上限になる。同時実行の上限を超えるクエリーは、キューに配置され、実行待ちの状態となる。

 例えば、xlargercを割り当てたユーザーでクエリーを複数実行すると、全てのDWUにおいて、割り当てられる同時実行スロット数÷xlargercで使用されるスロット数が2未満となるため、一つずつしか実行できない。残りはキューに入る。

表1●同時実行スロットの割り当てと使用数

Microsoftの公式ページの情報を基に編集部で一部改編

[画像のクリックで拡大表示]

 リソースクラスが大きいほど、メモリー割り当てが多くなるので、クエリー1件ずつの処理は速い。しかし同時実行ではなくシーケンシャルに実行されるので、全てのクエリーの結果を得るまでに時間が掛かる場合がある。



Related Post