Get a free observability report to evaluate the potential savingsContact us →
槽位使用3 分钟阅读

按小时统计 BigQuery 槽位使用情况

每小时槽位使用情况揭示了 BigQuery 工作负载中的日内模式。此查询向您展示峰值和非峰值时段何时发生,从而实现更智能的预留调度和管道编排。

为什么重要

大多数 BigQuery 工作负载具有可预测的每小时模式——早晨 ETL 运行、中午分析师活动、傍晚批量处理。了解这些模式可让您安排预留以匹配需求、错开管道以避免争用,并设置有意义的异常使用警报。

工作原理

与每日版本类似,此查询从 JOBS_TIMELINE 汇总 period_slot_ms,但截断到 HOUR 粒度并除以每小时毫秒数(3,600,000)。日历填充确保每个小时都有一个数据点。

SQL 查询

Fill in your details to get a ready-to-run query:

SQL
-- Average slot consumption per hour (zero-filled time series)

DECLARE lookback_days INT64 DEFAULT 7;
DECLARE ms_per_hour INT64 DEFAULT 3600000;

WITH hourly_slots AS (
  SELECT
    TIMESTAMP_TRUNC(period_start, HOUR) AS hour,
    ROUND(SUM(period_slot_ms) / ms_per_hour, 2) AS avg_slots
  FROM `your-project`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
  WHERE period_start >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL lookback_days DAY)
    AND statement_type != 'SCRIPT'
  GROUP BY hour
),
calendar AS (
  SELECT ts AS hour FROM UNNEST(GENERATE_TIMESTAMP_ARRAY(
    TIMESTAMP_TRUNC(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL lookback_days DAY), HOUR),
    TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), HOUR),
    INTERVAL 1 HOUR)) AS ts
)
SELECT
  c.hour,
  IFNULL(h.avg_slots, 0) AS avg_slots
FROM calendar c
LEFT JOIN hourly_slots h ON c.hour = h.hour
ORDER BY c.hour
将 your-project 和 region-us 替换为您的 GCP 项目和数据集区域。

查询说明

与每日查询相同的方法,但在小时粒度上。ms_per_hour 除数为 3,600,000。生成的时间序列填补空缺,确保连续的小时数据集用于可视化。

关键洞察

  • lightbulb

    峰值时段通常与计划的 ETL/dbt 运行一致——将其错开以减少峰值槽位需求。

  • lightbulb

    使用率接近零的非峰值时段代表在固定费率定价下浪费的预留容量。

  • lightbulb

    识别平均槽位使用率最高的时段——这是您的 P50 峰值,也是 Editions 规模的基础。

  • lightbulb

    不同天数槽位使用率变化很大的时段表明临时工作负载受益于自动扩展。

最佳实践

  1. 1

    在各时段错开计划作业以平坦化槽位使用曲线。

  2. 2

    使用自动扩展 Editions 预留来处理每小时峰值,而无需过度配置。

  3. 3

    设置每小时费用警报,在同一工作日内发现失控查询。

  4. 4

    在槽位争用最低的非峰值时段(深夜/清晨)运行繁重的批量作业。

想让 CloudClerk 自动找到这些节省吗?

我们的平台连接到您的 BigQuery 项目,自动运行这些分析,并提供 AI 驱动的优化建议——所有数据完全匿名。

相关指南