Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
トラブルの原因特定率を劇的に向上させるSQL Serverロギングの仕組み作り / sql-s...
Search
p2sk
December 01, 2021
Technology
0
190
トラブルの原因特定率を劇的に向上させるSQL Serverロギングの仕組み作り / sql-server-logging-for-troubleshooting
SQL Serverにおいて詳細な後追い調査を実施するために整理しておくと良い情報収集の仕組みをご紹介します。
p2sk
December 01, 2021
Tweet
Share
More Decks by p2sk
See All by p2sk
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
1
230
SQL ServerPerformance TuningEssentials
masakihirose
0
110
KINTO テクノロジーズでの DBRE 活動のご紹介
masakihirose
0
1.4k
データベースの秘密情報取扱いガイドラインに関する取り組みとSQL Serverでの実装例についてのご紹介 / confidential-information-guidelines-and-sqlserver-implementation
masakihirose
0
180
ZOZOTOWNで最大級のトラフィックを記録する福袋発売イベントで実施した負荷対策と、当日の監視体制について / sqlserver-luckybag
masakihirose
0
79
Other Decks in Technology
See All in Technology
MasterMemory v3 最速確認会
yucchiy
0
340
「完全に理解したTalk」完全に理解した
segavvy
1
280
20241125 - AI 繪圖實戰魔法工作坊 @ 實踐大學
dpys
1
450
Evolving Architecture
rainerhahnekamp
3
240
【令和最新版】ロボットシミュレータ Genesis x ROS 2で始める快適AIロボット開発
hakuturu583
2
1.5k
今年一年で頑張ること / What I will do my best this year
pauli
1
190
OPENLOGI Company Profile for engineer
hr01
1
18k
知っててうれしい SQL について
greendrop
0
110
いまからでも遅くないコンテナ座学
nomu
0
210
AWSの生成AIサービス Amazon Bedrock入門!(2025年1月版)
minorun365
PRO
7
410
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
54k
ネットワーク可視化の世界
likr
7
5.7k
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
74
9.2k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
The Invisible Side of Design
smashingmag
299
50k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
How to train your dragon (web standard)
notwaldorf
89
5.8k
Automating Front-end Workflow
addyosmani
1366
200k
Thoughts on Productivity
jonyablonski
68
4.4k
Transcript
トラブルの原因特定率を劇的に向上させる SQL Serverロギングの仕組み作り 株式会社ZOZO 技術本部 技術戦略部 アーキテクトブロック テックリード Microsoft MVP
for Data Platform 廣瀬 真輝 Copyright © ZOZO, Inc.
© ZOZO, Inc. 株式会社ZOZO 技術本部 技術戦略部 アーキテクトブロック テックリード 廣瀬 真輝
• 2013年に新卒で入社し9年目 • データベース領域における社内の標準化や仕組み作り • SQL Serverに関するプロダクト横断での課題解決 • Microsoft MVP for Data Platform(2020~) 2
© ZOZO, Inc. 本セッションへの質問や感想をお待ちしています #dbts2021 3
© ZOZO, Inc. 背景 4
© ZOZO, Inc. 背景 • 数値ベースのメトリクス:監視製品の導入で容易に可視化 ◦ CPU使用率 ◦ Disk負荷
◦ ワーカースレッド数 ◦ etc. 5
© ZOZO, Inc. 数値ベースのメトリクスから分かること 6 • クエリタイムアウト多発などの障害時に ◦ 「CPU使用率が100%付近で推移していた」 ◦
「ワークスペースメモリの獲得待ちが多く発生していた」 などの事象を確認可能
© ZOZO, Inc. 問題:どのクエリが原因でCPU高負荷になったのか • 異常値を示すサーバーメトリクスを見つけることができても クエリレベルでの原因特定には至らない ◦ したがって、他の情報も組み合わせて保存する必要性がある 7
© ZOZO, Inc. 例:CPU高負荷問題を解決したい • CPU高負荷な時間帯の ◦ 実行中だったクエリのリスト ◦ 各クエリの実行回数やCPU使用時間
が分かれば、クエリレベルでの根本原因の特定が可能 8
© ZOZO, Inc. 原因を特定して具体的なアクションに繋げる 9 • とり得るアクションは多岐にわたる ◦ クエリチューニング ◦
インデックス作成 ◦ 定期的な統計情報の更新 ◦ トランザクション分離レベルの変更 ◦ システムテーブルの不要データ削除 ◦ アーキテクチャの再考 ◦ etc. • 課題を解決するアクションをとるために原因特定が重要 • 原因特定率を向上させるためにはSQL Serverのロギングを 充実させることが重要
© ZOZO, Inc. ロギング機能を備えた監視製品の例 • Quest社の「Spotlight」 ◦ 「現在実行中のクエリ」を約1分間ごとに保存してUI上で後追い可能 ◦ 様々なメトリクスやレポートも確認でき便利な製品
◦ もの足りない点もある 10
© ZOZO, Inc. 1.最短1分というインターバルが長い • OLTPワークロードメインのWebサービス ◦ クエリタイムアウト時間は数秒~数十秒 ◦ 例:5秒でタイムアウトするWebサービスの実行中クエリを1分ごとにロギング
▪ クエリの情報がログに保存される可能性は低い ▪ タイムアウトした原因を後追いできる可能性も低い 11
© ZOZO, Inc. 2.取得したい情報を拡充できない • テーブルの統計情報の更新日時を後追いしたい場合 ◦ Spotlightでは調査できない ◦ 原因調査ではこの情報が重要な手がかりになることもある
• ロギングの仕組みを内製すれば簡単に取得情報の拡充が可能 12
© ZOZO, Inc. ここまでのまとめ • SQL Serverの障害対応では ◦ CPU使用率などの数値メトリクス ◦
実行中のクエリリストなどのログ情報 の2種類の情報を組み合わせることで原因を特定して 具体的なアクションへと繋げることができる • ロギング機能のある監視製品もあるが ◦ Webサービスにフィットする短いロギングのインターバル ◦ 柔軟な取得情報の拡充 という2点を実現するためにロギングの仕組みを内製化した 13
© ZOZO, Inc. 本セッションのゴール • SQL Serverに関連したトラブル調査を後追いで実施するための 情報収集の仕組みを理解できる • 実装のイメージがわく
14
© ZOZO, Inc. ロギングの仕組みづくり 15
© ZOZO, Inc. 16 SQL Server障害調査フロー
© ZOZO, Inc. 17 SQL Server障害調査フロー • 監視製品 or パフォーマンスモニタ
• ロギングの仕組み ◦ 拡張イベント ◦ DMV(動的管理ビュー) の2つを元データとして使用
© 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
© ZOZO, Inc. DMVクエリデモ:1秒以上実行中のクエリリスト 19
© ZOZO, Inc. DMVクエリの制約 • 取得できる情報はあくまで「現在の情報」 ◦ 過去に遡った分析はできない ◦ 「08/01
22:00時点で1秒間実行中だったクエリ」は分からない • DMVクエリごとに専用のテーブルを作成 ◦ 1分間隔など定期的に実行結果をINSERT ◦ 特定日時のDBの状態を後追いできるようになる 20
© ZOZO, Inc. 拡張イベントを元にしたログ • 拡張イベント ◦ SQL Serverに関する様々なイベントの発生を収集できる機能 ◦
ログイン / リコンパイル / クエリの中断 / ブロッキングの発生 etc. • ブロッキングの検出に拡張イベントを使用 ◦ ブロッキングイベントはxmlフォーマットで保存 ◦ xmlをパースすることでクエリベースでの解析も可能 ◦ イベント数が多い環境下ではクエリ実行に数分以上かかることも • DMVのロギングと同様に専用のテーブルを作成 ◦ xmlをパースしたクエリ実行結果を定期的に保存 ◦ クエリの実行時間が劇的に短縮化され調査スピードが向上 21
© ZOZO, Inc. 拡張イベントデモ 22
© ZOZO, Inc. ロギング用クエリのご紹介 23
© ZOZO, Inc. GitHubでMITライセンスでクエリを公開中 • https://github.com/masaki-hirose/SQLServer-Info/tree/master/sqlserver_logging 24
© ZOZO, Inc. 工夫した点①:情報ごとに適切な取得間隔を設定 • DBのデータサイズ ◦ 1日ごとの推移が確認できればOK • ブロッキングイベント
◦ パースクエリは実行時間が長くなるため、1時間に1回まとめてデータ保存 • 現在実行中のクエリ ◦ OLTPワークロードの後追い用に5秒間隔 ◦ バッチ処理の後追い用に1分間隔でそれぞれ取得 • 適切な間隔でロギング → 欲しい情報を取得できる確率が向上 25
© ZOZO, Inc. 工夫した点②:解析の精度向上 • BEFORE:2点間の差分で計算 26
© ZOZO, Inc. 工夫した点②:解析の精度向上 • BEFORE:2点間の差分で計算 ◦ ある程度の精度はでる ▪ Snapshot①と②の間隔が数分など短い場合
▪ メモリに余裕がありほぼキャッシュアウトされない環境 ◦ 精度低下の懸念があるケースも ▪ 1時間や1日単位でボトルネック調査をしたい場合 ▪ 頻繁にキャッシュアウトされる環境 • Snapshotタイミングの間でキャッシュインとキャッシュアウトが発生(A) • Snapshot②を取得する前にキャッシュアウトされる(B) 27 A B
© ZOZO, Inc. 工夫した点②:解析の精度向上 • AFTER:抽出期間に存在する全てのSnapshotを利用 28
© ZOZO, Inc. オーバーヘッド • DMVを使った定期的なクエリ実行も拡張イベントの取得も オーバーヘッドはかかる ◦ 弊社では許容できる範囲内と判断 ◦
環境ごとに状況は異なるため、パフォーマンスへの影響は要確認 • 推奨の適用順序 1.パフォーマンスカウンタを収集してパフォーマンスのベースラインを設定 2.DMVクエリや拡張イベントを順次有効化 3.有効化前後でCPU、メモリ、I/Oなどのリソース変化を確認し、 オーバーヘッドが許容できるかを判断 SQL Server:Batch Resp Statisticsを使って実行時間とCPUに関する クエリ分布の変化を確認するのも有効 29
© ZOZO, Inc. クエリストアとの使い分け • クエリストア(2016以降)で以下のような調査が可能 ◦ クエリプランの後退が発生しているクエリの特定とプランの修正 ◦ CPUや実行時間、I/Oなどリソース消費量の多いクエリの特定
▪ クエリストアで取得可能な情報についてはクエリストア使用したほうが簡単かつ高精度 • 内製ロギングの情報を使用するシナリオ ◦ クエリストアの設定値よりも短い時間枠で調査したい ▪ クエリストア:15分や30分などの時間枠を設定することが多い ▪ 「特定の5分間で最もCPUを消費したクエリを特定したい」→ 内製ロギングが役立つ可能性 ◦ クエリストアでは取得されない情報を確認したい ▪ 各インデックスごとのseek、scan、lookup回数など 30
© ZOZO, Inc. ロギングする情報の継続的な拡充 • 様々な情報を収集しているが、原因特定できないケースもある ◦ 「どんな情報があれば原因を後追いできたか?」という疑問を出発点にして 取得する情報を拡充 ◦
ログを使った調査と取得情報の拡充というサイクルを回し続けることで 原因特定に至る確率が向上 31
© ZOZO, Inc. 今後の展望 32
© ZOZO, Inc. 仕組みの改善 • 現在抱えている課題:各DBに直接ログを保存しているので ◦ ロギングの仕組みの修正コストが高い ◦ ログ容量を気にする必要がある
◦ 多少の負荷増につながっている • ログの収集基盤を別途構築して解決したい 33
© ZOZO, Inc. より使いやすいログ解析の仕組みの提供 • DMVに馴染みのない開発者でも後追いできるように ◦ より分かりやすいテーブル名に ◦ 最小限のカラムに限定
◦ ドキュメントの整理 を進めていきたい 34
© ZOZO, Inc. まとめ 35
© ZOZO, Inc. 本セッションのまとめ • SQL Serverに関連したトラブル調査を後追いで実施するための 情報収集の仕組みについて説明 ◦ この仕組みでSQL
Server起因のトラブルの原因特定率が劇的に向上 • 使用しているロギング用のクエリをOSSとしてGitHubに公開中 36
© ZOZO, Inc. サービス紹介 37
© ZOZO, Inc. https://zozo.jp/ 38 • ファッション通販サイト • 1,500以上のショップ、8,400以上のブランドの取り扱い •
常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商 品を掲載(2021年9月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など
© ZOZO, Inc. https://wear.jp/ 39 • ファッションコーディネートアプリ • 1,500万ダウンロード突破、コーディネート投稿総数は1,100万件以上 (2021年9月末時点)
• ピックアップタグから最新のトレンドをチェック • コーディネート着用アイテムをブランド公式サイトで購入可能 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加
© 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 等
© ZOZO, Inc. 41 https://zozo.jp/zozomat/ • 自宅にいながら簡単に高精度な足の3D計測ができる計測マット • 計測したデータをもとに、自分の足型と靴の“相性度”
を表示 • NIKEやCONVERSEなど3,000型以上のアイテムに対応 (2021年6月末時点)
© ZOZO, Inc. 42 https://fbz.zozo.com/ • ZOZOTOWN出店企業の自社ECのフルフィルメント支援サービス • 自社EC運営のための撮影・採寸・梱包・配送などの各種フルフィルメント業務
を、ZOZOTOWNの物流センター「ZOZOBASE」が受託 • 設備投資・人件費・在庫保管料などの負担なしで、自社ECの運営が可能 • 各販売チャネル(自社EC・店舗・ZOZOTOWN)の在庫連携が可能。 これにより、商品欠品による販売機会の損失を最小化
None