Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DBA から開発者への情報提供

1,348 views

Published on

ComCamp

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

DBA から開発者への情報提供

  1. 1. DBA から開発者への情報提供 Masayuki Ozawa (@Masayuki_Ozawa)
  2. 2. はじめに 2016/2/20Tokyo ComCamp 2016 powered by MVPs2  本セッションでは、SQL Database を使用して、いくつかのデモをお 見せします。  デモで実施する、特定の状態になったとき、  どのような情報をとれば、問題を解決する足掛かりとなる情報を取得で きるかが判断できる  普段の運用でこれらの状況を解決するための情報が、取得できているか  を、考えてみてください。  不意に質問が飛びますので、ご協力をお願いします。  私がお見せする方法以外にも様々な方法がありますので、違った見方の 意見は大歓迎です。
  3. 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
  4. 4. DBA から開発者への情報提供 2016/2/20Tokyo ComCamp 2016 powered by MVPs4
  5. 5. 処理が遅い 2016/2/20Tokyo ComCamp 2016 powered by MVPs5  様々な原因  アプリケーションの問題?  製品の根本的な問題?  データベースの問題?  ハードウェアリソースの問題?  ネットワークの問題?  問題発生時には誰が調べる?  プログラム / 製品の問題は開発者?  製品の問題 / データベースの問題は保守担当者?  ハードウエア / ネットワーク問題は運用担当者? 問題の解決に向けて各担当が協力  みんなで幸せになろうよ
  6. 6. DB 管理者観点で取得できる情報の一例 2016/2/20Tokyo ComCamp 2016 powered by MVPs6  実行中の情報  クエリ  ロック  キャッシュ (非永続化された情報)  キャッシュされたクエリ / データのキャッシュサイズ / インデックス使用状況  クエリ実行情報 (永続化された情報)  過去に実行されたクエリ / クエリの実行プラン  リソース使用状況  CPU / メモリ / ディスク I/O  複数のサーバーを管理している場合は、一箇所から見れる方法を検討
  7. 7. 環境により取得できる情報の制約もある 2016/2/20Tokyo ComCamp 2016 powered by MVPs7  IaaS  OS にログインできるので、ログインして各種状態/情報を確認  エージェントをインストールして、外部に情報を連携  マネージドサービス  OS にログインすることはできないため、限定された情報の取得  提供されている方法の範囲で情報を取得  API 経由  SQL 経由 → SQL Database の場合は、SQL 経由でほぼ取得できる
  8. 8. SQL Database を例とした情報の取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs8 これからいくつかのケースで 取得できる情報をお見せします このような情報を共有することで みんなで幸せになれるといいな
  9. 9. ケース #1 - 実行が完了しないクエリ - 2016/2/20Tokyo ComCamp 2016 powered by MVPs9
  10. 10. Demo 現象を発生 2016/2/20Tokyo ComCamp 2016 powered by MVPs10
  11. 11. どの情報を取得すればよい? 2016/2/20Tokyo ComCamp 2016 powered by MVPs11  SQL Server における一般的な方法  実行されたクエリ  プロファイラー  実行中のクエリ  利用状況モニター  最後に実行が完了したクエリ  キャッシュ (DMV)
  12. 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 からは「ライブクエリ統計」が取得可能
  13. 13. Demo 実行中のクエリの情報取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs13
  14. 14. ロック競合 2016/2/20Tokyo ComCamp 2016 powered by MVPs14  リソースネックではない論理的な待ち  CPU / ディスク / メモリを増強しても、待ちの解消に対して効果がない可能性が高い  一般的にはコマンドタイムアウトの時間で、クエリの実行がキャンセルされ ることで、ロック競合が自動的に解消されるが、ツールによっては無制限の 可能性も  RCSI / スナップショット分離レベル / NOLOCK / READPASTによる読み取り競合の解消  どのデータを読み取ればよいかの要件に依存  SQL Database は RCSI / スナップショット分離レベルはデフォルト有効  SSMS やサードパーティーツール (ODBC 経由でアクセスする汎用 RDBMS の 管理ツール) 等の操作では、タイムアウトが発生せず、ロックが取得された ままの状態となる可能性がある  長時間のトランザクションの実行 / 編集画面を開いたままにする
  15. 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
  16. 16. Demo ロック競合の取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs16
  17. 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  待ち事象は「処理が完了したタイミング」で集計される
  18. 18. Demo 待ち事象の取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs18
  19. 19. ケース 2 - クエリ実行に失敗 - 2016/2/20Tokyo ComCamp 2016 powered by MVPs19
  20. 20. Demo 現象を発生 2016/2/20Tokyo ComCamp 2016 powered by MVPs20
  21. 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. 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
  23. 23. Demo リソースの使用状況の取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs23
  24. 24. ケース 3 - 実行されたクエリ - 2016/2/20Tokyo ComCamp 2016 powered by MVPs24
  25. 25. Demo 現象を発生 2016/2/20Tokyo ComCamp 2016 powered by MVPs25
  26. 26. クエリストア 2016/2/20Tokyo ComCamp 2016 powered by MVPs26  クエリコンパイル時の実行プランと実行統計情報を自動的に取得し保 存する  特定時点で使用されている実行プランを確認することができる。 SQL コンパイル 実行 プランストア 実行統計 クエリストア スキーマ クエリストア コンパイル メッセージ 実行 メッセージ 非同期 書き込み
  27. 27. キャッシュとクエリストアの違い 2016/2/20Tokyo ComCamp 2016 powered by MVPs27  キャッシュ  メモリ上に保存されている最新のクエリ情報  再起動をするとキャッシュがクリアされる  プランキャッシュが枯渇してくると、クエリの情報がキャッシュアウトされる  最後の実行プランの情報がキャッシュされている  クエリストア  データベース内の保存されているクエリ実行情報  データベース内のテーブルに永続化された情報を保持  クエリストアで使用するサイズと保存する期間を設定  特定のクエリの実行プランの変遷を確認することができる
  28. 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. 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. 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
  31. 31. Demo 実行されたクエリの取得 2016/2/20Tokyo ComCamp 2016 powered by MVPs31
  32. 32. まとめ 2016/2/20Tokyo ComCamp 2016 powered by MVPs32  DB について、以下を意識した情報がみんなで共有できると幸せになれるかも  情報が格納される場所  キャッシュ / 外部データ  情報を取得すればよいタイミング  実行中 / 実行後  情報取得のタクト  最新 / 集計データ / 履歴  情報の確認方法  GUI / クエリ実行 / 通知

×