Upgrade to Pro — share decks privately, control downloads, hide ads and more …

トラブルの原因特定率を劇的に向上させるSQL Serverロギングの仕組み作り / sql-server-logging-for-troubleshooting

p2sk
December 01, 2021

トラブルの原因特定率を劇的に向上させるSQL Serverロギングの仕組み作り / sql-server-logging-for-troubleshooting

SQL Serverにおいて詳細な後追い調査を実施するために整理しておくと良い情報収集の仕組みをご紹介します。

p2sk

December 01, 2021
Tweet

More Decks by p2sk

Other Decks in Technology

Transcript

  1. © ZOZO, Inc. 株式会社ZOZO
 技術本部 技術戦略部 アーキテクトブロック
 テックリード 廣瀬 真輝


    • 2013年に新卒で入社し9年目
 • データベース領域における社内の標準化や仕組み作り
 • SQL Serverに関するプロダクト横断での課題解決
 • Microsoft MVP for Data Platform(2020~)
 2
  2. © ZOZO, Inc. 原因を特定して具体的なアクションに繋げる
 9 • とり得るアクションは多岐にわたる
 ◦ クエリチューニング
 ◦

    インデックス作成
 ◦ 定期的な統計情報の更新
 ◦ トランザクション分離レベルの変更
 ◦ システムテーブルの不要データ削除
 ◦ アーキテクチャの再考
 ◦ etc.
 • 課題を解決するアクションをとるために原因特定が重要
 • 原因特定率を向上させるためにはSQL Serverのロギングを
 充実させることが重要
 

  3. © ZOZO, Inc. ここまでのまとめ
 • SQL Serverの障害対応では
 ◦ CPU使用率などの数値メトリクス
 ◦

    実行中のクエリリストなどのログ情報
 の2種類の情報を組み合わせることで原因を特定して
 具体的なアクションへと繋げることができる
 
 • ロギング機能のある監視製品もあるが
 ◦ Webサービスにフィットする短いロギングのインターバル
 ◦ 柔軟な取得情報の拡充
 という2点を実現するためにロギングの仕組みを内製化した
 
 
 13
  4. © ZOZO, Inc. 17 SQL Server障害調査フロー
 • 監視製品 or パフォーマンスモニタ

    
 
 
 • ロギングの仕組み
 ◦ 拡張イベント
 ◦ DMV(動的管理ビュー)
 の2つを元データとして使用

  5. © ZOZO, Inc. DMVを元にしたログ
 • DMV(Dynamic Management View / 動的管理ビュー)


    ◦ SQL Serverの状態情報が格納されたView
 ◦ 2016で約240種類 / 2019で約280種類
 • スコープが2種類
 ◦ サーバースコープ(=どのDBでSELECTしても結果が同じ)
 ◦ DBスコープ(=各DBによってSELECTの結果が変わる)
 • 内部状態を管理しているViewなので、SELECTしか実行できない
 ◦ 更新はSQL Server内部で自動的に行われる
 • SELECTするときは、スキーマ名(sys)をつける
 ◦ 例:SELECT * FROM sys.dm_os_wait_stats
 18
  6. © ZOZO, Inc. DMVクエリの制約
 • 取得できる情報はあくまで「現在の情報」
 ◦ 過去に遡った分析はできない
 ◦ 「08/01

    22:00時点で1秒間実行中だったクエリ」は分からない
 • DMVクエリごとに専用のテーブルを作成
 ◦ 1分間隔など定期的に実行結果をINSERT
 ◦ 特定日時のDBの状態を後追いできるようになる
 20
  7. © ZOZO, Inc. 拡張イベントを元にしたログ
 • 拡張イベント
 ◦ SQL Serverに関する様々なイベントの発生を収集できる機能
 ◦

    ログイン / リコンパイル / クエリの中断 / ブロッキングの発生 etc.
 • ブロッキングの検出に拡張イベントを使用
 ◦ ブロッキングイベントはxmlフォーマットで保存
 ◦ xmlをパースすることでクエリベースでの解析も可能
 ◦ イベント数が多い環境下ではクエリ実行に数分以上かかることも
 • DMVのロギングと同様に専用のテーブルを作成
 ◦ xmlをパースしたクエリ実行結果を定期的に保存
 ◦ クエリの実行時間が劇的に短縮化され調査スピードが向上
 21
  8. © ZOZO, Inc. 工夫した点①:情報ごとに適切な取得間隔を設定
 • DBのデータサイズ
 ◦ 1日ごとの推移が確認できればOK
 • ブロッキングイベント


    ◦ パースクエリは実行時間が長くなるため、1時間に1回まとめてデータ保存
 • 現在実行中のクエリ
 ◦ OLTPワークロードの後追い用に5秒間隔
 ◦ バッチ処理の後追い用に1分間隔でそれぞれ取得
 
 • 適切な間隔でロギング → 欲しい情報を取得できる確率が向上
 25
  9. © ZOZO, Inc. 工夫した点②:解析の精度向上
 • BEFORE:2点間の差分で計算
 ◦ ある程度の精度はでる
 ▪ Snapshot①と②の間隔が数分など短い場合


    ▪ メモリに余裕がありほぼキャッシュアウトされない環境
 
 ◦ 精度低下の懸念があるケースも
 ▪ 1時間や1日単位でボトルネック調査をしたい場合
 ▪ 頻繁にキャッシュアウトされる環境
 • Snapshotタイミングの間でキャッシュインとキャッシュアウトが発生(A)
 • Snapshot②を取得する前にキャッシュアウトされる(B)
 27 A B
  10. © ZOZO, Inc. オーバーヘッド
 • DMVを使った定期的なクエリ実行も拡張イベントの取得も
 オーバーヘッドはかかる
 ◦ 弊社では許容できる範囲内と判断
 ◦

    環境ごとに状況は異なるため、パフォーマンスへの影響は要確認
 • 推奨の適用順序
  1.パフォーマンスカウンタを収集してパフォーマンスのベースラインを設定
  2.DMVクエリや拡張イベントを順次有効化
  3.有効化前後でCPU、メモリ、I/Oなどのリソース変化を確認し、
    オーバーヘッドが許容できるかを判断
  
  SQL Server:Batch Resp Statisticsを使って実行時間とCPUに関する
  クエリ分布の変化を確認するのも有効
 29
  11. © ZOZO, Inc. クエリストアとの使い分け
 • クエリストア(2016以降)で以下のような調査が可能
 ◦ クエリプランの後退が発生しているクエリの特定とプランの修正
 ◦ CPUや実行時間、I/Oなどリソース消費量の多いクエリの特定


    ▪ クエリストアで取得可能な情報についてはクエリストア使用したほうが簡単かつ高精度
 
 • 内製ロギングの情報を使用するシナリオ
 ◦ クエリストアの設定値よりも短い時間枠で調査したい
 ▪ クエリストア:15分や30分などの時間枠を設定することが多い
 ▪ 「特定の5分間で最もCPUを消費したクエリを特定したい」→ 内製ロギングが役立つ可能性
 ◦ クエリストアでは取得されない情報を確認したい
 ▪ 各インデックスごとのseek、scan、lookup回数など
 30
  12. © ZOZO, Inc. 本セッションのまとめ
 • SQL Serverに関連したトラブル調査を後追いで実施するための
 情報収集の仕組みについて説明
 ◦ この仕組みでSQL

    Server起因のトラブルの原因特定率が劇的に向上
 • 使用しているロギング用のクエリをOSSとしてGitHubに公開中
 36
  13. © ZOZO, Inc. https://zozo.jp/
 38 • ファッション通販サイト
 • 1,500以上のショップ、8,400以上のブランドの取り扱い
 •

    常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商 品を掲載(2021年9月末時点)
 • ブランド古着のファッションゾーン「ZOZOUSED」や
 コスメ専門モール「ZOZOCOSME」、靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など

  14. © ZOZO, Inc. https://wear.jp/
 39 • ファッションコーディネートアプリ
 • 1,500万ダウンロード突破、コーディネート投稿総数は1,100万件以上 (2021年9月末時点)


    • ピックアップタグから最新のトレンドをチェック
 • コーディネート着用アイテムをブランド公式サイトで購入可能
 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加

  15. © ZOZO, Inc. 40 https://zozo.jp/multisize/
 
 • ZOZOSUITで得た100万件以上の体型データを活用することで実現した、 身長と体重を選択するだけで理想のサイズが購入できる新しい洋服の買 い方


    • 2019年秋冬アイテムから、ブランドと協働でマルチサイズ(MS)展開したア イテムをZOZOTOWN上で販売開始
 
 【参加ブランド】
 Audrey and John Wad、Casper John、CIAOPANIC、FREAK’S STORE、FREE’S MART、GALLARDAGALANTE、 KASHIYAMA、Levi’s、LOWRYS FARM、nano・universe、NATURAL BEAUTY BASIC、Ungrid、w closet 等

  16. © ZOZO, Inc. 42 https://fbz.zozo.com/
 
 • ZOZOTOWN出店企業の自社ECのフルフィルメント支援サービス
 • 自社EC運営のための撮影・採寸・梱包・配送などの各種フルフィルメント業務

    を、ZOZOTOWNの物流センター「ZOZOBASE」が受託
 • 設備投資・人件費・在庫保管料などの負担なしで、自社ECの運営が可能
 • 各販売チャネル(自社EC・店舗・ZOZOTOWN)の在庫連携が可能。
 これにより、商品欠品による販売機会の損失を最小化