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

O11yによる可視化で実現する_チーム独立型パフォーマンス改善.pdf

Avatar for hirosi1900day hirosi1900day
February 04, 2026
240

 O11yによる可視化で実現する_チーム独立型パフォーマンス改善.pdf

Avatar for hirosi1900day

hirosi1900day

February 04, 2026
Tweet

Transcript

  1. Railsの光と影 ✨ 光:Rails の高い生産性と開発スピード • 多くの処理を暗黙的に肩代わりしてくれるため、少ないコードでアプリケーションを構築できる • Active Record により、SQL

    を意識せず Ruby らしい記述で DB 操作ができる ⚠ 影:暗黙的な挙動が生むパフォーマンスの罠 • Rails が裏側で多くの処理を行うため、 どこでコストがかかっているか見えにくい • 特に Active Record は、SQL を書かずに済む反面、 ◦ 思わぬタイミングで 重いクエリ が発行される ◦ N+1 クエリや不要なデータ取得が起きやすい • 問題は「動いている間は気づきにくく」、 負荷が上がってから顕在化しがち
  2. なぜDBMとProfilerに注目したか 可視化対象の選定基準 1. チューニングが難しい(経験 (勘)や知識が必要) 2. 発生頻度が高い(改善効果が大きい) ↓ 領域 ツール

    よくある問題 データベース DBM スロークエリ、インデックス不足 アプリケーション CPU / メモリ Profiler メモリ・ CPU負荷 この2つを可視化すれば、多くの問題に対応できる
  3. Before / After • Before 😓 「なんか遅い」→ APMを見る→ 詳しい人に聞く →

    explain 手動実行 → 原因特定に数時間〜数日 ↓ • After 🎉 APMを見る→ DBMでExplain Planを見る(AIによる改善法 を参考にみる) → 原因特定まで数分
  4. 解決策② Profilerの活用 指標 何が分かるか メモリアロケーション どこでメモリを消費しているか CPU Time どこで処理時間を使っているか GC

    どのタイミングで GCが発動したか GVL待ち どれだけ処理が GVLで待たされているか ※ GVL:IO wait中など以外は 1スレッドしか動けな い制約 課題:大量データ処理時など、どのコードがリソースを消費しているか分からない 😰 Profilerで見えるようになること ↓ 「ここが怪しい」が可視化され、誰でも分かる状態に
  5. Profiler導入の Before / After • Before 😓 「なんかメモリ使いすぎ」「処理が遅い」 → 手当たり次第にコードを読

    む → 仮説ベースで修正 → 効果あるか分からない → 詳しい人に相談 → 原因 特定に数日〜諦め ↓ • After 🎉 Profilerでフレームグラフを確認 → 「このメソッドがメモリ食ってる」「ここ でCPU使ってる」が一目瞭然 → ピンポイントで修正 → 原因特定まで数分〜数 時間
  6. APMにコードオーナー情報を付与する実装例(Controller) module DatadogTaggable extend ActiveSupport::Concern included do before_action :set_datadog_tags end

    private def set_datadog_tags span = Datadog::Tracing.active_span return unless span code_owner = CodeOwnership.for_class(self.class)&.name || 'unknown' span.set_tag('code_owner', code_owner) rescue StandardError => e Rails.logger.warn("Failed to set code_owner tag: #{e.message}") end end このModuleをControllerで includeするだけ! ※ Sidekiq等の実装は下記ブロ グをご参照ください https://tech.timee.co.jp/entry/2 024/12/14/100000
  7. このようにしてSREを介さず各チームが独立して改善できる状態している まとめると ... 1 自チームの関心のある情報で絞り込み可能にし異常検知 2 DBM / Profilerでパフォーマンス改善方法を特定 3

    チーム内で改善・デプロイ 4 効果測定 🎉 → SREを介さず、各チームが自律的に改善サイクルを回せる (難易度の高い課題には引き続き SREチームが協力してサポート )