ROOM
I
コスト削減
ハード、ソフトの資産保有 →
必要な時に必要な分だけ費用計上
スピード
システムの開発ライフサイクル短縮
拡張性
仮想化技術をベースに柔軟にシステム
リソースを迅速に追加/縮小
デバイス: 『Info Workers Will Erase Boundary Between enterprise And Consumer Technologies』(Forrester Research、2012 年 8 月 30 日)
モノ: 『The Internet of Things is Poised to Change Everything, Says IDC』 (IDC 2013)、『Big data: The next frontier for innovation,
competition, and productivity』 (McKinsey & Company、2011 年)
ビッグ データ: IDC のデジタル ユニバースに関する予測を基に構成
クラウド: 『Prepare For 2020: Transform Your IT Infrastructure And Operations Practice』(Forrester Research、2012 年 10 月 24 日)
2020 年末までに接続対象となる “モノ”
(端末、装置等)の数の予測
2,120 億
2020 年末までに接続対象となる “モノ”
(端末、装置等)の数の予測
2,120 億
コスト削減
ハード、ソフトの資産保有 →
必要な時に必要な分だけ費用計上
スピード
システムの開発ライフサイクル短縮
拡張性
仮想化技術をベースに柔軟にシステム
リソースを迅速に追加/縮小
SQL
Azure SQL Data
Warehouse
Power BI
SQL Server
Analysis Services
機械学習
Azure Machine
Learning
HDInsight / Data Lake
Azure SQL
Database
業務 データ
デバイス データ
クラウド型の並列分散データウェアハウス
コントロール
ノード
SQL
DB
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
SQL
DB
SQL
DB
SQL
DB
SQL
DB
Azure Blob Storage(WASB)
100 DWU < > 2000 DWUコントロールノード
ユーザーからの接続
コンピュートとストレージの調整
Azure Blob Storage(WASB)
100 DWU < > 2000 DWUコントロールノード
ユーザーからの接続
コンピュートとストレージの調整
コントロール
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コントロール
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
Azure Blob Storage(WASB)
コントロール
ノード
SQL
DB
コントロールノード
D51
D52
D53
D60
…
D41
D42
D43
D50
…
コンピュート
ノード
D31
D32
D33
D40
…
D21
D22
D23
D30
…
D11
D12
D13
D20
…
D1
D2
D3
D10
…
SQL
DB
Azure Blob Storage(WASB)
コントロール
ノード
SQL
DB
コントロールノード
コンピュート
ノード
D51
D52
D53
D60
…
コンピュート
ノード
D41
D42
D43
D50
…
コンピュート
ノード
D31
D32
D33
D40
…
コンピュート
ノード
D21
D22
D23
D30
…
コンピュート
ノード
D11
D12
D13
D20
…コンピュート
ノード
D1
D2
D3
D10
…
SQL
DB
SQL
DB
SQL
DB
SQL
DB
SQL
DB
SQL
DB
クエリ性能のパワーを表す指標
DWH において最も重要な以下の 3 要素を数値化
• 行のスキャン性能
• ロード性能
• ノード間のコピー性能
スキャン性能 3.36M row/sec
ロード性能 130K row/sec
ノード間のコピー性能 350K row/sec
100 DWU あたりの参考性能
100 DWU= 1 コンピュートノード
DWU
100
DWU
200
DWU
300
DWU
400
DWU
500
DWU
600
DWU
1000
DWU
1200
DWU
1500
DWU
2000
DWU
3000
DWU
6000
コントロールノード数 1
コンピュートノード数 1 2 3 4 5 6 10 12 15 20 30 60
データ分散の数
(ディストリビューション)
60
1 コンピュートノードで
処理するデータ分散の数
60 30 20 15 12 10 6 5 4 3 2 1
DWU の決定プロセス
1. 最初は小さい DWU から始める
2. DWU を増減させながらパフォーマンスを比較
3. ビジネス要求に合わせて適したパフォーマンスレベルを決定する
4. DWU を増減させてマッチするパフォーマンスレベルに調整する
いつ DWU をスケールさせるか
• 負荷が変動する場合、通常は高い負荷を基準に合わせる
• 月末・月初のみにピークがくる場合はタイミングに合わせて DWU を調整
• 大量データをロードするとき
分散方式の選択
データの偏りと
データ移動の考慮
テーブルレイアウトと
インデックスの使い分け
 ラウンドロビン or ハッシュ
 用途に応じて適切な分散方式を選択
 データの偏りを回避
 クエリ実行時のデータ移動の最小化
 カラムストア
 ヒープ、クラスタ化インデックス
分散方式の選択
データの偏りと
データ移動の考慮
テーブルレイアウトと
インデックスの使い分け
 ラウンドロビン or ハッシュ
 用途に応じて適切な分散方式を選択
 カラムストア
 ヒープ、クラスタ化インデックス
 データの偏りを回避
 クエリ実行時のデータ移動の最小化
均一にすべてのディストリビューションに
CREATE TABLE (…)
WITH DISTRIBUTION = ROUND_ROBIN
Dist_DB_1
Dist_DB_2
Dist_DB_3
Dist_DB_4
ID Name City Balance
201 Bob Madison $3,000
105 Sue San Fran $110
933 Sue Seattle $40,000
150 George Seattle $60
220 Sally Mtn View $990
86 Bob New York $2,300
201 Bob …
105 Sue …
150 Geoge …
220 Sally …
86 Bob …
933 Sue …
482 John …
115 Asad …
201 Bob Madison $3,000
105 Sue San Fran $110
933 Sue Seattle $40,000
150 George Seattle $60
220 Sally Mtn View $990
86 Bob New York $2,300
ID UserID Name Tran
201 123 Bob $3,000
105 324 Sue $110
933 324 Sue $40,000
150 45 George $60
220 154 Sally $990
86 123 Bob $2,300
201 123 Bob $3,000
105 324 Sue $110
933 324 Sue $40,000
150 45 George $60
220 154 Sally $990
86 123 Bob $2,300
Dist_DB_1
Dist_DB_2
Dist_DB_3
Dist_DB_4
同じキーは同じディストリビューションに
123 Bob …
324 Sue …
45 Geoge …
154 Sally …
123 Bob …
324 Sue …
CREATE TABLE (…)
WITH DISTRIBUTION = HASH(UserID)
ラウンドロビン分散(デフォルト) ハッシュ分散
• 全てのディストリビューションに
できるだけ均等に分散
• ランダムに分散
• 指定した列のハッシュ値に
基づいて分散
• 同じ値は同じディストリビューション
に配置
• 小さなディメンション向き
• 大きなファクトには適さない
• ローディングは最も高速
• 大規模ファクト向き
• 小さなディメンションも可能であれ
ば検討
• データの偏りを回避すること
• カーディナリティが高いこと、最低 1,000 以上が望ましい
• 値の偏りが大きい列でないこと(均等に分散されない)
• NULL 値がないこと。NULL 値は 1 つのディストリビューションに集まる
• データ移動を最小化すること
• JOIN, GROUP BY, DISTINCT, HAVING で使用される列
• 結合する両テーブルのキーのデータ型を一致させる
• WHERE 句で使われていないこと
分散方式の選択
データの偏りと
データ移動の考慮
テーブルレイアウトと
インデックスの使い分け
 ラウンドロビン or ハッシュ
 用途に応じて適切な分散方式を選択
 カラムストア
 ヒープ、クラスタ化インデックス
 データの偏りを回避
 クエリ実行時のデータ移動の最小化
レコード数が多いため
処理に時間がかかる
レコード数が少ないため
すぐに処理が完了する
クエリ実行のバランスが悪く、無駄な結果待ちが発生する
~データが偏るキー と 偏らないキー~
コントロール
ノード
SQL
DB
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
コンピュート
ノード
SQL
DB
SQL
DB
SQL
DB
SQL
DB
SQL
DB
SQL
DB
…
…
…
…
…
…
する
vs_key color ord
11 Red 15
32 Blue 20
54 Yellow 22
68 Purple 17
ss_key vid qty
1 2 5
3 32 10
5 6 12
7 78 7
vs_key color ord
2 Red 13
4 Blue 21
6 Yellow 27
8 Green 11
ss_key vid qty
2 11 3
4 4 11
6 54 17
8 8 1
HASH(vs_key) HASH(ss_key)
11, 15, 3
2, 13, 5
11, 15, 3 : 2, 13, 5
SELECT vs_key, a.ord ,b.qty
FROM vendor_sales a
JOIN store_sales b ON a.vs_key = b.vid
WHERE a.color = 'Red'
しない
ws_key color Qty
1 Red 15
3 Blue 20
5 Yellow 22
7 Green 17
ss_key color Qty
1 Red 5
3 Blue 10
5 Yellow 12
7 Green 7
ws_key color Qty
2 Red 13
4 Blue 21
6 Yellow 27
8 Green 11
ss_key color Qty
2 Red 3
4 Blue 11
6 Yellow 17
8 Green 1
HASH(ws_key) HASH(ss_key)
Red, 5
Red, 3
Red, 5 : Red, 3
SELECT a.color, b.Qty
FROM web_sales a
JOIN store_sales b ON a.ws_key = b.ss_key
WHERE a.color = 'Red'
データの移動をできるだけ少なくするように設計すること
データ移動が発生するケース
データ移動が発生しないケース
~データ移動の実行プランを確認~
分散方式の選択
データの偏りと
データ移動の考慮
テーブルレイアウトと
インデックスの使い分け
 ラウンドロビン or ハッシュ
 用途に応じて適切な分散方式を選択
 カラムストア
 ヒープ、クラスタ化インデックス
 データの偏りを回避
 クエリ実行時のデータ移動の最小化
カラムストア (デフォルト)
• 大きなテーブルに適している
• 列単位の I/O
• 高圧縮
• ヒープと比較してデータロード
は低速
• パーティション当たりの行数は
100 万行以上に保つ
ヒープ クラスタ化インデックス
• テンポラリ テーブルやステージ
ング テーブルに適している
• 小さいサイズのテーブルに適
している
• 1 行を選択する際に適して
いる
• ロード時にソートがかかるため
遅くなる
セカンダリ インデックス
• 1 行を選択する際に適している
• カラムストアには適用できない
カラム数:80
件数:16 億件
論理容量:640
GB
カラム数:10
件数:300
論理容量:30 KB
カラム数:40
件数:8 億件
論理容量:160
GB
• 500 DWU ~ 2000 DWU の範囲で即時スケールアップ&ダウンを実施
• PolyBase による BLOB ストレージからの容易なデータロード
レスポンスタイム
Azure SQL DW
(500 DWU)
Azure SQL DW
(1000 DWU)
Azure SQL DW
(2000 DWU)
PolyBase BCP SQLBulkCopy
ADF
SSIS
ロード パフォーマンス 高速 低速
DWU 増加による
パフォーマンス向上
○ × × ×
同時ロードによる
パフォーマンス向上
× ○ ○ ○
ロード時のデータの加工や
クレンジングの自由度
× ×
○
(ADF 使用時)
◎
外部の半構造化データを Transact-SQL で取り扱う仕組み
SQL
Azure SQL Data
Warehouse
1. 外部表を作成して Blob 内の
ファイル(CSV等)を参照
2. 外部表に対して SELECT し、
データを別の表にロードする
PolyBase
Azure
Storage
SSIS/BCP/ADF/Bulk Copy
リーダー ライター リーダー ライター
リーダー / ライター数 DWU
100 200 300 400 500 600 1000 1200 1500 2000
リーダー 8 16 24 32 40 48 60 60 60 60
ライター 60
• 元ファイルの分割をしない
• 自動的に一定サイズに分割して並列処理
• 圧縮ファイル (gzip) は自動分割できないため、ファイルを分ける
• DWU のスケーリングでパフォーマンスを調節する
「クエリの同時実行」と「リソース割り当て」を管理する仕組み
• クエリの同時実行
• 同時実行クエリ
• 同時実行スロット
• リソース割り当て
使用可能なメモリ(MB)/
ディストリビューション
DWU
100
DWU
200
DWU
300
DWU
400
DWU
500
DWU
600
DWU
1000
DWU
1200
DWU
1500
DWU
2000
smallrc 100
mediumrc 100 200 200 400 400 400 800 800 800 1600
largerc 200 400 400 800 800 800 1,600 1,600 1,600 3,200
xlargerc 400 800 800 1,600 1,600 1,600 3,200 3,200 3,200 6,400
消費量 DWU
100
DWU
200
DWU
300
DWU
400
DWU
500
DWU
600
DWU
1000
DWU
1200
DWU
1500
DWU
2000
同時実行クエリの最大数 32
同時実行スロットの最大数 4 8 12 16 20 24 40 48 60 80
リソースクラス smallrc 1
mediumrc 1 2 2 4 4 4 8 8 8 16
largerc 2 4 4 8 8 8 16 16 16 32
xlargerc 4 8 8 16 16 16 32 32 32 64
各クエリで使用可能なメモリ割り当て量
使用される同時実行数
同時実行クエリ
超えるものは
待機
ユーザー B
smallrc
ユーザー A
largerc
消費スロット: 8
消費スロット: 1
消費スロット: 4
同時実行数と大きなリソースはトレードオフ
 同時実行数を優先するケース例
 大きなリソースクラスを割り当てるケース例
リソース クラスによって管理される操作
リソース クラスによって管理されない操作
ドキュメント
https://azure.microsoft.com/ja-jp/documentation/services/sql-data-warehouse/
チュートリアル
https://azure.microsoft.com/ja-jp/documentation/articles/sql-data-warehouse-get-
started-provision/
ブログ
Microsoft Japan Data Platform Tech Sales Team Blog
データ プラットフォーム製品のプリセールスチームによるブログサイト
https://blogs.msdn.microsoft.com/dataplatjp/
【 Session ID 】
DBP-009
アンケートにご協力ください。
●アンケートに 上記の Session ID のブレイクアウトセッションに
チェックを入れて下さい。
●アンケートはお帰りの際に、受付でご提出ください。
マイクロソフトスペシャルグッズと引換えさせていただきます。
ROOM I
Ask the Speaker のご案内
●本セッションの詳細は、EXPO 会場内
『Ask the Speaker』コーナー
Room I カウンタにてご説明させて
いただきます。是非、お立ち寄りください。
Ask the Speaker
EXPO会場MAP
• グラフによる状況の確認
• 閾値設定によるアラート監視
ビュー名 説明
sys.dm_pdw_exec_sessions • Azure SQL Data Warehouse に対して現在開かれているセッションに関する情報
sys.dm_pdw_exec_requests
• Azure SQL Data Warehouse に対して実行されているアクティブなリクエストに関する
情報
sys.dm_pdw_request_steps
• Azure SQL Data Warehouse に対して実行されているリクエストやクエリを構成するク
エリプラン ステップに関する情報
sys.dm_pdw_dms_workers
• DMS ステップ(データ転送)を実行してる全ワーカーに関する情報
sys.dm_pdw_sql_requests • クエリプラン ステップの一部として実行されるクエリ分散に関する情報
ビュー名 説明
sys.dm_pdw_waits • クエリ等のリクエストの実行中に発生した待機(例、ロック待ちや転送キュー待ち)に関する情報
sys.dm_pdw_resource_waits • SQL Data Warehouse で発生した全ての待機に関する情報
sys.dm_pdw_wait_stats • 異なるノードで稼働しているインスタンスの SQL Server OS に関する情報
(参考)DMVを利用してワークロードを監視する
https://azure.microsoft.com/ja-jp/documentation/articles/sql-data-warehouse-manage-monitor/
テーブルごとの分散ポリシーを確認
ディストリビューションごとのデータ件数を確認
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説

DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説