ふくふくHukuhuku Inc.
EP.03Incident 11分公開: 2026-05-10

クラウド請求が突然10倍になった:誰が・何を・なぜ走らせたか

月初の請求書を見たら BigQuery が前月比10倍。原因の93%は「人」、残り7%は構成。発見・原因究明・再発防止の標準フロー。

#FinOps#BigQuery#snowflake#コスト最適化
シェア

「先月の 請求書、桁違うんですけど」── データチームの心臓に悪い瞬間。原因の9割は「悪意なき新人 or 試行錯誤中のエンジニア」。コスト爆発を防ぐには、事故が起きてからの調査ではなく、事故が小さいうちに気付く監視が必要。

あの時こうすれば良かった、と思う症状

・経理から「今月の Cloud 請求が...」と Slack DM / ・新人が「テーブル削除前に SELECT * で確認したくて」 / ・誰かが本番テーブルに `WHERE` なしクエリ / ・ の incremental が full-refresh モードに切り替わってた / ・「クラスタリングキー忘れ」

起きる仕組み(よくある TOP5)

  1. 1`SELECT *`:BigQuery は列指向課金、SELECT * で全列スキャン → 10x のコスト
  2. 2フィルタなし JOIN:パーティション/クラスタリングが効かない結合
  3. 3dbt full refresh の暴走:本来 incremental のモデルがフル再構築モードで毎晩走ってる
  4. 4View の再帰実体化:view を view から呼んで、結果的に毎回フルスキャン
  5. 5コミットされてない探索クエリ:Notebook で 100 回 SELECT を試した結果

調査手順

BigQuery:先月の高額クエリ TOP30
SQL
SELECT  user_email,  TIMESTAMP_TRUNC(creation_time, DAY) AS day,  job_id,  total_bytes_processed / POW(10, 12) AS tb,  total_bytes_processed / POW(10, 12) * 6.25 AS estimated_usd,  REGEXP_EXTRACT(query, r'FROM\s+([^\s,]+)') AS first_table,  queryFROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATIONWHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)  AND statement_type IN ('SELECT', 'MERGE')ORDER BY total_bytes_processed DESCLIMIT 30;
Snowflake:高額クエリの抽出
SQL
SELECT  user_name, warehouse_name, query_id, query_text,  credits_used_cloud_services + warehouse_size_credits AS total_credits,  TIMESTAMP_TRUNC(start_time, DAY) AS dayFROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qJOIN SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY w USING (warehouse_id)WHERE q.start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP)ORDER BY total_credits DESC LIMIT 30;

短期対処

  • 該当ユーザに即連絡:意図のあるクエリか、テスト・誤実行か
  • job/query を kill:継続中のものを止める
  • 該当 dbt model を一時停止:cron / から外す
  • 経理に状況連絡:突発であれば交渉でクラウド側のクレジット還元あり

中長期対策

  • Budget Alert:日額しきい値で Slack 通知(BigQuery / / いずれもネイティブ機能あり)
  • Per-user 制限:BigQuery の maximum bytes billed、Snowflake の resource monitor
  • SELECT * 禁止 lint:sqlfluff・dbt の lint ルールで でブロック
  • レビュー必須化:本番クエリ実行は Dataform / dbt 経由のみ、PR レビュー必須
  • 継続モニタ:cost dashboard( で誰でも見える)+ 異常検知(前週比 +50%)
  • FinOps 文化:チーム別コスト配賦 → コスト意識が定着

ふくふくの進め方

コスト診断は2週間:① 直近30日のクエリログを集計、② TOP20 をダッシュボード化、③ 自動アラート + lint + 予約スロット予算化を提案。「事故が起きる前に気付く」体制を3週間で。請求書のショック対応の常連です。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp