Synapse SQLプールのスペックと3層構造の検証


Synapse SQLプールのスペックとノード、ディストリビューションについての検証したのでまとめました。

3層構造のアーキテクチャ

Synapse SQLプールは3層構造のアーキテクチャとなっています。

  • 制御ノード(コントロールノード)
    接続やMPPエンジンにおける並列クエリの最適化の調整をするノード。(1台で構成されます。)

  • 計算ノード(コンピュートノード)
    実際に処理が実行されるノード。1つのSynapse SQLプールに1台以上で構成されます。
    また、1つのコンピュートノードに1つ以上のディストリビューションが紐づきます。

  • ストレージ(ディストリビューション)
    実際のデータが格納されており60台で構成されます。各ディストリビューションは1つのコンピュートノードに紐づきます。
    それぞれのディストリビューションが複数のコンピュートノードで共有されることはありません。

また、Synapse SQLプールはスペックを「cDWU」という単位で指定し、DW100c~DW30000cまでの間で指定可能です。
今回はこの「cDWU」と上記の3層構造の関係を検証しました。

cDWUを大きくしても、コントロールノードは1台、ディストリビューションは60個

前提の知識といたしまして、Synapse SQLプールではcDWUをどれだけ大きくしても、コントロールノードは1台で構成され、ディストリビューションは60個で構成されます。
cDWUに合わせて変化が起きるのは、コンピュートノードのスペックや台数となります。

検証

cDWUの変更

cDWUの変更はAzureポータル、Powershellなどから行えますが、今回はT-SQLにて以下のコマンドで実行しました。
それぞれのcDWUとコンピュートノードの関係を確認していきます。
※すべてmasterデータベースで実行してください。

ALTER DATABASE "<SQLプール名>"
MODIFY (SERVICE_OBJECTIVE = 'DW<指定のcDWU>c');

変更状態の確認は以下のコマンドで確認可能です。

SELECT
    *
FROM      sys.dm_operation_status
WHERE     resource_type_desc = 'Database'
AND       major_resource_id = '<SQLプール名>';

現在のcDWUの確認は以下で行います。

SELECT
     db.name [Database]
    ,ds.edition [Edition]
    ,ds.service_objective [Service Objective]
FROM
    sys.database_service_objectives   AS ds
JOIN
    sys.databases                     AS db ON ds.database_id = db.database_id
WHERE
    ds.edition='DataWarehouse';

DW100c~DW500cはコンピュートノードは1台

コンピュートノードの確認は以下のコマンドで確認できます。(SQLプールで実行してください。)

select
    *
from sys.dm_pdw_nodes node
left join sys.dm_pdw_nodes_os_sys_info sysinfo
    on node.pdw_node_id=sysinfo.pdw_node_id;

DW100cで上記のコマンドで確認を行うと結果は以下の通りとなります。

DW100cの場合はコントロールノード1台、コンピュートノード1台で構成されている事がわかります。

また、以下のコマンドで各コンピュートノードにいくつのディストリビューションが紐づいているか確認できます。

select
    pdw_node_id,
    count(*) cnt
from sys.pdw_distributions
group by pdw_node_id;

結果は以下の通り、1つのコンピュートノードに60すべてのディストリビューションが紐づきます。

DW100c~DW500cまで同様に確認を行っていきましたが、この構成は変わりませんでした。
一方でdm_pdw_nodes_os_sys_infoテーブルのcommitted_target_kbmax_workers_countが以下のように変化したため、コンピュートノード1台であっても処理能力が向上している事が推察されます。

cDWU committed_target_kb max_workers_count
DW100c 58646024 1843
DW200c 127515528 3686
DW300c 195830648 5529
DW400c 262173528 7372
DW500c 341075896 9216

DW1000c以降はDW500c毎に1台ずつコンピュートノードが追加される

DW100cからDW500cまではコントロールノード1台、コンピュートノード1台、ディストリビューション60の構成でコンピュートノードのスペックが変わっていました。
一方、DW1000c以降はDW500c毎に1台ずつコンピュートノードが追加されるようです。

以下DW1000cの時のノードの状態です。(コンピュートが2台確認できます。)

以下DW1500cの時のノードの状態です。(コンピュートが3台確認できます。)

また、60のディストリビューションは以下の通り、DW1000cであれば2つのコンピュートノードそれぞれに30ずつ、DW1500cであれば3つのコンピュートそれぞれに20ずつ割り当てられました。

cDWU compute node数 ディストリビューション/compute node
DW1000c 2 30
DW1500c 3 20

この為、おそらく最大のDW30000cの場合には、60台のコンピュートノードそれぞれに1つのディストリビューションが紐づく事になるかと思います。

まとめ

DW100c~DW500cまでは1つのコンピュートノードのスペックにより処理性能が変わる。
DW1000c以降はDW500cにつき、コンピュートノードが1台追加され、台数に応じて処理性能がかわる。
60のディストリビューションは、割り当てられているコンピュートノードに均等に割り当てられる。(コンピュートが2台の場合は30ずつ、コンピュートが3台の場合は20ずつ)