Skip to content

[Phase 1 Sprint 5] 性能チューニング(N+1 / クエリ / index) #769

Description

@win2cot

目的

MVP リリース前に明らかな性能ボトルネックを是正する。定量 SLO は本 Issue では設けず、測定 → 是正 → 所見記録のサイクルで対応する(win2cot 決定 2026-06-25)。

スコープ

  • ADR-0029 計測基盤(OTel / Application Signals)で主要 endpoint を測定
  • N+1 検出(タスク一覧・ダッシュボード・関係者解決 等)と是正(fetch join / EntityGraph 等)
  • 頻出クエリの index レビュー(tenant_id 複合 index 含む)
  • 所見と是正内容を docs に記録(リリース前チェックリストへ引き継ぎ)

受け入れ条件

  • 主要 endpoint の測定結果を記録
  • 検出した N+1 を是正し、回帰テストで本数を固定(datasource-proxy / QueryCount)
  • index レビュー実施、必要な Flyway 追加(設計規約 §3.1 命名準拠)
  • 所見メモを docs に残す、CI green

議論結果(2026-06-26)— 確定方式 / ADR-0039

議論先行を完了。方式を ADR-0039(docs/adr/0039-performance-tuning-measurement-and-regression.md, Accepted)で固定。要点:

  • 現状認識: 主要 N+1 想定 3 箇所は既に対策済み(loadUserMap 一括 / 関係者 JOIN single query / summary EXISTS)。tasks 複合 index 7 本・task_stakeholders PK+idx も保有。→ 本 Issue の主眼は 検証 + 回帰ガード + EXPLAIN ベースの index 妥当性確認
  • 回帰固定: datasource-proxy(test scope)でクエリ本数を assert。既対策箇所にもガードを張る。
  • 発掘の測定: ADR-0029 の OTel(ローカル otel-lgtm)+ show_sql。datasource-micrometer は今回不採用(MVP 直前の Native 互換検証コスト回避)。
  • index レビュー完了基準: 主要 endpoint 代表クエリを EXPLAIN し所見(type / 使用 index / rows)を docs 記録。type=ALL 等の重大事象は是正。
  • 是正スコープ: N+1・欠損 index は本 Issue 内。重大ボトルネックも可能な範囲で本 Issue 内、ただしアーキ大改修で PR 肥大化する場合のみ別 Issue 切り出し可。
  • keyword 検索(LIKE): 所見記録のみ。前方一致化 / FULLTEXT 等の改善は別 Issue 候補。

注記

  • 定量目標(p95 等)は設けない。重大なボトルネックが見つかった場合は別 Issue 化を検討。
  • claude-automation=議論先行 → 方式確認済み(ADR-0039)。実装着手は ADR-0039 マージ後を想定。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更priority/p2Medium。完了が望ましいが柔軟に判断可task-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions