Azure SQL Data Warehouse でのコンピューティングの管理Manage compute in Azure SQL Data Warehouse

Azure SQL Data Warehouse でコンピューティング リソースを管理する方法について説明します。Learn about managing compute resources in Azure SQL Data Warehouse. また、データ ウェアハウスを一時停止してコストを削減したり、データ ウェアハウスをパフォーマンス需要に応じてスケーリングしたりする方法についても説明します。Lower costs by pausing the data warehouse, or scale the data warehouse to meet performance demands.

コンピューティングの管理とはWhat is compute management?

SQL Data Warehouse のアーキテクチャではストレージとコンピューティングを分離して、それぞれを個別にスケーリングできます。The architecture of SQL Data Warehouse separates storage and compute, allowing each to scale independently. その結果、データ ストレージとは無関係に、パフォーマンス需要に応じてコンピューティングをスケーリングできます。As a result, you can scale compute to meet performance demands independent of data storage. コンピューティング リソースは、一時停止して再開することもできます。You can also pause and resume compute resources. このアーキテクチャでは、当然、コンピューティングとストレージに対する課金は別々に行われます。A natural consequence of this architecture is that billing for compute and storage is separate. データ ウェアハウスをしばらく使用する必要がない場合は、コンピューティングを一時停止して、コンピューティング コストを節約できます。If you don't need to use your data warehouse for a while, you can save compute costs by pausing compute.

コンピューティングのスケーリングScaling compute

コンピューティングをスケールアウトまたはスケールバックするには、データ ウェアハウスのデータ ウェアハウス ユニット設定を調整します。You can scale out or scale back compute by adjusting the data warehouse units setting for your data warehouse. データ ウェアハウス ユニットを追加していくと、読み込みとクエリのパフォーマンスが直線的に増加していきます。Loading and query performance can increase linearly as you add more data warehouse units.

スケールアウトの手順については、Azure PortalPowerShell、または T-SQL のクイックスタートに関する記事を参照してください。For scale-out steps, see the Azure portal, PowerShell, or T-SQL quickstarts. REST API を使用して、スケールアウト操作を実行することもできます。You can also perform scale-out operations with a REST API.

スケール操作を実行する場合、SQL Data Warehouse は、最初にすべての受信クエリを中止し、次にトランザクションをロールバックして一貫性のある状態を確保します。To perform a scale operation, SQL Data Warehouse first kills all incoming queries and then rolls back transactions to ensure a consistent state. スケーリングは、トランザクションのロールバックが完了して初めて実行されます。Scaling only occurs once the transaction rollback is complete. スケール操作では、コンピューティング ノードからストレージ レイヤーがデタッチされ、コンピューティング ノードが追加され、ストレージ レイヤーがコンピューティング レイヤーに再アタッチされます。For a scale operation, the system detaches the storage layer from the Compute nodes, adds Compute nodes, and then reattaches the storage layer to the Compute layer. 各データ ウェアハウスは、60 のディストリビューションとして保存され、これがコンピューティング ノードに均等に分配されます。Each data warehouse is stored as 60 distributions, which are evenly distributed to the Compute nodes. コンピューティング ノードを追加していくと、コンピューティング能力も向上していきます。Adding more Compute nodes adds more compute power. コンピューティング ノードの数が増加すると、それにつれてコンピューティング ノードあたりのディストリビューションの数が減少し、クエリ用のコンピューティング能力がより多く得られます。As the number of Compute nodes increases, the number of distributions per compute node decreases, providing more compute power for your queries. 同様に、データ ウェアハウス ユニットを減らすと、コンピューティング ノードの数が減少し、クエリ用のコンピューティング リソースが減ります。Likewise, decreasing data warehouse units reduces the number of Compute nodes, which reduces the compute resources for queries.

次の表は、データ ウェアハウス ユニットが変化すると、コンピューティング ノードあたりのディストリビューションの数がどのように変化するかを示しています。The following table shows how the number of distributions per Compute node changes as the data warehouse units change. DWU6000 は、60 のコンピューティング ノードを提供し、DWU100 よりはるかに高いクエリ パフォーマンスを達成します。DWU6000 provides 60 Compute nodes and achieves much higher query performance than DWU100.

データ ウェアハウス ユニットData warehouse units # コンピューティング ノードの数# of Compute nodes #ノードあたりのディストリビューションの数# of distributions per node
100100 11 6060
200200 22 3030
300300 33 2020
400400 44 1515
500500 55 1212
600600 66 1010
1,0001000 1010 66
12001200 1212 55
15001500 1515 44
20002000 2020 33
30003000 3030 22
60006000 6060 11

データ ウェアハウス ユニットの適正サイズの確認Finding the right size of data warehouse units

スケールアウトのパフォーマンス上のメリット (特に、大規模なデータ ウェアハウス ユニットのスケールアウトのパフォーマンス上の メリット) を確認するには、少なくとも 1 TB のデータ セットを使用する必要があります。To see the performance benefits of scaling out, especially for larger data warehouse units, you want to use at least a 1-TB data set. データ ウェアハウスの最適なデータ ウェアハウス ユニット数を確認するには、スケールアップとスケールダウンを試します。To find the best number of data warehouse units for your data warehouse, try scaling up and down. データを読み込んだ後、さまざまなデータ ウェアハウス ユニット数でいくつかのクエリを実行します。Run a few queries with different numbers of data warehouse units after loading your data. スケーリングは簡単に行えるので、1 時間以内でさまざまなパフォーマンス レベルを試すことができます。Since scaling is quick, you can try various performance levels in an hour or less.

最適なデータ ウェアハウス ユニット数を確認する際の推奨事項を以下に示します。Recommendations for finding the best number of data warehouse units:

  • 開発中のデータ ウェアハウスの場合は、少ない数のデータ ウェアハウス ユニットを選択することから始めます。For a data warehouse in development, begin by selecting a smaller number of data warehouse units. 手始めとしては、DW400 または DW200 が適しています。A good starting point is DW400 or DW200.
  • アプリケーションのパフォーマンスを監視し、選択したデータ ウェアハウス ユニットの数に対するパフォーマンスの変化を観察します。Monitor your application performance, observing the number of data warehouse units selected compared to the performance you observe.
  • 線形スケールを想定し、データ ウェアハウス ユニットをどれだけ増減する必要があるかを確認します。Assume a linear scale, and determine how much you need to increase or decrease the data warehouse units.
  • ビジネス要件に応じた最適なパフォーマンス レベルに到達するまで調整を行います。Continue making adjustments until you reach an optimum performance level for your business requirements.

スケールアウトを実行するタイミングWhen to scale out

データ ウェアハウス ユニットをスケールアウトすると、次のパフォーマンスに影響があります。Scaling out data warehouse units impacts these aspects of performance:

  • スキャン、集計、CTAS ステートメントに関するシステムのパフォーマンスが直線的に向上します。Linearly improves performance of the system for scans, aggregations, and CTAS statements.
  • データ読み込み用のリーダーとライターの数が増えます。Increases the number of readers and writers for loading data.
  • 同時クエリと同時実行スロットの最大数。Maximum number of concurrent queries and concurrency slots.

データ ウェアハウス ユニットをスケールアウトするタイミングについての推奨事項を以下に示します。Recommendations for when to scale out data warehouse units:

  • 大量データの読み込みまたは変換操作を実行する前に、データが短時間で使用可能になるようにスケールアウトします。Before you perform a heavy data loading or transformation operation, scale out to make the data available more quickly.
  • 営業時間のピーク時は、より多くの同時実行クエリに対応できるようにスケールアウトします。During peak business hours, scale out to accommodate larger numbers of concurrent queries.

スケール アウトしてもパフォーマンスが向上しない場合の対処What if scaling out does not improve performance?

データ ウェアハウス ユニットを追加すると、並列性が増加します。Adding data warehouse units increasing the parallelism. 作業がコンピューティング ノード間で均等に分割されている場合、並列性を追加すると、クエリのパフォーマンスが向上します。If the work is evenly split between the Compute nodes, the additional parallelism improves query performance. スケール アウトしてもパフォーマンスが変化しない場合は、その理由がいくつか存在します。If scaling out is not changing your performance, there are some reasons why this might happen. ディストリビューション全体でデータが傾斜しているか、クエリによって大量のデータ移動が発生している可能性があります。Your data might be skewed across the distributions, or queries might be introducing a large amount of data movement. クエリのパフォーマンスの問題を調査するには、パフォーマンスのトラブルシューティングに関する記事を参照してください。To investigate query performance issues, see Performance troubleshooting.

コンピューティングの一時停止と再開Pausing and resuming compute

コンピューティングを一時停止すると、ストレージ レイヤーがコンピューティング ノードからデタッチされます。Pausing compute causes the storage layer to detach from the Compute nodes. コンピューティング リソースは、アカウントからリリースされます。The Compute resources are released from your account. コンピューティングが一時停止中は、コンピューティングに対する課金はありません。You are not charged for compute while compute is paused. コンピューティングを再開すると、ストレージがコンピューティング ノードに再アタッチされ、コンピューティングの課金が再開されます。Resuming compute reattaches storage to the Compute nodes, and resumes charges for Compute. データ ウェアハウスを一時停止すると、以下のようになります。When you pause a data warehouse:

  • コンピューティング リソースとメモリ リソースは、データ センターで使用可能なリソースのプールに返されます。Compute and memory resources are returned to the pool of available resources in the data center
  • 一時停止の期間中、データ ウェアハウス ユニットのコストは 0 になります。Data warehouse unit costs are zero for the duration of the pause.
  • データ ストレージは影響を受けず、データはそのまま残ります。Data storage is not affected and your data stays intact.
  • SQL Data Warehouse では、実行中またはキューに格納されたすべての操作を取り消します。SQL Data Warehouse cancels all running or queued operations.

データ ウェアハウスを再開すると、以下のようになります。When you resume a data warehouse:

  • SQL Data Warehouse がデータ ウェアハウス ユニット設定のコンピューティング リソースとメモリ リソースを取得します。SQL Data Warehouse acquires compute and memory resources for your data warehouse units setting.
  • データ ウェアハウス ユニットのコンピューティングの課金が再開されます。Compute charges for your data warehouse units resume.
  • データが使用可能になります。Your data becomes available.
  • データ ウェアハウスがオンラインになった後、ワークロード クエリを再開する必要があります。After the data warehouse is online, you need to restart your workload queries.

常にデータ ウェアハウスにアクセスできることが必要な場合は、一時停止ではなく、最小サイズへのスケールダウンを検討してください。If you always want your data warehouse accessible, consider scaling it down to the smallest size rather than pausing.

一時停止と再開の手順については、Azure Portal または PowerShell のクイックスタートに関する記事を参照してください。For pause and resume steps, see the Azure portal, or PowerShell quickstarts. 一時停止 REST API または 再開 REST API を使用することもできます。You can also use the pause REST API or the resume REST API.

一時停止またはスケールの前にトランザクションを排出するDrain transactions before pausing or scaling

一時停止操作またはスケール操作を開始する前に、既存のトランザクションを完了することをお勧めします。We recommend allowing existing transactions to finish before you initiate a pause or scale operation.

SQL Data Warehouse を一時停止またはスケールすると、要求の一時停止またはスケールを開始したときに、バックグラウンドでクエリが取り消されます。When you pause or scale your SQL Data Warehouse, behind the scenes your queries are canceled when you initiate the pause or scale request. 単純な SELECT クエリの取り消しは、短時間で終わる処理であるため、インスタンスを一時停止またはスケールするのにかかる時間にほとんど影響しません。Canceling a simple SELECT query is a quick operation and has almost no impact to the time it takes to pause or scale your instance. ただし、データやデータ構造を変更するトランザクション クエリは、すぐに停止できない場合があります。However, transactional queries, which modify your data or the structure of the data, may not be able to stop quickly. トランザクション クエリについては、当然、すべてが完了するか、変更をロールバックする必要があります。Transactional queries, by definition, must either complete in their entirety or rollback their changes. トランザクション クエリが完了した作業をロールバックするには、クエリが元の変更の適用にかかった時間と同じか、それよりも長くかかる場合があります。Rolling back the work completed by a transactional query can take as long, or even longer, than the original change the query was applying. たとえば、行の削除を既に 1 時間実行しているクエリを取り消した場合、削除された行を挿入し直すのに 1 時間かかる可能性があります。For example, if you cancel a query which was deleting rows and has already been running for an hour, it could take the system an hour to insert back the rows which were deleted. トランザクションの実行中に一時停止またはスケールを実行した場合、一時停止またはスケールするには、ロールバックが完了するのを待機する必要があるため、時間がかかることがあります。If you run pause or scaling while transactions are in flight, your pause or scaling may seem to take a long time because pausing and scaling has to wait for the rollback to complete before it can proceed.

トランザクションの概要トランザクションの最適化に関するページも参照してください。See also Understanding transactions, and Optimizing transactions.

コンピューティングの管理の自動化Automating compute management

コンピューティングの管理操作を自動化するには、Azure の機能を使用したコンピューティングの管理に関する記事を参照してください。To automate the compute management operations, see Manage compute with Azure functions.

スケール アウト、一時停止、再開の各操作は、完了するのに数分かかる場合があります。Each of the scale-out, pause, and resume operations can take several minutes to complete. スケーリング、一時停止、または再開を自動化する場合は、別のアクションに進む前に特定の操作を確実に完了させるロジックを実装することをお勧めします。If you are scaling, pausing, or resuming automatically, we recommend implementing logic to ensure that certain operations have completed before proceeding with another action. さまざまなエンドポイントを通じてデータ ウェアハウスの状態を確認することで、このような操作の自動化を適切に実装できます。Checking the data warehouse state through various endpoints allows you to correctly implement automation of such operations.

データ ウェアハウスの状態を確認するには、 PowerShell または T-SQL のクイックスタートに関する記事を参照してください。To check the data warehouse state, see the PowerShell or T-SQL quickstart. REST API を使用して、データ ウェアハウスの状態を確認することもできます。You can also check the data warehouse state with a REST API.

アクセス許可Permissions

データ ウェアハウスをスケーリングするには、「ALTER DATABASE」(データベースの変更) で説明されているアクセス許可が必要です。Scaling the data warehouse requires the permissions described in ALTER DATABASE. 一時停止と再開には、SQL DB Contributor のアクセス許可、具体的には Microsoft.Sql/servers/databases/action が必要です。Pause and Resume require the SQL DB Contributor permission, specifically Microsoft.Sql/servers/databases/action.

次の手順Next steps

コンピューティング リソースの管理のもう一つの側面は、個々のクエリに対して異なるコンピューティング リソースを割り当てることです。Another aspect of managing compute resources is allocating different compute resources for individual queries. 詳細については、「ワークロード管理用のリソース クラス」を参照してください。For more information, see Resource classes for workload management.