Azure Synapse Analytics SQLプールのリソースクラス
Azure Synapse Analytics SQLプールではリソースクラスと言うものが存在しており、クエリの性能に大きく影響を与えます。
リソースクラスとはクエリのメモリ使用量、同時実行スロット数(コンカレンシースロット)を制御する機能になっており、静的リソースクラスと動的リソースクラスがあります。
静的リソースクラス
・cDWUの値(DW200cやDW1000cなど)にかかわらず、同じメモリ容量を割り当て
・同時実行が多く、データ量があまり変わらない(静的)である場合に有効
静的リソースクラス:
staticrc10 | staticrc20 | staticrc30 |
staticrc40 | staticrc50 | staticrc60 |
staticrc70 | staticrc80
動的リソースクラス
・cDWUの値(DW200cやDW1000cなど)に応じてメモリ容量を割り当て
・cDWUの値が変わっても、同時実行数は変わらない
・データ量が増大で変化する場合に有効
デフォルトはsmallrc
動的リソースクラス:
smallrc | mediumrc | largerc | xlargerc
サービス レベル | メモリ量(GB) | smallrc | mediumrc | largerc | xlargerc |
---|---|---|---|---|---|
DW100c | 60GB | 25%(15GB) | 25%(15GB) | 25%(15GB) | 70%(42GB) |
DW200c | 120GB | 12.5%(15GB) | 12.5%(15GB) | 22%(26.4GB) | 70%(84GB) |
DW300c | 180GB | 8%(14.4GB) | 10%(18GB) | 22%(39.6GB) | 70%(126GB) |
DW400c | 240GB | 6.25%(15GB) | 10%(24GB) | 22%(52.8GB) | 70%(168GB) |
DW500c | 300GB | 5%(15GB) | 10%(30GB) | 22%(66GB) | 70%(210GB) |
DW1000c | 600GB | 3%(18GB) | 10%(60GB) | 22%(132GB) | 70%(420GB) |
DW1000c からDW30000c | cDWU/100×60 | 3% | 10% | 22% | 70% |
リソースクラスで管理される操作
リソースクラスで管理される操作は以下の通りです。
• INSERT-SELECT、UPDATE、DELETE
• SELECT (ユーザー テーブルのクエリを実行する場合)
• ALTER INDEX - REBUILD または REORGANIZE
• ALTER TABLE REBUILD
• CREATE INDEX
• CREATE CLUSTERED COLUMNSTORE INDEX
• CREATE TABLE AS SELECT (CTAS)
• データの読み込み
• Data Movement Service (DMS) によって実行されるデータ移動操作
より大きなリソースクラスを使用してクエリの実行を行うとそれだけ、多くのリソースが使われて高速に処理を行う事が出来ます。
一方でより多くのリソースを使うため、同時に実行できるクエリ数は減ります。(後述)
同時クエリとコンカレンシースロット
Azure Synapse AnalyticsではcDWUの値に応じて、同時に実行できる同時クエリの数が決まっています。
また、メモリやCPUなどのリソースはコンカレンシースロットと言う単位で割り当てられます。
前述したリソースクラスは、各リソースクラスがどれだけのコンカレンシースロットを使用するのかが決まっているという事になります。
同時クエリ
・同時に実行されるクエリの数
・各クエリの実行は、直列クエリ(単一スレッド)または並列クエリ(マルチスレッド)かどうかにかかわらず、1つのクエリとしてカウントされる
コンカレンシースロット
・クエリ毎にコンピューティングリソースがコンカレンシースロットと言う単位で割り当てられる
・cDWU毎に最大コンカレンシースロット数は変化
・リソースクラス毎に必要なコンカレンシースロットが変化(後述)
cDWU | 同時クエリの最大数 | 割り当てられるコンカレンシースロット数 |
---|---|---|
DW100c | 4 | 4 |
DW200c | 8 | 8 |
DW300c | 12 | 12 |
DW400c | 16 | 16 |
DW500c | 20 | 20 |
DW1000c | 32 | 40 |
DW1500c | 32 | 60 |
DW2000c | 48 | 80 |
DW2500c | 48 | 100 |
DW3000c | 64 | 120 |
DW5000c | 64 | 200 |
DW6000c | 128 | 240 |
DW7500c | 128 | 300 |
DW10000c | 128 | 400 |
DW15000c | 128 | 600 |
DW30000c | 128 | 1200 |
リソースクラス毎の消費するコンカレンシースロット数
クエリ実行の際に、リソースクラス毎にコンカレンシースロットの消費数が変化します。
静的リソースクラスと消費するコンカレンシースロット数
cDWU | 同時クエリの最大数 | 割り当てられるコンカレンシー スロット数 | staticrc10 | staticrc20 | staticrc30 | staticrc40 | staticrc50 | staticrc60 | staticrc70 | staticrc80 |
---|---|---|---|---|---|---|---|---|---|---|
DW100c | 4 | 4 | 1 | 2 | 4 | 4 | 4 | 4 | 4 | 4 |
DW200c | 8 | 8 | 1 | 2 | 4 | 8 | 8 | 8 | 8 | 8 |
DW300c | 12 | 12 | 1 | 2 | 4 | 8 | 8 | 8 | 8 | 8 |
DW400c | 16 | 16 | 1 | 2 | 4 | 8 | 16 | 16 | 16 | 16 |
DW500c | 20 | 20 | 1 | 2 | 4 | 8 | 16 | 16 | 16 | 16 |
DW1000c | 32 | 40 | 1 | 2 | 4 | 8 | 16 | 32 | 32 | 32 |
DW1500c | 32 | 60 | 1 | 2 | 4 | 8 | 16 | 32 | 32 | 32 |
DW2000c | 48 | 80 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 64 |
DW2500c | 48 | 100 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 64 |
DW3000c | 64 | 120 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 64 |
DW5000c | 64 | 200 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
DW6000c | 128 | 240 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
DW7500c | 128 | 300 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
DW10000c | 128 | 400 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
DW15000c | 128 | 600 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
DW30000c | 128 | 1200 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
動的リソースクラスと消費するコンカレンシースロット数
cDWU | 同時クエリの最大数 | 割り当てられるコンカレンシー スロット数 | smallrc | mediumrc | largerc | xlargerc |
---|---|---|---|---|---|---|
DW100c | 4 | 4 | 1 | 1 | 1 | 2 |
DW200c | 8 | 8 | 1 | 1 | 1 | 5 |
DW300c | 12 | 12 | 1 | 1 | 2 | 8 |
DW400c | 16 | 16 | 1 | 1 | 3 | 11 |
DW500c | 20 | 20 | 1 | 2 | 4 | 14 |
DW1000c | 32 | 40 | 1 | 4 | 8 | 28 |
DW1500c | 32 | 60 | 1 | 6 | 13 | 42 |
DW2000c | 32 | 80 | 2 | 8 | 17 | 56 |
DW2500c | 32 | 100 | 3 | 10 | 22 | 70 |
DW3000c | 32 | 120 | 3 | 12 | 26 | 84 |
DW5000c | 32 | 200 | 6 | 20 | 44 | 140 |
DW6000c | 32 | 240 | 7 | 24 | 52 | 168 |
DW7500c | 32 | 300 | 9 | 30 | 66 | 210 |
DW10000c | 32 | 400 | 12 | 40 | 88 | 280 |
DW15000c | 32 | 600 | 18 | 60 | 132 | 420 |
DW30000c | 32 | 1200 | 36 | 120 | 264 | 840 |
同時実行クエリとコンカレンシースロット数の考え方
DW1000cの時を想定して検討します。
DW1000cでは同時クエリの最大数は32、割り当てられるコンカレンシースロット数は40です。
この時すべてのクエリをデフォルトのsmallrc(消費スロット1)のみで実行した場合以下の通り、
コンカレンシースロットよりも先に、同時実行クエリ数に到達するので、32のクエリの同時実行が可能です。
※32以上のクエリは実行中のクエリが終了し、同時実行クエリに空きが出るまで待機します。
一方上記は全て、smallrcでクエリが実行されている事を想定していますが、一般的なシステムでは、様々なはリソースクラスが混在する事が一般的です。
上記と同様にDW1000c(同時クエリの最大数は32、割り当てられるコンカレンシースロット数は40)を想定します。
大量データのロード処理をxleargrc(消費スロット28)で1多重
サマリーテーブルの作成をmdeiumrc(消費スロット4)で2多重
BIでの検索をstaticrc20(消費スロット2)で2多重
で走行した場合、同時クエリの最大数よりも先に、コンカレンシースロットの数を使い果たす為、以降クエリが投げられた場合、コンカレンシースロットに空きが出るまで待機します。
また、上記の場合の待機中のクエリですが、例えば、mediumrc(消費スロット4)とstaticrc20(消費スロット2)のクエリが待機している場合、mediumrc(消費スロット4)のクエリはコンカレンシースロットに空きが4つ出来るまで待機します。仮にコンカレンシースロットに空きが2つできた場合には、mediumrcのクエリより先に、staticrc20のクエリが実行されます。
設定方法
xlargercuserと言うユーザを作成し、xlargercのリソースクラスを割り当てる例を記載します。
①masterデータベースでxlargercのユーザを作成
masterデータベースにログインして以下のSQLを実行
--DBユーザー(xlargercuser)を作成
CREATE LOGIN xlargercuser WITH PASSWORD = '<パスワード>';
--masterデータベースにDBユーザー(xlargercuser)を追加
CREATE USER xlargercuser for LOGIN xlargercuser;
②対象のAzure Synapse Analyticsにてユーザを追加し、xlargercのロールを付与
対象のAzure Synapse Analyticsにログインして以下のSQLを実行
--ユーザデータベースにDBユーザー(xlargercuser)を追加
CREATE USER xlargercuser for LOGIN xlargercuser;
--DBユーザー(xlargercuser)にCONTROL権限を付与
GRANT CONTROL ON DATABASE::"<ユーザーデータベース名>" to xlargercuser;
--DBユーザー(xlargercuser)にxlargercロールを付与
EXEC sp_addrolemember 'xlargerc', 'xlargercuser';
作成後、クエリを実行するとAzure Portalのクエリアクティビティなどから、以下の通りxlargercのリソースクラスで実行されている事を確認出来ます。