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
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
Search
ryu
August 08, 2024
Technology
0
360
Trace Queriesの活用でfreee会計のDB負荷削減のきっかけとした話
2024年2月にリリースされたTrace Queriesを用いて、可観測性の向上させることでfreee会計のDB負荷削減のきっかけとした話をします
ryu
August 08, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
Cosmos World Foundation Model Platform for Physical AI
takmin
0
980
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
ECS障害を例に学ぶ、インシデント対応に備えたAIエージェントの育て方 / How to develop AI agents for incident response with ECS outage
iselegant
4
460
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
680
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
350
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
130
Context Engineeringの取り組み
nutslove
0
380
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
The Language of Interfaces
destraynor
162
26k
Building Adaptive Systems
keathley
44
2.9k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
It's Worth the Effort
3n
188
29k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Rails Girls Zürich Keynote
gr2m
96
14k
Designing for Timeless Needs
cassininazir
0
130
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
Transcript
Trace Queriesの活⽤で freee会計のDB負荷削減のきっかけとした話 2024.08.07
2 ⼤⽊⻯勝 経歴 • 2019~2021 SIerに⼊社 ◦ バックエンドエンジニアをやりながらCI/CD ‧
GCPなども触る • 2022~2023 みんなの銀⾏⼊社 ◦ DevOpsエンジニアとして安全なDeployフロー の構築を⾏う • 2023.6 Enabling SREとしてfreee⼊社 ◦ Enabling SREとしてプロダクトチームへのSRE プラクティス導⼊や可観測性の向上の取り組み を⾏う 最近のマイブーム • ⽔耕栽培 ◦ レタス、ミニ⻘梗菜、バジルを育てています Enabling SREチーム マネージャー Ohiki Ryuma
freeeで何が起きていた?
4 • 各種マイクロサービスからや直接ユーザからfreee会計に対してアクセスが来る freee会計ってどんなアーキテクチャ? 検索しているSpanはここ 各クラスタの前段にはenvoyが存在
5 freee会計DBの負荷がやばい • freee会計は10年以上の開発をされていく中で巨⼤なN+1が様々なところで発⽣ ◦ 様々な機能でN+1が起きているがどのAPIで特に頻発しているかは分からない • ユーザ数の増加も相まって負荷が⾼まっている
6 会計DBの負荷がやばい • 他クラスタから会計クラスタにN+1のリクエストが⾶んでくることもある ◦ どのAPIで特に頻発しているかは分からない そもそもここまでくると Traceの画⾯すらまともに開けない…
7 ここまでのまとめ • freee会計はユーザ数の増加やシステムの複雑化に伴ってDBへの負荷がやばいこと になっていた ◦ 負荷の⾼い処理のTrace単体を⾒つけることは出来てもどのAPIでよく負荷が⾼くなっているかを 集計する⽅法は無かった • 他にも以下のようなことも体系的に集計する⽅法はなかった
◦ slowクエリを投げているAPI ◦ ライターインスタンスにSELECTクエリをたくさん投げているAPI
8 ここまでのまとめ • freee会計はユーザ数の増加やシステムの複雑化に伴ってDBへの負荷がやばいこと になっていた ◦ 負荷の⾼い処理のTrace単体を⾒つけることは出来てもどのAPIでよく負荷が⾼くなっているかを 集計する⽅法は無かった • 他にも以下のようなことも体系的に集計する⽅法はなかった
◦ slowクエリを投げているAPI ◦ ライターインスタンスにSELECTクエリをたくさん投げているAPI DatadogのTrace Queriesが 解決のきっかけの⼀つに!
Trace Queriesとは?
10 • これまでA->Bという親⼦関係のあるSpanに対して以下のような検索は出来なかった ◦ AでエラーになっているかつBでエラーになっているトレース Trace Queries とは? 1つのSpanに対してしか検索できない 両⽅でエラーが起きているTraceを検索できない
11 • 他にもA->Bという親⼦関係のあるSpanに対して以下のような検索は出来なかった ◦ Bが10s以上かかっているAのSpanをパスの種類毎に集計し多い順に並べる Trace Queries とは? パスの情報はこっちにあるので パスの種類毎に集計出来ない
検索しているSpanはここ 遅いクエリを検索することは出来る
12 • DatadogのTraceをサービス間の依存関係も含めて検索できる機能 ◦ これまで出来なかった柔軟な検索が可能に! Trace Queriesとは? Span毎に検索 検索したいSpan間の依存関係を設定 Trace全体の期間やSpan数を⼀緒に検索できる
freeeでの実際の活⽤例
14 • N+1を起こしているパスグループをN+1が起きている回数順にリスト化 N+1の依存関係があるリクエストを発⾒したい
15 N+1の依存関係があるリクエストを発⾒したい A B B B B …
16 N+1の依存関係があるリクエストを発⾒したい 検索したいSpan間の依存関係を設定 aのspan = envoyのspanの span tagであるパスグループで集計 Root Spanに絞ることでマイクロサービス間の
envoyがカウントされないようにする • Root Spanであるenvoyのspanに⼊っているパスグループの情報で集計する
17 • slowクエリを起こしているパスグループをリクエスト数順にリスト化 slowクエリを起こしているリクエストパスを発⾒したい
18 • slowクエリのうちライターインスタンスに向いているSELECT⽂をリスト化 ◦ transactionを広く張っている関係上ライターに⾼負荷なSELECT⽂が流れていたことが可視化 ライターインスタンスへの遅いSELECT⽂を⾒つけたい SQLのspanに情報として⼊っている インスタンスの向き先で検索
19 • Trace Queriesの使い⽅を実際のユースケース含めてDoc化 ◦ これまでSREや⼀部のエンジニアしか使いこなせていなかった所からセルフサービスに! 誰でもDB負荷の原因を⾒つけるのに活⽤出来るように
20 • エンジニア⾃⾝がTrace Queriesを⽤いて影響の⼤きそうな機能を修正することで負荷が軽減! ◦ Writer インスタンスの負荷: DBLoad 25 %減
◦ SELECT クエリの Reader 使⽤率: 20%上昇 結果
21 • Trace Queriesを使えば柔軟なTraceの検索が⾏なえより可観測性が向上する! ◦ 今回⾒せたのは1例でSpan tagに埋めている情報次第で⾊々な活⽤法が考えられます • Traceをエンジニア⾃⾝が⾒れるようにノウハウ化することで改善がより進むように! ◦
Datadogをエンジニア⾃⾝が使えるようにする、つまりセルフサービス化することによりス トリームアラインドなチームへ • Trace Queriesで負荷の⾼いリクエストを可視化することで⼤幅なDB負荷の削減の⼀助に! ◦ 実際の修正は会計チームのメンバーやDBREの活動によるものです。ありがとうございまし た! まとめ
ご清聴ありがとうございました!