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

ノイジーネイバー:「自分のクエリは軽いのに、なぜ詰まるのか」

共有DWHや共有DB環境で、自分の処理は軽いはずなのに突然遅延・タイムアウトが起きる。原因は別のチーム・別のジョブ・別のテナント。発見方法と対策パターン。

#DWH#BigQuery#Snowflake#リソース管理#sre
シェア

「9時の社内ダッシュボードがいきなり開かない。自分のクエリは何も変えてないのに、なぜ?」── データ基盤運用で最頻出のトラブル。原因は自分ではなく「うるさい隣人」(noisy neighbor)であることが多い。

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

・ダッシュボードが朝の特定時刻に必ず重い / ・自分のクエリが理由なくタイムアウトする / ・「リランしたら通った」が常態化 / ・先週まで普通だったのに今週から重い / ・データチームと営業チームの仲が険悪に

起きる仕組み

共有スロット制( 旧 on-demand / Standard Warehouse / Redshift) では、計算リソースが「全社共通プール」になります。誰かが TB 級の集計を走らせると、別の人の小さなクエリも待ちが発生します。

  • BigQuery on-demand:プロジェクト単位の slot 制限。スポットで足りない時に他クエリが PENDING に
  • Snowflake:同一 warehouse に複数クエリが queue されると、warehouse のサイズ次第で詰まる
  • Aurora / RDS:CPU・IOPS・コネクション数が共有。 ジョブが本番 OLTP に影響
  • run の長時間化:他チームの aggregate ジョブが裏で走ってる

調査手順

BigQuery:直近1時間で重かったクエリ
SQL
SELECT  user_email,  query,  total_slot_ms,  total_bytes_processed / POW(10, 12) AS tb_processed,  TIMESTAMP_DIFF(end_time, start_time, SECOND) AS duration_sec,  start_timeFROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATIONWHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)  AND total_slot_ms > 60 * 1000  -- 1分以上ORDER BY total_slot_ms DESCLIMIT 50;
Snowflake:実行中・直近の重い処理
SQL
SELECT  query_id, user_name, warehouse_name, execution_status,  total_elapsed_time/1000 AS sec,  bytes_scanned/POW(10,9) AS gb_scanned,  start_timeFROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORYWHERE start_time > DATEADD(hour, -1, CURRENT_TIMESTAMP)  AND total_elapsed_time > 60000ORDER BY total_elapsed_time DESCLIMIT 50;
  • 容疑者の特定:同時刻帯に大量 slot/credit を消費しているクエリと user を出す
  • 時系列の偏り:朝9時・正午・夕方17時など定時集計の集中を確認
  • 重複クエリ:同じ集計が複数チームから別々に投げられていないか(DRY 原則違反)
  • dbt run のオーバーラップ:staging と marts と incremental が同 warehouse でぶつかっていないか

短期対処

  • ダッシュボード用 warehouse を分離 用と ETL 用で warehouse を独立させる(Snowflake は即対応可、BigQuery は予約スロットで類似可)
  • `SET QUERY_TAG`:誰のクエリか追跡可能にし、責任範囲を明示
  • 当日の重いクエリを停止:管理者権限で `SYSTEM$CANCEL_QUERY` / BigQuery の jobs.cancel
  • マテリアライズ・キャッシュ:頻繁に叩かれる集計を view → table に格上げ(`CREATE TABLE AS`)

中長期対策

  • ワークロード分離 用 / BI 用 / アドホック分析用を warehouse・スロット単位で分ける
  • Reservation / Slot 予算:BigQuery の予約スロットでチーム別予算枠
  • ジョブの時刻分散:cron が9:00:00 集中しないよう jitter(±10分)を入れる
  • コスト・アロケーション:QUERY_TAG / labels で誰が使ってるかを可視化
  • 自動スケール:Snowflake の Multi-cluster Warehouse / Auto-scale で混雑時のみ拡張
  • Materialized View / dbt 中間モデル:重複集計の元を絶つ

ふくふくの進め方(受託案件の場合)

ノイジーネイバー診断は2週間でできます:① 1週間ぶんのクエリログを集計し容疑者をスコア化、② コスト・遅延・頻度の3軸で priority 付け、③ 切替コストの低い対策から着手(warehouse 分離 → 集中時刻のジッター → マテビュー化)。「重いクエリ・トップ10 リスト」+ 即効対策の PR をご提案します。お困りなら無料相談へ。

シェア

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

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

シリーズの外も探す:

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

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

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