2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Synapse Analytics SQLプールを高速にするリソースクラス

Last updated at Posted at 2022-01-11

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以上のクエリは実行中のクエリが終了し、同時実行クエリに空きが出るまで待機します。
image.png

一方上記は全て、smallrcでクエリが実行されている事を想定していますが、一般的なシステムでは、様々なはリソースクラスが混在する事が一般的です。
上記と同様にDW1000c(同時クエリの最大数は32、割り当てられるコンカレンシースロット数は40)を想定します。
大量データのロード処理をxleargrc(消費スロット28)で1多重
サマリーテーブルの作成をmdeiumrc(消費スロット4)で2多重
BIでの検索をstaticrc20(消費スロット2)で2多重
で走行した場合、同時クエリの最大数よりも先に、コンカレンシースロットの数を使い果たす為、以降クエリが投げられた場合、コンカレンシースロットに空きが出るまで待機します。
image.png

また、上記の場合の待機中のクエリですが、例えば、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のリソースクラスで実行されている事を確認出来ます。
image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?