SlideShare a Scribd company logo
性能問題を起こしにくい
信頼されるクラウド RDB のつくりかた
太田 智行
#mstsjp18 #DA08
NECソリューションイノベータ株式会社
サポートサービス事業部 データベースプロフェッショナルサービス部
DA08
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
自己紹介
太田 智行(おおた ともゆき)
これまで:リレーショナルデータベースひと筋15年超
PostgreSQL 8年、 SQL Server 8年、Oracleちょこちょこ、MySQL 甘噛み程度
現在:Data Platform 全般で活動中
WebでSQL Server技術記事をゆるやかに連載中
https://enterprisezine.jp/dbonline/detail/9626
データエンジニアの会
https://data-engineer.connpass.com/
Microsoft MVP for Data Platform(2018.2~)
https://mvp.microsoft.com/ja-jp/PublicProfile/5002980?fullName=Tomoyuki%20%20Oota
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
IaaS PaaS
Microsoft Azure
SQL Database
SQL Data
Warehouse
SQL Server
on
IaaS
Managed Instance Single Database Elastic Pool
データウェアハウス用途汎用、オンライントランザクション用途
+ Other Clouds
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 改善フェーズ
➢ 5.チューニング
➢ 6.リソース拡張
本セッションのスコープ外
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 リレーショナルデータベース管理者(DBA)
➢ 初~中級DBA
• DB構築時のチェックリストとして
➢ 上級DBA
• 頭の中にある過去経験の棚卸として
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
構築フェーズ
1.ストレージ構成の最適化
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ストレージ
ディスク
ストレージ
コントローラ
ストレージ
ネットワーク
ホストバス
アダプタ
ストレージ
システム
最大性能
バランス
良
ストレージ
ディスク
ストレージ
コントローラ
ストレージ
ネットワーク
ホストバス
アダプタ
ストレージ
システム
最大性能
バランス
悪
CPU
CPU
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 ディスクを束ねて必要I/O性能を構成する
 Azureリソース内のI/O性能
SQL Server on IaaS
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
Maneged Disk サイズ IOPS スループット MB/s
Standard HDD 32GB~32TB 500~2,000 60~500
Standard SSD 128GB~32TB 500~1,300 60~300
Premium SSD 32GB~16TB 120~15,000 25~750
Ultra SSD (preview) 4GB~64TB 1,200~160,000 300~2,000
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
0 500 1000 1500 2000
x1
x2
x3
x4
ディスクのストライピング本数 と IOPS実測値
• ディスク
✓ S4(Managed Standard
HDD、Max 500 IOPS)
✓ Storage Spaceでストライピング
• VM
✓ Standard_D2s_v3
✓ ホストキャッシュ無し
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 Azureリソースそれぞれにスループット上限あり
➢ ① ディスク
• ディスク種類とレベルに応じる(ex. Prm SSD P10:500 IOPS, 100 MB/s)
➢ ② ストレージアカウント ※. Unmanaged Diskが対象。Managed Diskはストレージアカウントの制約を受けない
• Standard:アカウントあたり 20,000 IOPS
• Premium:アカウントあたり 50 Gbps
➢ ③ VM
• VMレベルに応じる(ex. Std_DS2_v2:6,400 IOPS, 96 MB/s, 8Disks)
ディスク
ストレージ
アカウント
VM システムI/O性能
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 ディスクを束ねて必要I/O性能を構成する
 Azureリソース内のI/O性能
SQL Database Managed Instance(General Purpose)
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 DB作成するとDBファイルごと単一プレミアムディスクが割当たる
➢ データベースファイルごと排他的にスループットが保証される
1.ディスクのチョイスはAzureにおまかせ
Azure
Storage
Managed
Instance
(General Purpose)
ユーザ
DB
CREATE
DATABASE
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 割当たるディスクはDBファイルのサイズに応じて自動決定
➢ 運用によるDBファイルのサイズ変動に応じてディスクレベルも自動調整
1.ディスクのチョイスはAzureにおまかせ
データベースファイルのサイズ 割り当たるプレミアムディスク(Premium SSD)
(*) ~ 128GB P10(128 GB、500 IOPS、100 MB/s)
128GB ~ 256GB P15(256 GB、1100 IOPS、125 MB/s)
256GB ~ 512GB P20(512 GB、2300 IOPS、150 MB/s)
512GB ~ 1TB P30(1 TB、5000 IOPS、200 MB/s)
1TB ~ 2TB P40(2 TB、7500 IOPS、250 MB/s)
2TB ~ 4TB P50(4 TB、7500 IOPS、250 MB/s)
(*) 小さいDBファイルで
あってもP10未満が
アサインされることは
ない
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 Gereral PurposeではTEMPDB に限りローカルSSD
➢ Business Critical(preview)は全DBファイルがローカルSSD
1.ディスクのチョイスはAzureにおまかせ
TEMPDB
Managed
Instance
(General Purpose)
ユーザDB
Azure
Storage
Local
SSD
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 複数ファイル構成は従来通り SQL Server がストライプI/O
➢ あとから追加だとデータの装填に偏りが生じるので当初のサイジングは大事
• リバランス操作で偏り解消は可能ではあるが。
Azure
Storage
Managed
Instance
(General Purpose)
ユーザ
DB
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
データベースファイルのサイズ 割り当たるプレミアムディスク(Premium SSD)
128GB ~ 256GB P15(256 GB、1100 IOPS、125 MB/s)
DBファイルのサイズとプレミアムディスクのサイズは一致しないため、それぞれに上限設定がある
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
WITH DatabaseFile AS(
SELECT database_id AS DatabaseID,
CAST(size * 8. / 1024 / 1024 AS decimal(12,4)) AS FileSizeGB
FROM sys.master_files )
SELECT
SUM(FileSizeGB) AS FileSizeGB,
SUM( IIF(
DatabaseID <> 2,
CASE WHEN FileSizeGB <= 128 THEN 128
WHEN FileSizeGB > 128 AND FileSizeGB <= 256 THEN 256
WHEN FileSizeGB > 256 AND FileSizeGB <= 512 THEN 512
WHEN FileSizeGB > 512 AND FileSizeGB <= 1024 THEN 1024
WHEN FileSizeGB > 1024 AND FileSizeGB <= 2048 THEN 2048
WHEN FileSizeGB > 2048 AND FileSizeGB <= 4096 THEN 4096
ELSE 8192
END, 0 ) ) AS BlobSizeGB
FROM DatabaseFile;
Managed Instanceデプロイ時に
指定したサイズ 32GB~8TB が上限
ストレージアカウントに設定
された 35TBが上限
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 すべてAzureにおまかせ(DBファイルも意識しない)
SQL Database Single Database / Elastic Pool
SQL Data Warehouse
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
Azure IaaS Azure PaaSOn-Premises
SQL Server
SQL Server
on IaaS
Managed Instance
ネットワーク
ストレージ
サーバー
ホスト OS
仮想化
ゲスト OS
SQL Server インスタンス
データベース
データ
ネットワーク
ストレージ
サーバー
ホスト OS
仮想化
ゲスト OS
SQL Server インスタンス
データベース
データ
ネットワーク
ストレージ
サーバー
ホスト OS
仮想化
ゲスト OS
SQL Server インスタンス
データベース
データ
ネットワーク
ストレージ
サーバー
ホスト OS
仮想化
ゲスト OS
SQL Server インスタンス
データベース
データ
Single Database / Elastic Pool
SQL Data Warehouse
Azure 管理利用者 管理
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
CREATE DATABASE [DEMO_DB]
ON PRIMARY (
NAME=N'DEMO_DB',FILENAME=N'data.mdf')
LOG ON (
NAME=N'DEMO_DB_log',FILENAME=N'log.ldf')
GO
CREATE DATABASE 処理が
足回りを意識する
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
SELECT 氏名, 年齢, 住所
FROM 社員
WHERE 社員ID = ログインID
SELECT売上年度, SUM(売上)
FROM 売上明細
GROUP BY 売上年度
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
局所的なデータアクセス
✓物理配置の影響は受けにくい
など広範囲なデータアクセス
✓欲しいデータが物理的に近接していることが望ましい
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
コントロールノード
ユーザーからの接続
コンピュートとストレージの調整
コンピュートノード
クエリ実行
スケールアウト / イン可能
不要なときは停止可能
ストレージノード
データ保存
60分散のリモートストレージ
DW100
60分散固定
リモートストレージ
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
コントロールノード
ユーザーからの接続
コンピュートとストレージの調整
コンピュートノード
クエリ実行
スケールアウト / イン可能
不要なときは停止可能
ストレージノード
データ保存
60分散のリモートストレージ
DW600
60分散固定
リモートストレージ
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 リモートストレージ間のデータ移動は大きな性能ペナルティ
➢ データ移動は主に結合や集計を行うクエリで発生する
• 結合する値がこのディストリビューション内に存在しない
• 集計がこのディストリビューション内で完結できない
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 データ移動なし
 データ移動あり
コスト
0.00216
BROADCAST_MOVE
(
コスト
38400.00216
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
どのように分散配置するかによって制御
リモートストレージ間のデータ移動は大きな性能ペナルティ
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ハッシュ分散 ラウンドロビン分散(既定) レプリケート
分散キーのHush値で分散 ランダム均等分散 全てのストレージへコピー
CREATE TABLE (…)
WITH DISTRIBUTION=HASH(UserID)
CREATE TABLE (…)
WITH DISTRIBUTION=ROUND_ROBIN
CREATE TABLE (…)
WITH DISTRIBUTION = REPLICATE
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ハッシュ分散 ラウンドロビン分散(既定) レプリケート
分散キーのHush値で分散 ランダム均等分散 全てのストレージへコピー
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ そのためにチョイスするべきキー列
• JOIN, GROUP BY, DISTINCT, HAVING で使用される列
✓Ex)ともにorder_idで分散したorders表とtransaction表をorder_idで
結合する場合はデータの移動が不要となる
✓注)JOINキーのデータ型は一致していないとダメ
• WHERE 句で使われていない列
✓ Ex)日付型はWhereでよく使われる
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ そのためにチョイスするべきキー列
データスキュー状態の場合、並列クエリ実行時の各ディストリビューションの作業量も不均衡となり、
結果として全体の性能が最も処理が遅いディストリビューションの性能に引きずられる。
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
HASH([ProductKey]) HASH([ProductKey])
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
HASH([ProductKey])HASH([ProductKey])
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ROUND_ROBINHASH([ProductKey])
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
HASH([ProductKey])HASH([ProductKey])
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
HASH([ProductKey])
INT
HASH([ProductKey])
BIGINT
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
HASH([ProductKey])
INT
HASH([ProductKey])
BIGINT
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
構築フェーズ
2.アクセスパスの最適化
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
Why
テーブルスキャン
インデックスシーク
+
テーブルルックアップ
VS
1
3
2
4
6
5
7
9
8
1
2
3 5
4
テーブル インデックス テーブル
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
Why
テーブルスキャン
インデックスシーク
+
テーブルルックアップ
VS
1
3
2
4
6
5
7
9
8
1
2
3
9
8
7
6
5
10
4
テーブル インデックス テーブル
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 適切なインデックスを定義する
 正しくクエリを書く
 統計情報の高い鮮度と精度を保つ(詳細は4章で)
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 インデックス利用が正解とは限らない。
➢ 小さいテーブル
➢ 広範囲のスキャン
 インデックス構造を踏まえた適切なインデックスを利用する
➢ B-Tree(非クラスタ化、クラスタ化、付加列)、列ストア
• ビットマップ、ハッシュ は無し。
1
2
3
9
8
7
6
5
10
4
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 インデックスはあればあっただけ良いというものではない
➢ 使われないインデックスは百害あって一利なし。
+システム性能向上
本の目次は
固定だけど。
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 作りっぱなしはだめ
➢ 定期メンテナンスが必要(詳細は4章で)
インデックスも
デフラグ必要
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
注文ID 商品ID 日付 売上
101 52 201801 100
・・・ ・・・ ・・・ ・・・
110 23 201812 300
集
計
処
理
101 52 201801 100
・・・ ・・・ ・・・ ・・・
110 23 201212 300
バッファプール
101 52 201801 100
・・・ ・・・ ・・・ ・・・
110 23 201212 300
集計に不要な列
もI/Oされる
集計に不要な列
もキャッシュされる
注文ID 商品ID 日付 売上
101 52 201801 100
・・・ ・・・ ・・・ ・・・
110 23 201812 300
集
計
処
理
100
・・・
300
バッファプール
100
・・・
300
集計に不要な列
はI/Oされない
行ストア
列ストア
行ストア
列ストア
集計に不要
な列はキャッ
シュされない
同じ属性なので
圧縮効果も高い
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
カラムストア (既定) ヒープ
クラスタ化インデックス
非クラスタ化インデックス
✓ 大きなテーブル(パーティショ
ン当たりの行数は 100 万
行以上に保つ)
✓ 列単位 I/O、高圧縮率
✓ ヒープと比較してデータロード
は低速
✓ ロード用ステージングテーブル
✓ 1 億行未満の小さなルック
アップ テーブル
✓ 一時テーブル(ローカルスト
レージに配置された
tempdb)を使うことでさら
にロードを高速化
✓ 極めて少数の行の検索が
優先となるテーブル
✓ 非クラスタ化インデックスは
セカンダリインデックスとして
利用可能
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
 インデックスが使われないかもしれないケース例
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
運用フェーズ
3.パフォーマンスの監視
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning
for Azure SQL DB
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning
for Azure SQL DB
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Perfmon 消
➢ Activity Monitor 消
➢ Dara Collector 消
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning
for Azure SQL DB
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
アボートするワーカーが
増えています
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ロックウェイトの多発が
性能に影響しています。
下記はロックチェーンの
先頭にいるクエリ一覧
です。
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
ユーザからの負荷が増大し
積みあがっています。
CPU,IO,LOGの負荷は限
界に達しています
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
リソース使用率が増加したクエリの数
は3です。その中で最大の原因は最近
データベースに登場した新しいクエリ
(0x34CFCB2D40A683FD)です。
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
検出された性能問題のパターンは
「ワークロードの増加」
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
✓ リソースの上限に到達 ✓ 待機の増加
✓ ワークロードの増加 ✓ TempDB の競合
✓ メモリ不足 ✓ エラスティック プールの DTU 不足
✓ 過剰ロック ✓ プランの変動
✓ 過剰並列化処理 ✓ データベース スコープの構成値の変更
✓ ページラッチの競合 ✓ 処理速度が低いクライアント
✓ インデックスの不足 ✓ 価格レベルのダウングレード
✓ 新しいクエリの検出
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Perfmon 消
, SQL Trace 消
➢ Activity Monitor 消
➢ Dara Collector 消
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Database Engine Tuning Advisor 消
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning
for Azure SQL DB
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Perfmon 消
➢ XEvent, SQL Trace 消
➢ Activity Monitor 消
➢ Dara Collector 消
➢ Query Store 消
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Database Engine Tuning Advisor 消
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning 可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
✓ 接続を監視する
✓ クエリ実行を監視する
✓ 待機クエリを監視する
✓ tempdb を監視する
✓ メモリを監視する
✓ トランザクション ログのサイズを監視する
✓ トランザクション ログのロールバックを監視する
参考)https://docs.microsoft.com/ja-jp/azure/sql-data-warehouse/sql-data-warehouse-manage-monitor
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
➢ Perfmon 消
, SQL Trace 消
➢ Activity Monitor 消
➢ Dara Collector 消
➢ Azure Monitor
➢ Azure SQL DW Monitor
➢ Database Engine Tuning Advisor 消
➢ Azure Advisor
➢ Azure VM Perf Diagnostics(preview)
➢ Azure SQL DB Query Perf Insights
➢ Azure SQL DB Intelligent Insights
➢ Automatic Tuning
for Azure SQL DB
可視化
分析&処方
自動対処
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
運用フェーズ
4.メンテナンス
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
統計情報の定期メンテナンス
 統計情報のメンテナンス挙動把握が大事。
➢ 作成されるタイミング
• Indexが作成された列WHERE句やJOIN句の条件となった列に対し
て自動作成(手動作成も可)
➢ 更新されるタイミング
• ざっくり目安としてレコード数の20%に相当するレコードが変更さ
れたタイミングで自動更新(レコード数増加に応じて20%閾値は自
動調整される)。
統計情報の精度・鮮度は性能に直結
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
統計情報の定期メンテナンス
参考:統計情報の自動更新の詳細
① クエリプラン
キャッシュの検索
.
② 関連する統計情報
のロード
成功
③b 古い統計情報
はあるか
Yes
No
③a 更新が必要な統計情報すべてを更新
④ クエリプラン生成とリコンパイル閾値の設定
⑤ クエリプランのテスト(スキーマチェック)
⑥ スキーマは
有効か
Yes
⑦ 新しい統計情報
を使用できるか
⑧ 古い統計情報は
あるか
⑨ クエリ
実行
Yes Yes
No No
⑩ リコンパイル
No
失敗
.
S E
クエリ
実行開始
クエリ
実行終了
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
統計情報の定期メンテナンス
計画的な手動更新が必要となる場合もある
一定のデータ量 手動更新不要
一貫した増加傾向 基本的には自動更新に任せておけばよい
一定間隔の増減反復 バッチ処理のような大量更新を行う場合は手動更新
とセットで実施(初回クエリが犠牲にならないように)
データの分布変化 自動更新しきい値未満でもデータ分布に影響を与える
変更を行う場合は手動更新をセットで実施
新しいデータの参照 新しいデータのみ参照したい場合は手動更新をセット
で実施
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
インデックスの定期メンテナンス
✓ データの変更に伴いデータが断片化
✓ → I/O量やインストラクション増大
✓ → 性能劣化
性能劣化予防のために定期的にデフラグする
キー ポインタ
10 ・・・
20 ・・・
30 ・・・
40 ・・・
50 ・・・
60 ・・・
キー ポインタ
10 ・・・
20 ・・・
21 ・・・
30 ・・・
キー ポインタ
40 ・・・
50 ・・・
60 ・・・
INSERT
キー = 21
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
インデックスの定期メンテナンス
 内部断片化
➢ ページ内のデータの装填率(密度)を示す
➢ 未使用領域分の余計なI/Oによるアクセス効率低下
• FILLFACTORで装填率をコントロールしているケースも
断片化の種類とその影響
同じデータ量に対して装填率100%
と50%ではI/Oページ量が2倍になる装填率
100%
装填率
50%
vs
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
インデックスの定期メンテナンス
 外部断片化
➢ インデックス論理順とファイル内物理順の不一致度合いを示す
➢ データ順が不連続状態になることでのアクセス効率低下
断片化の種類とその影響
10
- 11
index
record
11
10 20
index
record
12
p n
index
record
13
p n
index
record
14
p n
index
record
15
26 16
index
record
16
15 17
index
record
17
16 18
index
record
18
p n
index
record
19
p n
index
record
20
11 23
index
record
21
p n
index
record
22
p n
index
record
23
20 24
index
record
24
23 15
index
record
25
p n
index
record
~
ファイル内の物理番地 →
インデックスの論理順 →
インデックスAの断片
(大きさ=2)
インデックスAの断片
(大きさ=3)
インデックスAの断片
(大きさ=1)
インデックスAの断片化率 = =37.5%
3(赤線ホップ数)
8(総ページ数)
インデックスAの断片
(大きさ=2)
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
インデックスの定期メンテナンス
 B-Treeインデックスの深さ
➢ B-Treeの階層の数を示す
➢ 欲しいデータの番地を得るまでに辿らねばならないインデックス
ページが増えることでのアクセス効率低下
断片化の種類とその影響
1階
4階
3階
2階
最上階から1階まで下るコストを
4階建と3階建で比較すると単純計算
で1.3倍強になる(3階までなら階段で
上がってもいいけど4階となると…)。
vs
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
まとめ
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
© 2018 NEC Solution Innovators, Ltd. All rights reserved.
S
Thank you!
Information
「Ask The Speaker」
各ブレイクアウトセッション終了後の休憩時間に、
登壇したスピーカーに直接ご質問いただけるコーナーを
B2F 「Ask The Speaker」 Room に用意
しています。セッション内容のより深い理解のため、
ぜひお役立てください。
(※ハンズオンラーニング、シアターセッション、ビジネストラック
及び 一部のセッションを除きます)
EXPO
AREA 1
EXPO
AREA 2
Room
B
セッションアンケートにご協力ください。
公式イベントアプリで、「Microsoft Tech Summit 2018 参加者アンケート(必須)」と
「各セッションアンケート( 5 つ以上)」、合わせて 6 つ以上のアンケートにご回答ください。
もれなくオリジナルグッズを贈呈いたします。
Information
Twitter のご案内
本セッションに関するご質問やご感想は、 #mstsjp18 と セッション ID の
ハッシュタグで、ご投稿をお願いします。
#mstsjp18

More Related Content

PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
MySQLバックアップの基本
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
MySQLバックアップの基本
コンテナの作り方「Dockerは裏方で何をしているのか?」
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)

What's hot (20)

PDF
DockerとPodmanの比較
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
XIDを周回させてみよう
PDF
Linux女子部 systemd徹底入門
PDF
Vacuum徹底解説
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
あなたの知らないPostgreSQL監視の世界
PDF
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
PPTX
iostat await svctm の 見かた、考え方
PDF
Dockerイメージ管理の内部構造
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PPTX
コンテナネットワーキング(CNI)最前線
PDF
PostgreSQLレプリケーション徹底紹介
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
まずやっとくPostgreSQLチューニング
PDF
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
3分でわかるAzureでのService Principal
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
DockerとPodmanの比較
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
XIDを周回させてみよう
Linux女子部 systemd徹底入門
Vacuum徹底解説
マルチテナントのアプリケーション実装〜実践編〜
あなたの知らないPostgreSQL監視の世界
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
iostat await svctm の 見かた、考え方
Dockerイメージ管理の内部構造
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
コンテナネットワーキング(CNI)最前線
PostgreSQLレプリケーション徹底紹介
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
まずやっとくPostgreSQLチューニング
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
3分でわかるAzureでのService Principal
コンテナ未経験新人が学ぶコンテナ技術入門
Ad

Similar to 性能問題を起こしにくい信頼されるクラウド RDB のつくりかた (20)

PDF
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
PPTX
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
PDF
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
PDF
SQL Azure のシームレスな管理
PDF
Sql database managed instance overview and internals
PDF
Azure Synapse Analytics 専用SQL Poolベストプラクティス
PDF
Managed Instance チートシート
PDF
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
PPTX
Sql azure入門
PDF
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
PPTX
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
PDF
性能問題を起こしにくい 強いDBシステムの作り方(Ver. 2018.9)
PDF
[Japan Tech summit 2017] DAL 003
PPTX
GA直前!SQL Server 2017 Linux 版の深イイ話
PDF
Dat004 開発者に捧ぐ「sql server_2016_
PPTX
SQL Server 入門
PPTX
SQL Server 2019 とともに知る Microsoft Data Platform
PDF
オンプレのDbaがazureのデータベースを使ってみた
PDF
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
SQL Azure のシームレスな管理
Sql database managed instance overview and internals
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Managed Instance チートシート
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
Sql azure入門
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
性能問題を起こしにくい 強いDBシステムの作り方(Ver. 2018.9)
[Japan Tech summit 2017] DAL 003
GA直前!SQL Server 2017 Linux 版の深イイ話
Dat004 開発者に捧ぐ「sql server_2016_
SQL Server 入門
SQL Server 2019 とともに知る Microsoft Data Platform
オンプレのDbaがazureのデータベースを使ってみた
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
Ad

More from Tomoyuki Oota (9)

PDF
SQL Server エンジニア のための コンテナ入門(k8s編)
PDF
SQL Server コンテナ入門(Kubernetes編)
PDF
SQL Server コンテナ入門(Docker編)
PDF
SQL Server エンジニア のための コンテナ入門
PDF
For Power BI Beginners
PDF
SQL Server 2017 で実現される AIシステムモデル のご紹介
PDF
データ分析プラットフォームの歩き方
PDF
SQL Server 2017 Machine Learning Services (CLR-H in TOKYO #13)
PDF
Data Scientists Love SQL Server
SQL Server エンジニア のための コンテナ入門(k8s編)
SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Docker編)
SQL Server エンジニア のための コンテナ入門
For Power BI Beginners
SQL Server 2017 で実現される AIシステムモデル のご紹介
データ分析プラットフォームの歩き方
SQL Server 2017 Machine Learning Services (CLR-H in TOKYO #13)
Data Scientists Love SQL Server

性能問題を起こしにくい信頼されるクラウド RDB のつくりかた

  • 1. 性能問題を起こしにくい 信頼されるクラウド RDB のつくりかた 太田 智行 #mstsjp18 #DA08 NECソリューションイノベータ株式会社 サポートサービス事業部 データベースプロフェッショナルサービス部 DA08
  • 2. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 自己紹介 太田 智行(おおた ともゆき) これまで:リレーショナルデータベースひと筋15年超 PostgreSQL 8年、 SQL Server 8年、Oracleちょこちょこ、MySQL 甘噛み程度 現在:Data Platform 全般で活動中 WebでSQL Server技術記事をゆるやかに連載中 https://enterprisezine.jp/dbonline/detail/9626 データエンジニアの会 https://data-engineer.connpass.com/ Microsoft MVP for Data Platform(2018.2~) https://mvp.microsoft.com/ja-jp/PublicProfile/5002980?fullName=Tomoyuki%20%20Oota
  • 3. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 4. © 2018 NEC Solution Innovators, Ltd. All rights reserved. IaaS PaaS Microsoft Azure SQL Database SQL Data Warehouse SQL Server on IaaS Managed Instance Single Database Elastic Pool データウェアハウス用途汎用、オンライントランザクション用途 + Other Clouds
  • 5. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 6. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  改善フェーズ ➢ 5.チューニング ➢ 6.リソース拡張 本セッションのスコープ外
  • 7. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  リレーショナルデータベース管理者(DBA) ➢ 初~中級DBA • DB構築時のチェックリストとして ➢ 上級DBA • 頭の中にある過去経験の棚卸として
  • 8. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 構築フェーズ 1.ストレージ構成の最適化
  • 9. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ストレージ ディスク ストレージ コントローラ ストレージ ネットワーク ホストバス アダプタ ストレージ システム 最大性能 バランス 良 ストレージ ディスク ストレージ コントローラ ストレージ ネットワーク ホストバス アダプタ ストレージ システム 最大性能 バランス 悪 CPU CPU
  • 10. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  ディスクを束ねて必要I/O性能を構成する  Azureリソース内のI/O性能 SQL Server on IaaS
  • 11. © 2018 NEC Solution Innovators, Ltd. All rights reserved. Maneged Disk サイズ IOPS スループット MB/s Standard HDD 32GB~32TB 500~2,000 60~500 Standard SSD 128GB~32TB 500~1,300 60~300 Premium SSD 32GB~16TB 120~15,000 25~750 Ultra SSD (preview) 4GB~64TB 1,200~160,000 300~2,000
  • 12. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 0 500 1000 1500 2000 x1 x2 x3 x4 ディスクのストライピング本数 と IOPS実測値 • ディスク ✓ S4(Managed Standard HDD、Max 500 IOPS) ✓ Storage Spaceでストライピング • VM ✓ Standard_D2s_v3 ✓ ホストキャッシュ無し
  • 13. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  Azureリソースそれぞれにスループット上限あり ➢ ① ディスク • ディスク種類とレベルに応じる(ex. Prm SSD P10:500 IOPS, 100 MB/s) ➢ ② ストレージアカウント ※. Unmanaged Diskが対象。Managed Diskはストレージアカウントの制約を受けない • Standard:アカウントあたり 20,000 IOPS • Premium:アカウントあたり 50 Gbps ➢ ③ VM • VMレベルに応じる(ex. Std_DS2_v2:6,400 IOPS, 96 MB/s, 8Disks) ディスク ストレージ アカウント VM システムI/O性能
  • 14. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  ディスクを束ねて必要I/O性能を構成する  Azureリソース内のI/O性能 SQL Database Managed Instance(General Purpose)
  • 15. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  DB作成するとDBファイルごと単一プレミアムディスクが割当たる ➢ データベースファイルごと排他的にスループットが保証される 1.ディスクのチョイスはAzureにおまかせ Azure Storage Managed Instance (General Purpose) ユーザ DB CREATE DATABASE
  • 16. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  割当たるディスクはDBファイルのサイズに応じて自動決定 ➢ 運用によるDBファイルのサイズ変動に応じてディスクレベルも自動調整 1.ディスクのチョイスはAzureにおまかせ データベースファイルのサイズ 割り当たるプレミアムディスク(Premium SSD) (*) ~ 128GB P10(128 GB、500 IOPS、100 MB/s) 128GB ~ 256GB P15(256 GB、1100 IOPS、125 MB/s) 256GB ~ 512GB P20(512 GB、2300 IOPS、150 MB/s) 512GB ~ 1TB P30(1 TB、5000 IOPS、200 MB/s) 1TB ~ 2TB P40(2 TB、7500 IOPS、250 MB/s) 2TB ~ 4TB P50(4 TB、7500 IOPS、250 MB/s) (*) 小さいDBファイルで あってもP10未満が アサインされることは ない
  • 17. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  Gereral PurposeではTEMPDB に限りローカルSSD ➢ Business Critical(preview)は全DBファイルがローカルSSD 1.ディスクのチョイスはAzureにおまかせ TEMPDB Managed Instance (General Purpose) ユーザDB Azure Storage Local SSD
  • 18. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  複数ファイル構成は従来通り SQL Server がストライプI/O ➢ あとから追加だとデータの装填に偏りが生じるので当初のサイジングは大事 • リバランス操作で偏り解消は可能ではあるが。 Azure Storage Managed Instance (General Purpose) ユーザ DB
  • 19. © 2018 NEC Solution Innovators, Ltd. All rights reserved. データベースファイルのサイズ 割り当たるプレミアムディスク(Premium SSD) 128GB ~ 256GB P15(256 GB、1100 IOPS、125 MB/s) DBファイルのサイズとプレミアムディスクのサイズは一致しないため、それぞれに上限設定がある
  • 20. © 2018 NEC Solution Innovators, Ltd. All rights reserved. WITH DatabaseFile AS( SELECT database_id AS DatabaseID, CAST(size * 8. / 1024 / 1024 AS decimal(12,4)) AS FileSizeGB FROM sys.master_files ) SELECT SUM(FileSizeGB) AS FileSizeGB, SUM( IIF( DatabaseID <> 2, CASE WHEN FileSizeGB <= 128 THEN 128 WHEN FileSizeGB > 128 AND FileSizeGB <= 256 THEN 256 WHEN FileSizeGB > 256 AND FileSizeGB <= 512 THEN 512 WHEN FileSizeGB > 512 AND FileSizeGB <= 1024 THEN 1024 WHEN FileSizeGB > 1024 AND FileSizeGB <= 2048 THEN 2048 WHEN FileSizeGB > 2048 AND FileSizeGB <= 4096 THEN 4096 ELSE 8192 END, 0 ) ) AS BlobSizeGB FROM DatabaseFile; Managed Instanceデプロイ時に 指定したサイズ 32GB~8TB が上限 ストレージアカウントに設定 された 35TBが上限
  • 21. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  すべてAzureにおまかせ(DBファイルも意識しない) SQL Database Single Database / Elastic Pool SQL Data Warehouse
  • 22. © 2018 NEC Solution Innovators, Ltd. All rights reserved. Azure IaaS Azure PaaSOn-Premises SQL Server SQL Server on IaaS Managed Instance ネットワーク ストレージ サーバー ホスト OS 仮想化 ゲスト OS SQL Server インスタンス データベース データ ネットワーク ストレージ サーバー ホスト OS 仮想化 ゲスト OS SQL Server インスタンス データベース データ ネットワーク ストレージ サーバー ホスト OS 仮想化 ゲスト OS SQL Server インスタンス データベース データ ネットワーク ストレージ サーバー ホスト OS 仮想化 ゲスト OS SQL Server インスタンス データベース データ Single Database / Elastic Pool SQL Data Warehouse Azure 管理利用者 管理
  • 23. © 2018 NEC Solution Innovators, Ltd. All rights reserved. CREATE DATABASE [DEMO_DB] ON PRIMARY ( NAME=N'DEMO_DB',FILENAME=N'data.mdf') LOG ON ( NAME=N'DEMO_DB_log',FILENAME=N'log.ldf') GO CREATE DATABASE 処理が 足回りを意識する
  • 24. © 2018 NEC Solution Innovators, Ltd. All rights reserved. SELECT 氏名, 年齢, 住所 FROM 社員 WHERE 社員ID = ログインID SELECT売上年度, SUM(売上) FROM 売上明細 GROUP BY 売上年度
  • 25. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 局所的なデータアクセス ✓物理配置の影響は受けにくい など広範囲なデータアクセス ✓欲しいデータが物理的に近接していることが望ましい
  • 26. © 2018 NEC Solution Innovators, Ltd. All rights reserved. コントロールノード ユーザーからの接続 コンピュートとストレージの調整 コンピュートノード クエリ実行 スケールアウト / イン可能 不要なときは停止可能 ストレージノード データ保存 60分散のリモートストレージ DW100 60分散固定 リモートストレージ
  • 27. © 2018 NEC Solution Innovators, Ltd. All rights reserved. コントロールノード ユーザーからの接続 コンピュートとストレージの調整 コンピュートノード クエリ実行 スケールアウト / イン可能 不要なときは停止可能 ストレージノード データ保存 60分散のリモートストレージ DW600 60分散固定 リモートストレージ
  • 28. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  リモートストレージ間のデータ移動は大きな性能ペナルティ ➢ データ移動は主に結合や集計を行うクエリで発生する • 結合する値がこのディストリビューション内に存在しない • 集計がこのディストリビューション内で完結できない
  • 29. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  データ移動なし  データ移動あり コスト 0.00216 BROADCAST_MOVE ( コスト 38400.00216
  • 30. © 2018 NEC Solution Innovators, Ltd. All rights reserved. どのように分散配置するかによって制御 リモートストレージ間のデータ移動は大きな性能ペナルティ
  • 31. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ハッシュ分散 ラウンドロビン分散(既定) レプリケート 分散キーのHush値で分散 ランダム均等分散 全てのストレージへコピー CREATE TABLE (…) WITH DISTRIBUTION=HASH(UserID) CREATE TABLE (…) WITH DISTRIBUTION=ROUND_ROBIN CREATE TABLE (…) WITH DISTRIBUTION = REPLICATE
  • 32. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ハッシュ分散 ラウンドロビン分散(既定) レプリケート 分散キーのHush値で分散 ランダム均等分散 全てのストレージへコピー
  • 33. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ そのためにチョイスするべきキー列 • JOIN, GROUP BY, DISTINCT, HAVING で使用される列 ✓Ex)ともにorder_idで分散したorders表とtransaction表をorder_idで 結合する場合はデータの移動が不要となる ✓注)JOINキーのデータ型は一致していないとダメ • WHERE 句で使われていない列 ✓ Ex)日付型はWhereでよく使われる
  • 34. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ そのためにチョイスするべきキー列 データスキュー状態の場合、並列クエリ実行時の各ディストリビューションの作業量も不均衡となり、 結果として全体の性能が最も処理が遅いディストリビューションの性能に引きずられる。
  • 35. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 36. © 2018 NEC Solution Innovators, Ltd. All rights reserved. HASH([ProductKey]) HASH([ProductKey])
  • 37. © 2018 NEC Solution Innovators, Ltd. All rights reserved. HASH([ProductKey])HASH([ProductKey])
  • 38. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ROUND_ROBINHASH([ProductKey])
  • 39. © 2018 NEC Solution Innovators, Ltd. All rights reserved. HASH([ProductKey])HASH([ProductKey])
  • 40. © 2018 NEC Solution Innovators, Ltd. All rights reserved. HASH([ProductKey]) INT HASH([ProductKey]) BIGINT
  • 41. © 2018 NEC Solution Innovators, Ltd. All rights reserved. HASH([ProductKey]) INT HASH([ProductKey]) BIGINT
  • 42. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 構築フェーズ 2.アクセスパスの最適化
  • 43. © 2018 NEC Solution Innovators, Ltd. All rights reserved. Why テーブルスキャン インデックスシーク + テーブルルックアップ VS 1 3 2 4 6 5 7 9 8 1 2 3 5 4 テーブル インデックス テーブル
  • 44. © 2018 NEC Solution Innovators, Ltd. All rights reserved. Why テーブルスキャン インデックスシーク + テーブルルックアップ VS 1 3 2 4 6 5 7 9 8 1 2 3 9 8 7 6 5 10 4 テーブル インデックス テーブル
  • 45. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  適切なインデックスを定義する  正しくクエリを書く  統計情報の高い鮮度と精度を保つ(詳細は4章で)
  • 46. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  インデックス利用が正解とは限らない。 ➢ 小さいテーブル ➢ 広範囲のスキャン  インデックス構造を踏まえた適切なインデックスを利用する ➢ B-Tree(非クラスタ化、クラスタ化、付加列)、列ストア • ビットマップ、ハッシュ は無し。 1 2 3 9 8 7 6 5 10 4
  • 47. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  インデックスはあればあっただけ良いというものではない ➢ 使われないインデックスは百害あって一利なし。 +システム性能向上 本の目次は 固定だけど。
  • 48. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  作りっぱなしはだめ ➢ 定期メンテナンスが必要(詳細は4章で) インデックスも デフラグ必要
  • 49. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 50. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 注文ID 商品ID 日付 売上 101 52 201801 100 ・・・ ・・・ ・・・ ・・・ 110 23 201812 300 集 計 処 理 101 52 201801 100 ・・・ ・・・ ・・・ ・・・ 110 23 201212 300 バッファプール 101 52 201801 100 ・・・ ・・・ ・・・ ・・・ 110 23 201212 300 集計に不要な列 もI/Oされる 集計に不要な列 もキャッシュされる 注文ID 商品ID 日付 売上 101 52 201801 100 ・・・ ・・・ ・・・ ・・・ 110 23 201812 300 集 計 処 理 100 ・・・ 300 バッファプール 100 ・・・ 300 集計に不要な列 はI/Oされない 行ストア 列ストア 行ストア 列ストア 集計に不要 な列はキャッ シュされない 同じ属性なので 圧縮効果も高い
  • 51. © 2018 NEC Solution Innovators, Ltd. All rights reserved. カラムストア (既定) ヒープ クラスタ化インデックス 非クラスタ化インデックス ✓ 大きなテーブル(パーティショ ン当たりの行数は 100 万 行以上に保つ) ✓ 列単位 I/O、高圧縮率 ✓ ヒープと比較してデータロード は低速 ✓ ロード用ステージングテーブル ✓ 1 億行未満の小さなルック アップ テーブル ✓ 一時テーブル(ローカルスト レージに配置された tempdb)を使うことでさら にロードを高速化 ✓ 極めて少数の行の検索が 優先となるテーブル ✓ 非クラスタ化インデックスは セカンダリインデックスとして 利用可能
  • 52. © 2018 NEC Solution Innovators, Ltd. All rights reserved.  インデックスが使われないかもしれないケース例
  • 53. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 54. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 運用フェーズ 3.パフォーマンスの監視
  • 55. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 可視化 分析&処方 自動対処
  • 56. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning for Azure SQL DB 可視化 分析&処方 自動対処
  • 57. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning for Azure SQL DB 可視化 分析&処方 自動対処
  • 58. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 59. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 60. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 61. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 62. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Perfmon 消 ➢ Activity Monitor 消 ➢ Dara Collector 消 ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning for Azure SQL DB 可視化 分析&処方 自動対処
  • 63. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 64. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 65. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 66. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 67. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 68. © 2018 NEC Solution Innovators, Ltd. All rights reserved. アボートするワーカーが 増えています
  • 69. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ロックウェイトの多発が 性能に影響しています。 下記はロックチェーンの 先頭にいるクエリ一覧 です。
  • 70. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ユーザからの負荷が増大し 積みあがっています。 CPU,IO,LOGの負荷は限 界に達しています
  • 71. © 2018 NEC Solution Innovators, Ltd. All rights reserved. リソース使用率が増加したクエリの数 は3です。その中で最大の原因は最近 データベースに登場した新しいクエリ (0x34CFCB2D40A683FD)です。
  • 72. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 検出された性能問題のパターンは 「ワークロードの増加」
  • 73. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ✓ リソースの上限に到達 ✓ 待機の増加 ✓ ワークロードの増加 ✓ TempDB の競合 ✓ メモリ不足 ✓ エラスティック プールの DTU 不足 ✓ 過剰ロック ✓ プランの変動 ✓ 過剰並列化処理 ✓ データベース スコープの構成値の変更 ✓ ページラッチの競合 ✓ 処理速度が低いクライアント ✓ インデックスの不足 ✓ 価格レベルのダウングレード ✓ 新しいクエリの検出
  • 74. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Perfmon 消 , SQL Trace 消 ➢ Activity Monitor 消 ➢ Dara Collector 消 ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Database Engine Tuning Advisor 消 ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning for Azure SQL DB 可視化 分析&処方 自動対処
  • 75. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 76. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 77. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 78. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 79. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 80. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 81. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 82. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 83. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Perfmon 消 ➢ XEvent, SQL Trace 消 ➢ Activity Monitor 消 ➢ Dara Collector 消 ➢ Query Store 消 ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Database Engine Tuning Advisor 消 ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning 可視化 分析&処方 自動対処
  • 84. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 85. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 86. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 87. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ✓ 接続を監視する ✓ クエリ実行を監視する ✓ 待機クエリを監視する ✓ tempdb を監視する ✓ メモリを監視する ✓ トランザクション ログのサイズを監視する ✓ トランザクション ログのロールバックを監視する 参考)https://docs.microsoft.com/ja-jp/azure/sql-data-warehouse/sql-data-warehouse-manage-monitor
  • 88. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 89. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 90. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 91. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 92. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 93. © 2018 NEC Solution Innovators, Ltd. All rights reserved. ➢ Perfmon 消 , SQL Trace 消 ➢ Activity Monitor 消 ➢ Dara Collector 消 ➢ Azure Monitor ➢ Azure SQL DW Monitor ➢ Database Engine Tuning Advisor 消 ➢ Azure Advisor ➢ Azure VM Perf Diagnostics(preview) ➢ Azure SQL DB Query Perf Insights ➢ Azure SQL DB Intelligent Insights ➢ Automatic Tuning for Azure SQL DB 可視化 分析&処方 自動対処
  • 94. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 95. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 96. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 運用フェーズ 4.メンテナンス
  • 97. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 統計情報の定期メンテナンス  統計情報のメンテナンス挙動把握が大事。 ➢ 作成されるタイミング • Indexが作成された列WHERE句やJOIN句の条件となった列に対し て自動作成(手動作成も可) ➢ 更新されるタイミング • ざっくり目安としてレコード数の20%に相当するレコードが変更さ れたタイミングで自動更新(レコード数増加に応じて20%閾値は自 動調整される)。 統計情報の精度・鮮度は性能に直結
  • 98. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 統計情報の定期メンテナンス 参考:統計情報の自動更新の詳細 ① クエリプラン キャッシュの検索 . ② 関連する統計情報 のロード 成功 ③b 古い統計情報 はあるか Yes No ③a 更新が必要な統計情報すべてを更新 ④ クエリプラン生成とリコンパイル閾値の設定 ⑤ クエリプランのテスト(スキーマチェック) ⑥ スキーマは 有効か Yes ⑦ 新しい統計情報 を使用できるか ⑧ 古い統計情報は あるか ⑨ クエリ 実行 Yes Yes No No ⑩ リコンパイル No 失敗 . S E クエリ 実行開始 クエリ 実行終了
  • 99. © 2018 NEC Solution Innovators, Ltd. All rights reserved. 統計情報の定期メンテナンス 計画的な手動更新が必要となる場合もある 一定のデータ量 手動更新不要 一貫した増加傾向 基本的には自動更新に任せておけばよい 一定間隔の増減反復 バッチ処理のような大量更新を行う場合は手動更新 とセットで実施(初回クエリが犠牲にならないように) データの分布変化 自動更新しきい値未満でもデータ分布に影響を与える 変更を行う場合は手動更新をセットで実施 新しいデータの参照 新しいデータのみ参照したい場合は手動更新をセット で実施
  • 100. © 2018 NEC Solution Innovators, Ltd. All rights reserved. インデックスの定期メンテナンス ✓ データの変更に伴いデータが断片化 ✓ → I/O量やインストラクション増大 ✓ → 性能劣化 性能劣化予防のために定期的にデフラグする キー ポインタ 10 ・・・ 20 ・・・ 30 ・・・ 40 ・・・ 50 ・・・ 60 ・・・ キー ポインタ 10 ・・・ 20 ・・・ 21 ・・・ 30 ・・・ キー ポインタ 40 ・・・ 50 ・・・ 60 ・・・ INSERT キー = 21
  • 101. © 2018 NEC Solution Innovators, Ltd. All rights reserved. インデックスの定期メンテナンス  内部断片化 ➢ ページ内のデータの装填率(密度)を示す ➢ 未使用領域分の余計なI/Oによるアクセス効率低下 • FILLFACTORで装填率をコントロールしているケースも 断片化の種類とその影響 同じデータ量に対して装填率100% と50%ではI/Oページ量が2倍になる装填率 100% 装填率 50% vs
  • 102. © 2018 NEC Solution Innovators, Ltd. All rights reserved. インデックスの定期メンテナンス  外部断片化 ➢ インデックス論理順とファイル内物理順の不一致度合いを示す ➢ データ順が不連続状態になることでのアクセス効率低下 断片化の種類とその影響 10 - 11 index record 11 10 20 index record 12 p n index record 13 p n index record 14 p n index record 15 26 16 index record 16 15 17 index record 17 16 18 index record 18 p n index record 19 p n index record 20 11 23 index record 21 p n index record 22 p n index record 23 20 24 index record 24 23 15 index record 25 p n index record ~ ファイル内の物理番地 → インデックスの論理順 → インデックスAの断片 (大きさ=2) インデックスAの断片 (大きさ=3) インデックスAの断片 (大きさ=1) インデックスAの断片化率 = =37.5% 3(赤線ホップ数) 8(総ページ数) インデックスAの断片 (大きさ=2)
  • 103. © 2018 NEC Solution Innovators, Ltd. All rights reserved. インデックスの定期メンテナンス  B-Treeインデックスの深さ ➢ B-Treeの階層の数を示す ➢ 欲しいデータの番地を得るまでに辿らねばならないインデックス ページが増えることでのアクセス効率低下 断片化の種類とその影響 1階 4階 3階 2階 最上階から1階まで下るコストを 4階建と3階建で比較すると単純計算 で1.3倍強になる(3階までなら階段で 上がってもいいけど4階となると…)。 vs
  • 104. © 2018 NEC Solution Innovators, Ltd. All rights reserved. まとめ
  • 105. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 106. © 2018 NEC Solution Innovators, Ltd. All rights reserved.
  • 107. © 2018 NEC Solution Innovators, Ltd. All rights reserved. S Thank you!
  • 108. Information 「Ask The Speaker」 各ブレイクアウトセッション終了後の休憩時間に、 登壇したスピーカーに直接ご質問いただけるコーナーを B2F 「Ask The Speaker」 Room に用意 しています。セッション内容のより深い理解のため、 ぜひお役立てください。 (※ハンズオンラーニング、シアターセッション、ビジネストラック 及び 一部のセッションを除きます) EXPO AREA 1 EXPO AREA 2 Room B
  • 109. セッションアンケートにご協力ください。 公式イベントアプリで、「Microsoft Tech Summit 2018 参加者アンケート(必須)」と 「各セッションアンケート( 5 つ以上)」、合わせて 6 つ以上のアンケートにご回答ください。 もれなくオリジナルグッズを贈呈いたします。 Information Twitter のご案内 本セッションに関するご質問やご感想は、 #mstsjp18 と セッション ID の ハッシュタグで、ご投稿をお願いします。 #mstsjp18