# Expected Diagnosis: TCID-12948

## Root Cause

TiKV 全ノードの CPU 飽和（13/21 ノードが 80–96%）による 2PC RPC ボトルネック。INSERT 1行/クエリ × ~5,300/s + UPDATE × ~3,466/s のバッチなし高頻度小トランザクションが TiDB→TiKV gRPC スレッドプールを飽和させ、db-tikv-11 の resolve_lock latch wait P99 = 19.14s、storage async write P99 = 7.32s（ベースライン 0.07s の 100 倍）、COMMIT slow log 184,537 件（平均 2.67s）を引き起こした。ディスク write stall = 0 で CPU 飽和が主因。

## Evidence Chain

1. **TiKV CPU metrics**: 13/21 ノードが 80–96%。db-tikv-11: 15.2/16 vCPU (95%)、db-tikv-5: 15.3/16 vCPU (96%)
2. **TiKV write latency metrics**: db-tikv-11 の storage async write P99 = 7.32s（ベースライン < 0.07s）、resolve_lock latch wait P99 = 19.14s（ベースライン < 0.02s）
3. **TiDB COMMIT slow log**: 184,537 件（平均 2.67s、最大 25.03s）—TiKV write path 詰まりがフロントエンドに伝播
4. **write stall = 0**: RocksDB write stall なし、flow control events なし → ディスクは副次的寄与、CPU 飽和が主因
5. **GCP PD 書き込みスループット**: ピーク 144-165 MB/s（200GiB PD 上限に接近）—ディスクも上限付近だが先行ボトルネックは CPU

## Causality

INSERT 1行/クエリ × 5,300/s + UPDATE × 3,466/s（バッチなし）→ 高頻度 2PC RPC 大量発生 → TiKV gRPC CPU 飽和（13/21 ノード 80-96%）→ resolve_lock latch wait 積み上がり → storage async write P99 7.32s → TiDB COMMIT slow log 184,537 件（平均 2.67s、最大 25.03s）

## Severity

Medium（ロードテスト環境、本番は未稼働）

## Recommendations

1. **INSERT バッチ化（最優先 P0）**: 1行 INSERT を 100-1000行にまとめ RPC 数を 1/100-1/1000 に削減
2. **UPDATE バッチ化（P1）**: UPDATE も複数条件 IN (...) でまとめるかバッチ処理で件数削減
3. **GCP PD 容量拡大（P1、CPU 解消後）**: 200GiB → 500GiB+ で書き込みスループット上限向上（ただし CPU 解消後に実施）
4. **本番容量計画（P2）**: バッチ化後に再ロードテストを実施し TiKV CPU < 60% を確認してから本番仕様決定

## Scoring Rubric

> Checklist for regression testing. The Agent must satisfy these to pass.

- [ ] TiKV CPU 飽和（複数ノード 80%+）を根因として特定
- [ ] 高頻度小トランザクション（INSERT 1行/クエリ × 5,000+/s）が 2PC RPC ファンアウトを引き起こしていることを認識
- [ ] storage async write P99 または resolve_lock latch wait の上昇を証拠として提示
- [ ] write stall = 0 を確認し RocksDB/ディスクを主因から除外
- [ ] INSERT バッチ化を主推奨事項として提示
- [ ] ディスク拡大（200→500GB）は部分的に有効だが CPU 解消後に実施すべきと説明
