Section 2 — 基礎編:DB の運用管理
📘 対象: 全員(必読)
ゴール: 接続管理、監視、バックアップ・リカバリ、コスト最適化、自動化の基本概念を理解する。
1. DB 接続とアクセス管理
接続管理の基本要件
- 誰が: ユーザー or サービスアカウント
- どこから: VPC内 / インターネット / オンプレ
- どうやって: パスワード認証 / IAM DB認証 / 証明書認証
- 何ができるか: 読み取り / 書き込み / 管理操作
Cloud SQL のアクセスフロー
┌─ App / User ─┐ ┌──────────────┐
│ (Service Acct │── ① IAM トークン取得 ────│ IAM │
│ + Workload │ └──────────────┘
│ Identity) │
└───────────────┘
│
│ ② Auth Proxy 起動 (トークン渡す)
↓
┌─────────────┐ ┌──────────────┐
│ Auth Proxy │── ③ TLS + IAM 認証 ──────│ Cloud SQL │
│ (sidecar) │ └──────────────┘
└─────────────┘
IAM DB 認証 のメリット
- パスワード管理不要
- 監査ログ統合
- 短命トークン(自動取得・ローテーション)
- サービスアカウントとの統合
DB ユーザー管理(標準的なベストプラクティス)
- DB のスーパーユーザー(root, postgres)を直接使わない
- アプリ用ユーザー、運用者用ユーザー、参照用ユーザーを分離
- 最小権限の原則:必要な権限のみ付与
- 定期ローテーション:パスワードまたは IAM ベースで自動化
2. 監視 (Monitoring) の基礎
Cloud Monitoring の階層
Cloud Monitoring
├─ メトリクス (Metrics) — 数値時系列データ
├─ ダッシュボード (Dashboards) — メトリクス可視化
├─ アラート (Alerting) — 閾値超過で通知
├─ アップタイムチェック — 外部からのヘルスチェック
└─ Uptime SLO/SLA — 信頼性目標管理
DB バイタル(必ず監視すべき項目)
| メトリクス |
何を見るか |
異常値の例 |
| CPU 利用率 |
コンピュート負荷 |
> 80% が継続 |
| メモリ利用率 |
RAM の使用状況 |
> 90% が継続 |
| ストレージ利用率 |
ディスク残量 |
> 80% で警告、> 90% で危険 |
| IOPS |
書き込み/読み取り I/O |
プロビジョニング上限に近い |
| アクティブ接続数 |
同時接続数 |
max_connections に近い |
| レプリケーション遅延 |
レプリカ遅延(秒) |
> 数秒 |
| クエリレイテンシ |
クエリ応答時間 |
p99 が SLO 超過 |
Cloud Logging の利用
- DB のクエリログ、エラーログ、監査ログを集約
- Slow Query Log → スロークエリ検出
- Audit Log → 監査要件対応(IAM 操作、設定変更)
3. アラート設計の基本
良いアラートの 3 条件
- アクション可能 — 通知を受けたら明確な対応がある
- 誤検知が少ない — 一時的なスパイクで鳴らない
- 重要度がある — クリティカル / 警告を区別
アラート設計テンプレート
条件: メトリクス [CPU 利用率] が
[80%] を超えた状態で
[5分間] 継続したとき
通知: Slack #db-alerts チャンネル + PagerDuty
重要度: 警告 (Warning)
推奨アラート(Cloud SQL の場合)
| アラート |
閾値 |
重要度 |
| CPU 80%超 5分継続 |
80% |
警告 |
| メモリ 90%超 5分継続 |
90% |
警告 |
| ストレージ 80%超 |
80% |
警告 |
| ストレージ 90%超 |
90% |
クリティカル |
| レプリケーション遅延 > 60秒 |
60s |
クリティカル |
| 接続失敗率 > 5% |
5% |
クリティカル |
| インスタンス UP/DOWN |
DOWN |
クリティカル |
4. バックアップとリカバリの基本
バックアップの種類
| 種類 |
何を取るか |
復旧速度 |
試験で頻出 |
| 自動バックアップ |
全データ(フル) |
中(数十分〜) |
◎ |
| オンデマンドバックアップ |
全データ(フル) |
中 |
◎ |
| PITR |
フル + トランザクションログ |
速い(任意の時点) |
◎◎ |
| エクスポート (mysqldump 等) |
論理データ |
遅い |
○ |
Cloud SQL のバックアップ概要
- 自動バックアップ: 1日1回(指定時間帯)、デフォルト7日保持、最大365日
- オンデマンドバックアップ: 手動取得、最大99件保持
- PITR: バックアップ + binary log を有効化、最大35日復旧可能
- エクスポート: Cloud Storage へ
mysqldump / pg_dump 形式で保存
RPO / RTO の理解と要件マッピング
| 業務種別 |
典型的な RPO |
典型的な RTO |
推奨構成 |
| 金融取引 |
0(ゼロロス) |
数秒〜分 |
Spanner Multi-region |
| EC注文 |
数分 |
数十分 |
Cloud SQL HA + クロスリージョン リードレプリカ |
| 社内システム |
数時間 |
1〜数時間 |
Cloud SQL HA + 日次バックアップ |
| 分析バッチ |
1日 |
数時間 |
バックアップ + 再実行 |
バックアップ戦略の例
日次自動バックアップ + PITR
↓
週次オンデマンドバックアップ(長期保管)
↓
月次エクスポート → Cloud Storage Archive クラス
↓
データレジデンシー必要時 → クロスリージョン バックアップ
5. スロークエリとインデックス
スロークエリ調査の標準手順
- Query Insights または slow query log で遅いクエリ特定
- EXPLAIN ANALYZE で実行計画確認
- インデックス不足 / フルスキャン / JOIN戦略 を分析
- インデックス追加 / クエリ書き換え で改善
- 改善後に 再度メトリクス確認
インデックス設計の原則
- WHERE / ORDER BY / JOIN ON で使われるカラム にインデックス
- 複合インデックスは 最も絞り込める順 に列を並べる
- インデックスの数 ≠ 多いほど良い(書き込みコストが上がる)
- 未使用インデックスは削除 (Query Insights / pg_stat_user_indexes で検出)
ロック競合の調査
- PostgreSQL:
pg_locks / pg_stat_activity でロック状態を確認
- MySQL:
INFORMATION_SCHEMA.INNODB_TRX / SHOW ENGINE INNODB STATUS
- デッドロック: ログ確認 + アプリのトランザクション順序見直し
6. クォータと制限
よく問われるクォータ
| 項目 |
例(Cloud SQL) |
| 最大インスタンス数 / プロジェクト |
100(拡張可能) |
| 最大ストレージサイズ |
エディションによる |
| 最大接続数 |
エディションによる(Enterprise Plus は数千) |
| 1日のバックアップ取得回数 |
制限なし(保持件数に制限) |
| Read Replica 数 |
最大 10(同期+非同期合計) |
クォータが上限に近づいたら
- Cloud Monitoring でメトリクスを監視
- 上限に近づいたら Quotas ページで増加リクエスト
7. リソース競合の調査
よくある競合シナリオ
| 競合 |
症状 |
調査方法 |
| CPU 競合 |
クエリ遅延、スロットリング |
top クエリ確認、CPU メトリクス |
| メモリ競合 |
OOM、スワップ |
shared_buffers / innodb_buffer_pool_size 見直し |
| I/O 競合 |
クエリ遅延、IOPS 上限 |
プロビジョニング IOPS 確認、SSD への変更 |
| 接続枯渇 |
新規接続拒否 |
max_connections 増加、コネクションプーラー導入 |
| ロック競合 |
クエリブロック、デッドロック |
pg_locks / InnoDB ロック状態 |
8. メンテナンスウィンドウとアップグレード
メンテナンスウィンドウ
- DB のパッチ適用や再起動が行われる時間帯
- 業務影響の少ない時間帯(深夜・週末)を指定
- 通知(事前メール)で予告
Cloud SQL のメンテナンス通知
- メンテナンス前 1 週間 に通知メール
- 任意でメンテナンスをリスケ 可能
メジャーアップグレード
| パターン |
メリット |
デメリット |
| インプレース |
簡単、IP変更なし |
ロールバック不可、ダウンタイムあり |
| 新インスタンス + リストア |
ロールバック容易、検証可 |
接続先変更必要 |
| DMS による移行 |
ニアゼロダウンタイム |
設定が複雑 |
事前準備(必須)
- メジャーアップグレード前にバックアップ
- テスト環境で動作確認
- アプリのドライバ・ライブラリ互換性確認
9. このセクションのチェックリスト