槽位使用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。生成的时间序列填补空缺,确保连续的小时数据集用于可视化。
关键洞察
峰值时段通常与计划的 ETL/dbt 运行一致——将其错开以减少峰值槽位需求。
使用率接近零的非峰值时段代表在固定费率定价下浪费的预留容量。
识别平均槽位使用率最高的时段——这是您的 P50 峰值,也是 Editions 规模的基础。
不同天数槽位使用率变化很大的时段表明临时工作负载受益于自动扩展。
最佳实践
- 1
在各时段错开计划作业以平坦化槽位使用曲线。
- 2
使用自动扩展 Editions 预留来处理每小时峰值,而无需过度配置。
- 3
设置每小时费用警报,在同一工作日内发现失控查询。
- 4
在槽位争用最低的非峰值时段(深夜/清晨)运行繁重的批量作业。