性能問題を起こしにくい信頼されるクラウド RDB のつくりかた
講演者のスライド
https://www.slideshare.net/Tomoyuki_Oota/rdb-122256139
概要
本セッションは劣化予防(構築、運用)がターゲット
- ストレージ構成
- アクセスパスの最適化
- パフォーマンス監視
- パフォーマンスのメンテナンス
■ ストレージ構成
1. Azure VM
- Azure リソース毎にスループット上限あり
- ディスク、ストレージアカウント、VM
- これらのバランスを取ることが大事
2. Azure ManagedInstance
- DB ごとに単一のプレミアムディスクが割り当てられる。
- DB のファイルサイズによって自動で決まる。
- temp db は localSSD
3. DWH の DataWarehouse
- OLTP…局所的なアクセス
- DWH…広範囲にアクセス ← こっち
物理的にどうデータを配置するかが大事。
60 個のリモートストレージに分散される。(数が固定)
そのためリモートストレージ間でデータ移動を抑えることが大事。
分散ルールが選べる
ラウンドロビンが規定だが、ファクト表もディメンジョン表も可能な限りハッシュ分散に変更するべき
ハッシュ分散のキーの選び方は?
- データ移動を最小化する
- データの不均衡を最小化する
→ この両立は難しいので DMV とか見ながら(詳細は資料参照)
■ アクセスパスの最適化
- 適切なインデックスを定義
- 正しいクエリを書く
- 統計情報の高い鮮度と制度を保つ
目的は性能向上、インデックスを使うことが正解とは限らないし、データ変化によって状況も変わる。
→ 不要なインデックス削除、デフラグなどメンテナンスが必須
DWH には列インデックスが適してる。
OLTP、少数の行の検索にはクラスタ(非クラスタ)インデックスが最適。
インデックスが使われないケース、クエリの一般ガイドラインは資料参照。
■ パフォーマンス監視
1.IaaS VM
基本的にはオンプレと同じツール使える。
- Performance Diagnostics によるパフォーマンス診断(機能の有効かが必要)
2.Managed Instance
- 診断設定から Intelligent Insights を有効化
- ログは LogAnalytics などに出力(可視化用の拡張あり)
→ これ超絶良さげ・・
3.SQL Database
- クエリ実行統計の可視化が規定で ON(Query Performance Insight)
- 実行回数。スロークエリ、リソース消費の推移が見える
- 実行プランはクエリストアに飛んで見える。
4.Data Warehouse
- DMV の詳細を分析する AzureMonitor for Warehouse がある。
■ パフォーマンスのメンテナンス
統計情報のメンテナンスの挙動把握が重要
- インデックス作成、検索条件で使われた等
- 20%に相当するレコードが変更された場合
※手動更新が必要な場合もある。
統計情報の更新フロー初めて見た・・
このセッション結構深い解説もあって良いな・・
インデックスの断片化
Pass だとしてもデータは自分で管理するんだよ!
- 内部断片化(FillFactor で極力防止したり)
- 外部断片化
※B-Tree インデックスの深さにも注意しよう
所感
- モニタリングの機能ありすぎだろ!!(褒めてる)(統一感がないとも言う)
- 登壇者「DB 単体だとデモ映えしない」→ わかりみ w
- Azure のモニタリングのツールは極めたい・・