More Related Content Similar to DBA から開発者への情報提供
Similar to DBA から開発者への情報提供 (20) More from Masayuki Ozawa (8) DBA から開発者への情報提供2. はじめに
2016/2/20Tokyo ComCamp 2016 powered by MVPs2
本セッションでは、SQL Database を使用して、いくつかのデモをお
見せします。
デモで実施する、特定の状態になったとき、
どのような情報をとれば、問題を解決する足掛かりとなる情報を取得で
きるかが判断できる
普段の運用でこれらの状況を解決するための情報が、取得できているか
を、考えてみてください。
不意に質問が飛びますので、ご協力をお願いします。
私がお見せする方法以外にも様々な方法がありますので、違った見方の
意見は大歓迎です。
3. 自己紹介
2016/2/20Tokyo ComCamp 2016 powered by MVPs3
フリーランスのエンジニアとして、SQL Server の技術支援を主に従事
SQL Server でご協力できることがありましたらお声がけいただけると幸いです
「ムッシュ 金麦」で検索すると、足跡がいろいろ出てきます
Microsoft MVP for Data Platform (July 2011 – June 2016)
SE の雑記 (ブログ): http://blog.engineer-memo.com
Twitter : @Masayuki_Ozawa
Facebook : masayuki.ozawa
GitHub : https://github.com/MasayukiOzawa
5. 処理が遅い
2016/2/20Tokyo ComCamp 2016 powered by MVPs5
様々な原因
アプリケーションの問題?
製品の根本的な問題?
データベースの問題?
ハードウェアリソースの問題?
ネットワークの問題?
問題発生時には誰が調べる?
プログラム / 製品の問題は開発者?
製品の問題 / データベースの問題は保守担当者?
ハードウエア / ネットワーク問題は運用担当者?
問題の解決に向けて各担当が協力
みんなで幸せになろうよ
6. DB 管理者観点で取得できる情報の一例
2016/2/20Tokyo ComCamp 2016 powered by MVPs6
実行中の情報
クエリ
ロック
キャッシュ (非永続化された情報)
キャッシュされたクエリ / データのキャッシュサイズ / インデックス使用状況
クエリ実行情報 (永続化された情報)
過去に実行されたクエリ / クエリの実行プラン
リソース使用状況
CPU / メモリ / ディスク I/O
複数のサーバーを管理している場合は、一箇所から見れる方法を検討
7. 環境により取得できる情報の制約もある
2016/2/20Tokyo ComCamp 2016 powered by MVPs7
IaaS
OS にログインできるので、ログインして各種状態/情報を確認
エージェントをインストールして、外部に情報を連携
マネージドサービス
OS にログインすることはできないため、限定された情報の取得
提供されている方法の範囲で情報を取得
API 経由
SQL 経由
→ SQL Database の場合は、SQL 経由でほぼ取得できる
12. 今回のケースは「実行"中"」のクエリの情報を取得
2016/2/20Tokyo ComCamp 2016 powered by MVPs12
どのようなクエリが実行されているかの情報を取得
sys.dm_exec_requests (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms177648(v=sql.120).aspx
経過時間
待機理由
ブロッキング (ロック競合) セッション
SQL Database v12 は SQL Server 2012 SP3 / SQL Server 2016 CTP 3 相当の情報を取得す
ることが可能
Core SQL engine upgraded to SQL 2016
「PASS Summit 2015 : AD-214-M Azure SQL Database Investments and Roadmap」 より
Improved memory grant diagnostics when you use DMV in SQL Server 2012
https://support.microsoft.com/en-us/kb/3107398
SQL Database では利用状況モニターが使えないのでクエリでの確認を検討
sp_who / sp_who2 の利用
SQL Server 2016 の SSMS からは「ライブクエリ統計」が取得可能
14. ロック競合
2016/2/20Tokyo ComCamp 2016 powered by MVPs14
リソースネックではない論理的な待ち
CPU / ディスク / メモリを増強しても、待ちの解消に対して効果がない可能性が高い
一般的にはコマンドタイムアウトの時間で、クエリの実行がキャンセルされ
ることで、ロック競合が自動的に解消されるが、ツールによっては無制限の
可能性も
RCSI / スナップショット分離レベル / NOLOCK / READPASTによる読み取り競合の解消
どのデータを読み取ればよいかの要件に依存
SQL Database は RCSI / スナップショット分離レベルはデフォルト有効
SSMS やサードパーティーツール (ODBC 経由でアクセスする汎用 RDBMS の
管理ツール) 等の操作では、タイムアウトが発生せず、ロックが取得された
ままの状態となる可能性がある
長時間のトランザクションの実行 / 編集画面を開いたままにする
15. 参考) デッドロックの情報
2016/2/20Tokyo ComCamp 2016 powered by MVPs15
以前の SQL Database では、sys.event_log から取得できていたが、SQL
Database v12 では、取得できなくっている。
sys.fn_xe_telemetry_blob_target_read_file から取得できる
Checking deadlocks in Azure SQL V12
https://social.msdn.microsoft.com/Forums/en-US/5426573e-29f6-4403-
a9d9-40c9ac56ba0e/checking-deadlocks-in-azure-sql-
v12?forum=ssdsgetstarted
17. 全体の傾向として何起因の待ちが多い?
2016/2/20Tokyo ComCamp 2016 powered by MVPs17
ロック競合は「待ち事象」の一つ
待ち事象には様々な理由がある
ディスクからデータを読み込む待ち
CPU の使用権を確保するための待ち
ネットワーク転送の待ち
DMV から取得可能
sys.dm_db_wait_stats (Windows Azure SQL データベース)
https://msdn.microsoft.com/ja-jp/library/dn269834(v=sql.120).aspx
待ち事象は「処理が完了したタイミング」で集計される
21. DTU (Database Throughput Unit)
2016/2/20Tokyo ComCamp 2016 powered by MVPs21
SQL Database の性能はパフォーマンスレベル (価格帯)に応じて変わる
使用できるリソースの上限 / リストア粒度が変わってくる
CPU / メモリ / 接続数 / ディスク性能 / In-Memory OLTP ストレージ (Premium)
Basic / Standard と Premium では基本ディスク性能が異なる
SQL Database options and performance: Understand what's available in each service tier より抜粋
https://azure.microsoft.com/en-us/documentation/articles/sql-database-service-tiers/
22. リソースの使用状況
2016/2/20Tokyo ComCamp 2016 powered by MVPs22
sys.resource_stats
サーバーレベルで、5 分単位 / 約 14 日間保持
https://msdn.microsoft.com/en-us/library/dn269979.aspx
SKU / ストレージ / CPU / データ I/O / ログ書き込み
去年末ぐらいに増えました
ワーカー / セッション / DTU リミット
sys.dm_db_resource_stats
データベースレベルで、15 秒間隔 / 約 1 時間保持
CPU / データ I/O/ ログ書き込み / メモリ使用量
去年末ぐらいに増えました
In-Memory OLTP ストレージ / ワーカー / セッション / DTU リミット
sys.event_log
接続のトラブルシューティング / スロットル等のイベント
https://msdn.microsoft.com/en-us/library/dn270018.aspx
sys.database_connection_stats
接続についての概要情報
https://msdn.microsoft.com/en-us/library/dn269986.aspx
26. クエリストア
2016/2/20Tokyo ComCamp 2016 powered by MVPs26
クエリコンパイル時の実行プランと実行統計情報を自動的に取得し保
存する
特定時点で使用されている実行プランを確認することができる。
SQL
コンパイル
実行
プランストア
実行統計
クエリストア
スキーマ
クエリストア
コンパイル
メッセージ
実行
メッセージ
非同期
書き込み
27. キャッシュとクエリストアの違い
2016/2/20Tokyo ComCamp 2016 powered by MVPs27
キャッシュ
メモリ上に保存されている最新のクエリ情報
再起動をするとキャッシュがクリアされる
プランキャッシュが枯渇してくると、クエリの情報がキャッシュアウトされる
最後の実行プランの情報がキャッシュされている
クエリストア
データベース内の保存されているクエリ実行情報
データベース内のテーブルに永続化された情報を保持
クエリストアで使用するサイズと保存する期間を設定
特定のクエリの実行プランの変遷を確認することができる
28. クエリストアの確認方法
2016/2/20Tokyo ComCamp 2016 powered by MVPs28
Query Performance Insight
内部的にはクエリストアの情報を使用している
ポータルから確認することができる機能
SQL Server Management Studio
SQL Server 2016 の Management Studio で確認可能
クエリストアの情報を GUI で確認可能
クエリから確認
Query Store Catalog Views (Transact-SQL)
https://msdn.microsoft.com/en-us/library/dn818149.aspx
29. 拡張イベント (プレビュー)
2016/2/20Tokyo ComCamp 2016 powered by MVPs29
拡張イベントを使用してクエリ実行のトレースを取得
SQL Server プロファイラーの代わりとしての利用も検討
Azure ストレージにログファイルを出力可能
attention
blocked_process_report
database_xml_deadlock_report
error_reported
exchange_spill
execution_warning
existing_connection
full_text_crawl_started
fulltextlog_written
hash_spill_details
hash_warning
lock_acquired
lock_deadlock
lock_deadlock_chain
login
logout
missing_column_statistics
missing_join_predicate
module_end
object_altered
object_created
object_deleted
optimizer_timeout
plan_affecting_convert
progress_report_online_index_opera
tion
query_execution_dynamic_push_do
wn_statistics
query_optimizer_memory_gateway
query_post_compilation_showplan
query_post_execution_showplan
query_pre_execution_showplan
rpc_completed
rpc_starting
session_context_statistics
sort_warning
sp_statement_completed
sp_statement_starting
sql_batch_completed
sql_batch_starting
sql_statement_completed
sql_statement_recompile
sql_statement_starting
sql_transaction
unmatched_filtered_indexes
user_event
wait_info
wait_info_external
worker_wait_stats
xml_deadlock_report
30. そのほかに
2016/2/20Tokyo ComCamp 2016 powered by MVPs30
欠落していると想定されるインデックス情報の取得
インデックスアドバイザー
1 週間程度のアクティビティから、効果があると思われるインデックスをアドバイス
動的管理ビュー (キャッシュ)
実行プランでインデックスが不足しているとアドバイスされたものを確認
sys.dm_db_missing_index_details (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms345434(v=sql.120).aspx
sys.dm_db_missing_index_groups (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms345407(v=sql.120).aspx
sys.dm_db_missing_index_group_stats (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms345421(v=sql.120).aspx
32. まとめ
2016/2/20Tokyo ComCamp 2016 powered by MVPs32
DB について、以下を意識した情報がみんなで共有できると幸せになれるかも
情報が格納される場所
キャッシュ / 外部データ
情報を取得すればよいタイミング
実行中 / 実行後
情報取得のタクト
最新 / 集計データ / 履歴
情報の確認方法
GUI / クエリ実行 / 通知