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 の自動推奨)
- AlloyDB が ワークロードを観測 → 推奨インデックス を提示
- Cloud SQL for PostgreSQL にも段階的に展開中
- 開発者は提示された CREATE INDEX を実行するだけ
2. スケーリング戦略
スケールアップ vs スケールアウト
| 観点 |
スケールアップ(垂直) |
スケールアウト(水平) |
| 何を増やす |
vCPU / RAM |
ノード数 |
| 上限 |
マシンサイズの上限 |
実質無制限 |
| ダウンタイム |
あり(再起動) |
なし |
| 適性 |
Cloud SQL / AlloyDB |
Spanner / Bigtable / Firestore |
| 用途 |
単一インスタンスで性能向上 |
大規模・グローバル |
Cloud SQL のスケーリング選択肢
| 選択肢 |
効果 |
| マシンタイプ変更 |
CPU/RAM 増減(再起動あり) |
| ストレージ自動増加 |
残量しきい値で自動拡張(縮小不可) |
| リードレプリカ追加 |
読み取り分散 |
| コネクションプーラー導入 |
接続枯渇対策 |
| Enterprise → Enterprise Plus 移行 |
性能・機能の大幅向上 |
AlloyDB のスケーリング
- Read Pool に読み取り専用ノードを追加(自動分散)
- Primary は垂直スケール(最大 128 vCPU)
Spanner のスケーリング
- Processing Units (PU) をオンラインで増減可能
- アプリ無停止でスケール
- スケーリング目安: CPU > 65% でスケールアウト推奨
Bigtable のスケーリング
- オートスケーリング(CPU 利用率・ストレージ利用率で自動)
- ノード追加で性能線形向上(10K QPS/node)
- ※ ノード追加直後は タブレット分散に時間がかかる(数十分)
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 のレプリケーション
- Secondary Cluster(クロスリージョン)— 読み取り + DR
Spanner のレプリケーション
- Regional: 同一リージョン内で 3 レプリカ
- Multi-regional: 複数リージョンで Paxos 同期、自動フェイルオーバー
4. コスト最適化の実践
コスト軸の見える化
主要コスト要素
| 要素 |
削減手段 |
| コンピュート |
適正サイズ化、Committed Use Discount (CUD) |
| ストレージ |
不要データ削除、アーカイブクラス活用 |
| ネットワーク |
同一リージョン内通信、Egress 最小化 |
| ライセンス(SQL Server) |
License-included vs BYOL |
| バックアップ |
保持期間最適化、不要バックアップ削除 |
Committed Use Discount (CUD)
- Cloud SQL / AlloyDB / Spanner で対応
- 1年 or 3年契約で 20〜60% 割引
- 安定ワークロードに最適
コスト削減 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 の運用
概念
- SLA (Service Level Agreement): クラウド事業者が保証する稼働率(Google が保証)
- SLI (Service Level Indicator): 自分が測定する指標(例: 5xx エラー率)
- SLO (Service Level Objective): SLI に対する内部目標(例: 99.9%)
- Error Budget: SLO に対する許容ダウンタイム
Cloud Monitoring SLO の活用
- カスタム SLO を定義(例: クエリ p99 < 100ms を 99.9%)
- Error Budget が枯渇しそうなら 新規リリースを停止
8. パッチ管理とメジャーバージョンアップ
Cloud SQL メジャーバージョンアップの推奨手順
1. 現行バージョンの End-of-Life スケジュール確認
↓
2. テスト環境にレプリカを作成し、新バージョンにアップグレード
↓
3. アプリ互換性テスト(特に CRUD と SQL 関数)
↓
4. 本番リードレプリカでアップグレード(1 つだけ)
↓
5. メンテナンスウィンドウで本番プライマリにインプレース実行
または DMS で新バージョンへ移行
↓
6. 監視(CPU/メモリ/エラー)強化、ロールバック準備
マイナーバージョンの自動適用
- マイナーバージョン は 自動アップグレード(メンテナンスウィンドウで適用)
- 顧客は 延期 or 即時実行 を選択可能
9. データ保持と削除
データ保持の管理
- 法令要件:金融は7年、医療はHIPAA基準で20年など
- GDPR: ユーザーの削除要求への対応(90日以内など)
- アーカイブ: Cloud Storage のライフサイクルで安価保管へ
Cloud SQL のデータ保持機能
| 機能 |
保持期間 |
| 自動バックアップ |
デフォルト 7日、最大 365日 |
| PITR (binary log) |
最大 35日 |
| オンデマンドバックアップ |
最大 99件、無期限 |
| エクスポート |
顧客管理(GCS で永久保管可) |
Spanner Backup
- 最大 1 年(365日)保持
- 別リージョンへコピー可能
10. クォータ管理と上限引き上げ
主要クォータ管理ポイント
| 項目 |
確認方法 |
上限引き上げ |
| Cloud SQL インスタンス数 |
Quotas ページ |
サポートにリクエスト |
| Spanner ノード数 |
Quotas |
自動増加 or リクエスト |
| Bigtable ノード数 |
Quotas |
リクエスト |
| プロジェクト内 IP アドレス |
VPC quota |
サポート |
11. このセクションのチェックリスト