02_応用

Section 2 — 応用編:高度な運用判断とコスト/性能最適化

🔧 対象: 中堅以上 ゴール: 性能診断・スケーリング・自動化・コスト最適化の判断ができる。


1. Query Insights の活用

Query Insights とは

Cloud SQL / AlloyDB に統合された クエリ性能可視化機能。「top SQL」「実行計画」「ロック」「待機時間」を時系列で分析可能。

試験で問われる典型問題

問題 解決アプローチ
「特定 SQL の実行時間が突然伸びた」 Query Insights で 実行計画変化 を確認、Index Advisor で推奨を見る
「アプリ全体が遅い」 Top SQL リストから CPU 時間が最大 の SQL を特定
「待機イベントが多発」 Wait Event 分析で Lock / I/O / CPU のどれかを特定

Index Advisor(AlloyDB の自動推奨)


2. スケーリング戦略

スケールアップ vs スケールアウト

観点 スケールアップ(垂直) スケールアウト(水平)
何を増やす vCPU / RAM ノード数
上限 マシンサイズの上限 実質無制限
ダウンタイム あり(再起動) なし
適性 Cloud SQL / AlloyDB Spanner / Bigtable / Firestore
用途 単一インスタンスで性能向上 大規模・グローバル

Cloud SQL のスケーリング選択肢

選択肢 効果
マシンタイプ変更 CPU/RAM 増減(再起動あり)
ストレージ自動増加 残量しきい値で自動拡張(縮小不可)
リードレプリカ追加 読み取り分散
コネクションプーラー導入 接続枯渇対策
Enterprise → Enterprise Plus 移行 性能・機能の大幅向上

AlloyDB のスケーリング

Spanner のスケーリング

Bigtable のスケーリング


3. レプリケーション戦略

Cloud SQL のレプリケーション

1. 同期スタンバイ(HA)

[Primary] ─同期─> [Standby]
   (zone-a)        (zone-b)
※ アプリは Primary のみに接続
※ Primary 障害時、Standby が自動昇格

2. リードレプリカ(非同期)

[Primary] ─非同期─> [Read Replica 1]
                  ─> [Read Replica 2]
                  ─> [Read Replica 3]
※ 同一リージョンまたは別リージョン
※ 読み取り専用、アプリはレプリカで読み取りを分散
※ 障害時は手動昇格(プロモート)

3. クロスリージョン リードレプリカ(DR)

AlloyDB のレプリケーション

Spanner のレプリケーション


4. コスト最適化の実践

コスト軸の見える化

主要コスト要素

要素 削減手段
コンピュート 適正サイズ化、Committed Use Discount (CUD)
ストレージ 不要データ削除、アーカイブクラス活用
ネットワーク 同一リージョン内通信、Egress 最小化
ライセンス(SQL Server) License-included vs BYOL
バックアップ 保持期間最適化、不要バックアップ削除

Committed Use Discount (CUD)

コスト削減 Tips

Tip 効果
開発環境は Zonal で運用 HA コストカット
不要なリードレプリカ削除 レプリカ料金カット
マシンタイプを定期見直し オーバープロビジョニング解消
PITR 保持期間を業務要件に合わせる ログ保管コスト削減
アーカイブデータは BigQuery + 圧縮へ DB ストレージ単価削減

5. クエリ最適化の実践

PostgreSQL での最適化チェックリスト

MySQL での最適化チェックリスト

N+1 問題(アプリ起因の最適化)

NG: ループ内で SELECT
for u in users:
    SELECT * FROM orders WHERE user_id = u.id  ← N回実行

OK: JOIN または IN 句
SELECT * FROM users u
JOIN orders o ON o.user_id = u.id

6. 自動化の実装パターン

スケジュールタスクの実行

Cloud Scheduler (cron 形式)
   ↓ 起動
Cloud Workflows / Cloud Functions
   ↓ 実行
Cloud SQL API / pg_dump / gcloud sql ...

自動化シナリオの例

シナリオ 1: 日次バックアップエクスポート

Cloud Scheduler (毎日 02:00)
   ↓
Cloud Functions
   ↓ gcloud sql export sql
Cloud SQL → Cloud Storage (GCS)
   ↓
GCS ライフサイクル → 30日後 Archive クラスへ

シナリオ 2: 月次インデックス再構築

Cloud Scheduler (毎月 1 日)
   ↓
Cloud Workflows
   ↓
Cloud SQL: pgRepack / online schema change ツール

シナリオ 3: メンテナンス通知 → Slack

Cloud SQL メンテナンス通知 (Email)
   ↓ (Gmail Filter or Pub/Sub)
Cloud Functions
   ↓
Slack Webhook

7. SLA / SLO の運用

概念

Cloud Monitoring SLO の活用


8. パッチ管理とメジャーバージョンアップ

Cloud SQL メジャーバージョンアップの推奨手順

1. 現行バージョンの End-of-Life スケジュール確認
        ↓
2. テスト環境にレプリカを作成し、新バージョンにアップグレード
        ↓
3. アプリ互換性テスト(特に CRUD と SQL 関数)
        ↓
4. 本番リードレプリカでアップグレード(1 つだけ)
        ↓
5. メンテナンスウィンドウで本番プライマリにインプレース実行
   または DMS で新バージョンへ移行
        ↓
6. 監視(CPU/メモリ/エラー)強化、ロールバック準備

マイナーバージョンの自動適用


9. データ保持と削除

データ保持の管理

Cloud SQL のデータ保持機能

機能 保持期間
自動バックアップ デフォルト 7日、最大 365日
PITR (binary log) 最大 35日
オンデマンドバックアップ 最大 99件、無期限
エクスポート 顧客管理(GCS で永久保管可)

Spanner Backup


10. クォータ管理と上限引き上げ

主要クォータ管理ポイント

項目 確認方法 上限引き上げ
Cloud SQL インスタンス数 Quotas ページ サポートにリクエスト
Spanner ノード数 Quotas 自動増加 or リクエスト
Bigtable ノード数 Quotas リクエスト
プロジェクト内 IP アドレス VPC quota サポート

11. このセクションのチェックリスト