Azure Synapse SQL アーキテクチャAzure Synapse SQL architecture

この記事では、Synapse SQL アーキテクチャのコンポーネントについて説明します。This article describes the architecture components of Synapse SQL.

Synapse SQL アーキテクチャのコンポーネントSynapse SQL architecture components

Synapse SQL では、スケールアウト アーキテクチャを活用して、複数のノードにデータの計算処理を分散します。Synapse SQL leverages a scale out architecture to distribute computational processing of data across multiple nodes. コンピューティングをストレージから切り離すことで、システム内のデータとは無関係に、コンピューティングをスケーリングできるようになります。Compute is separate from storage, which enables you to scale compute independently of the data in your system.

専用 SQL プールの場合、スケール単位は、Data Warehouse ユニットと呼ばれるコンピューティング能力の抽象化です。For dedicated SQL pool, the unit of scale is an abstraction of compute power that is known as a data warehouse unit.

サーバーレスの SQL プールでは、クエリ リソース要件に合わせて自動的にスケーリングされます。For serverless SQL pool, being serverless, scaling is done automatically to accommodate query resource requirements. トポロジは、ノードやフェールオーバーの追加または削除によって時間の経過とともに変化するため、変化に対応して、十分なリソースを確保した上でクエリが正常に完了できるようにします。As topology changes over time by adding, removing nodes or failovers, it adapts to changes and makes sure your query has enough resources and finishes successfully. たとえば、次の図は、4 つのコンピューティング ノードを使用してクエリを実行するサーバーレス SQL プールを示しています。For example, the image below shows serverless SQL pool utilizing 4 compute nodes to execute a query.

Synapse SQL アーキテクチャ

Synapse SQL は、ノードベースのアーキテクチャを使用します。Synapse SQL uses a node-based architecture. アプリケーションでは T-SQL コマンドに接続し、これを Synapse SQL の単一のエントリ ポイントである制御ノードに発行します。Applications connect and issue T-SQL commands to a Control node, which is the single point of entry for Synapse SQL.

Azure Synapse SQL の制御ノードでは、分散クエリ エンジンを利用して並列処理のためにクエリが最適化された後、作業を並列で実行するために操作がコンピューティング ノードに渡されます。The Azure Synapse SQL Control node utilizes a distributed query engine to optimize queries for parallel processing, and then passes operations to Compute nodes to do their work in parallel.

サーバーレス SQL プールの制御ノードは、分散クエリ処理 (DQP) エンジンを利用して、コンピューティング ノードで実行される小さなクエリにユーザー クエリを分割することにより、ユーザー クエリの分散実行の最適化と調整を行います。The serverless SQL pool Control node utilizes Distributed Query Processing (DQP) engine to optimize and orchestrate distributed execution of user query by splitting it into smaller queries that will be executed on Compute nodes. この各小さなクエリはタスクと呼ばれ、分散実行の単位を表します。Each small query is called task and represents distributed execution unit. タスクでは、ストレージからファイルを読み取り、他のタスクの結果、または他のタスクから取得したグループや注文データを結合します。It reads file(s) from storage, joins results from other tasks, groups or orders data retrieved from other tasks.

コンピューティング ノードはすべてのユーザー データを Azure Storage に保存し、並行クエリを実行します。The Compute nodes store all user data in Azure Storage and run the parallel queries. Data Movement Service (DMS) はシステム レベルの内部サービスで、必要に応じて複数のノードにデータを移動し、クエリを並列に実行して、正確な結果を返します。The Data Movement Service (DMS) is a system-level internal service that moves data across the nodes as necessary to run queries in parallel and return accurate results.

Synapse SQL を使用すると、ストレージとコンピューティングを分離することにより、ストレージのニーズに関係なく、コンピューティング能力を独立してサイジングできるという利点があります。With decoupled storage and compute, when using Synapse SQL one can benefit from independent sizing of compute power irrespective of your storage needs. サーバーレス SQL プールのスケーリングは自動的に行われますが、専用 SQL プールでは次のことが可能です。For serverless SQL pool scaling is done automatically, while for dedicated SQL pool one can:

  • データを移動することなく、専用 SQL プール内でコンピューティング能力を拡大または縮小する。Grow or shrink compute power, within a dedicated SQL pool, without moving data.
  • データをそのままの状態で保持しながら、コンピューティング能力を一時停止するため、支払いをストレージの分だけにする。Pause compute capacity while leaving data intact, so you only pay for storage.
  • 稼働時間中にコンピューティング能力を再開する。Resume compute capacity during operational hours.

Azure StorageAzure Storage

Synapse SQL では、ユーザー データを安全に保つために Azure Storage を使用します。Synapse SQL leverages Azure Storage to keep your user data safe. データは Azure Storage によって保存、管理されるため、ストレージの使用量が別途課金されます。Since your data is stored and managed by Azure Storage, there is a separate charge for your storage consumption.

サーバーレス SQL プールを使用すると、データ レイク内のファイルに対して読み取り専用でクエリを実行できますが、SQL プールを使用すると、データを取り込むこともできます。Serverless SQL pool lets you query files in your data lake in read-only manner, while SQL pool lets you ingest data also. データを専用 SQL プールに取り込むと、システムのパフォーマンスを最適化するために、データは ディストリビューション にシャード化されます。When data is ingested into dedicated SQL pool, the data is sharded into distributions to optimize the performance of the system. どのシャーディング パターンを使用して、テーブルを定義するときにデータを分散するかを選択できます。You can choose which sharding pattern to use to distribute the data when you define the table. 次の 2 つのシャーディング パターンがサポートされています。These sharding patterns are supported:

  • ハッシュ インデックスHash
  • ラウンド ロビンRound Robin
  • レプリケートReplicate

制御ノードControl node

制御ノードは、アーキテクチャの脳です。The Control node is the brain of the architecture. すべてのアプリケーションおよび接続と対話するフロントエンドです。It is the front end that interacts with all applications and connections.

Synapse SQL では、制御ノードで分散クエリ エンジンが実行され、並列クエリの最適化と調整が行われます。In Synapse SQL, the distributed query engine runs on the Control node to optimize and coordinate parallel queries. 専用 SQL プールに T-SQL クエリを送信すると、それが制御ノードによって、各ディストリビューションに対して並列で実行されるクエリに変換されます。When you submit a T-SQL query to dedicated SQL pool, the Control node transforms it into queries that run against each distribution in parallel.

サーバーレス SQL プールでは、DQP エンジンが制御ノードで実行され、コンピューティング ノードで実行される小さなクエリにユーザー クエリを分割することにより、ユーザー クエリの分散実行の最適化と調整を行います。In serverless SQL pool, the DQP engine runs on Control node to optimize and coordinate distributed execution of user query by splitting it into smaller queries that will be executed on Compute nodes. また、ノードごとに処理される一連のファイルも割り当てられます。It also assigns sets of files to be processed by each node.

コンピューティング ノードCompute nodes

コンピューティング ノードは計算能力を提供します。The Compute nodes provide the computational power.

専用 SQL プールでは、処理のためにディストリビューションがコンピューティング ノードにマップされます。In dedicated SQL pool, distributions map to Compute nodes for processing. プールでは、追加のコンピューティング リソースの料金を支払うと、ディストリビューションが、使用可能なコンピューティング ノードに再マッピングされます。As you pay for more compute resources, pool remaps the distributions to the available Compute nodes. コンピューティング ノード数の範囲は 1 から 60 で、専用 SQL プールのサービス レベルによって決定されます。The number of compute nodes ranges from 1 to 60, and is determined by the service level for the dedicated SQL pool. 各コンピューティング ノードにはノード ID があり、システム ビューで確認できます。Each Compute node has a node ID that is visible in system views. 名前が sys.pdw_nodes で始まるシステム ビューで node_id 列を検索することにより、コンピューティング ノード ID を見ることができます。You can see the Compute node ID by looking for the node_id column in system views whose names begin with sys.pdw_nodes. これらのシステム ビューの一覧については、Synapse SQL のシステム ビューに関する記事をご覧ください。For a list of these system views, see Synapse SQL system views.

サーバーレス SQL プールでは、各コンピューティング ノードに、タスクとタスクを実行する一連のファイルが割り当てられます。In serverless SQL pool, each Compute node is assigned task and set of files to execute task on. タスクは分散クエリ実行の単位であり、実際には、ユーザーが送信したクエリの一部です。Task is distributed query execution unit, which is actually part of query user submitted. 自動スケーリングは、ユーザー クエリの実行に十分なコンピューティング ノードを利用できるようにするために有効です。Automatic scaling is in effect to make sure enough Compute nodes are utilized to execute user query.

データ移動サービスData Movement Service

Data Movement Service (DMS) は、専用 SQL プールのデータ転送テクノロジであり、コンピューティング ノード間のデータ移動を調整します。Data Movement Service (DMS) is the data transport technology in dedicated SQL pool that coordinates data movement between the Compute nodes. 一部のクエリでは、並列クエリで正確な結果が返されるためにデータ移動が必要です。Some queries require data movement to ensure the parallel queries return accurate results. データ移動が必要な場合は、DMS により、適切なデータが適切な場所に移動する必要があります。When data movement is required, DMS ensures the right data gets to the right location.

ディストリビューションDistributions

ディストリビューションは、専用 SQL プールで分散データに対して実行される並列クエリの保存および処理の基本単位です。A distribution is the basic unit of storage and processing for parallel queries that run on distributed data in dedicated SQL pool. 専用 SQL プールでクエリの実行する場合、作業は並列で実行される 60 の小さなクエリに分割されます。When dedicated SQL pool runs a query, the work is divided into 60 smaller queries that run in parallel.

60 の小さいクエリそれぞれは、いずれかのデータ ディストリビューションで実行されます。Each of the 60 smaller queries runs on one of the data distributions. 各コンピューティング ノードでは、60 ディストリビューションの 1 つまたは複数が管理されます。Each Compute node manages one or more of the 60 distributions. 最大コンピューティング リソース数を持つ 1 つの専用 SQL プールでは、1 コンピューティング ノードあたりのディストリビューション数は 1 です。A dedicated SQL pool with maximum compute resources has one distribution per Compute node. 最小コンピューティング リソース数を持つ 1 つの専用 SQL プールでは、1 つのコンピューティング ノードにすべてのディストリビューションがあります。A dedicated SQL pool with minimum compute resources has all the distributions on one compute node.

ハッシュ分散テーブルHash-distributed tables

ハッシュ分散テーブルでは、大きなテーブルでの結合と集計用に最高のクエリ パフォーマンスを実現できます。A hash distributed table can deliver the highest query performance for joins and aggregations on large tables.

ハッシュ分散テーブルにデータをシャード化するために、専用 SQL プールではハッシュ関数を使用して、各行が 1 つのディストリビューションに確実に割り当てられます。To shard data into a hash-distributed table, dedicated SQL pool uses a hash function to deterministically assign each row to one distribution. テーブルの定義では、1 つの列をディストリビューション列として指定します。In the table definition, one of the columns is designated as the distribution column. ハッシュ関数は、ディストリビューション列の値を使用してディストリビューションに各行を割り当てます。The hash function uses the values in the distribution column to assign each row to a distribution.

次の図は、完全な (分散していない) テーブルがハッシュ分散テーブルとして保存されるしくみを示したものです。The following diagram illustrates how a full (non-distributed table) gets stored as a hash-distributed table.

分散テーブルDistributed table

  • 各行は、1 つのディストリビューションに属しています。Each row belongs to one distribution.
  • 確定ハッシュ アルゴリズムが、各行を 1 つのディストリビューションに割り当てます。A deterministic hash algorithm assigns each row to one distribution.
  • ディストリビューションごとのテーブル行の数は、異なるテーブル サイズによって示されるように異なります。The number of table rows per distribution varies as shown by the different sizes of tables.

ディストリビューション列の選択については、差異性、データ スキュー、およびシステムで実行されるクエリの種類など、パフォーマンスに関する考慮事項があります。There are performance considerations for the selection of a distribution column, such as distinctness, data skew, and the types of queries that run on the system.

ラウンドロビン分散テーブルRound-robin distributed tables

ラウンド ロビン テーブルは作成が最も簡単なテーブルで、読み込み用のステージング テーブルとして使用した場合、高速なパフォーマンスを実現します。A round-robin table is the simplest table to create and delivers fast performance when used as a staging table for loads.

ラウンドロビン分散テーブルでは、テーブル間にデータが均等に配布されますが、最適化は行われません。A round-robin distributed table distributes data evenly across the table but without any further optimization. 1 つのディストリビューションがまずランダムに選択されたら、行のバッファーが順次ディストリビューションに割り当てられます。A distribution is first chosen at random and then buffers of rows are assigned to distributions sequentially. ラウンド ロビン テーブルではデータは素早く読み込まれますが、通常、ハッシュ分散テーブルの方が高いクエリ パフォーマンスが見込まれます。It is quick to load data into a round-robin table, but query performance can often be better with hash distributed tables. ラウンド ロビン テーブルの結合では、データの再シャッフルが必要になり、追加の時間がかかります。Joins on round-robin tables require reshuffling data, which takes additional time.

レプリケート テーブルReplicated tables

レプリケート テーブルは、小さなテーブル用に最も高速なクエリ パフォーマンスを実現します。A replicated table provides the fastest query performance for small tables.

レプリケートされたテーブルは、各コンピューティング ノードにテーブルの完全なコピーをキャッシュします。A table that is replicated caches a full copy of the table on each compute node. その結果、テーブルをレプリケートすると、結合または集計の前に、コンピューティング ノード間にデータを転送する必要がなくなります。Consequently, replicating a table removes the need to transfer data among compute nodes before a join or aggregation. レプリケート テーブルは小さいテーブルに最適です。Replicated tables are best utilized with small tables. 大きいテーブルの使用が非現実的なデータを書き込む際には、追加ストレージが必要になり、追加のオーバーヘッドが発生します。Extra storage is required and there is additional overhead that is incurred when writing data, which make large tables impractical.

次の図は、各コンピューティング ノードの最初のディストリビューションにキャッシュされたレプリケート テーブルを示しています。The diagram below shows a replicated table that is cached on the first distribution on each compute node.

レプリケート テーブルReplicated table

次のステップNext steps

Synapse SQL について多少理解できたので、すばやく専用 SQL プールを作成する方法とサンプル データ (./sql-data-warehouse-load-sample-databases.md) を読み込む方法について学習します。Now that you know a bit about Synapse SQL, learn how to quickly create a dedicated SQL pool and load sample data (./sql-data-warehouse-load-sample-databases.md). または、サーバーレス SQL プールを使い始めますOr you start using serverless SQL pool. Azure に慣れていない場合に新しい用語を調べるには、 Azure 用語集 が役立ちます。If you are new to Azure, you may find the Azure glossary helpful as you encounter new terminology.