如何从BigQuery INFORMATION_SCHEMA查询未分配slot数量
BigQuery未分配Slot查询方法
未分配Slot没有单独存储在某张INFORMATION_SCHEMA表中,可通过「生效总承诺容量 - 已分配预留容量」的方式计算,计算结果和GCP控制台显示的未分配数值完全对齐。
核心计算逻辑
未分配Slot数 = 当前生效的总承诺Slot数 - 所有已创建预留分配的Slot基线容量总和
计算时需要过滤无效资源,避免统计偏差:
- 仅统计状态为
ACTIVE、已到生效时间的容量承诺,排除已到期、未生效、已删除的承诺 - 仅统计未删除的预留资源,排除已销毁的预留配置
- Slot是区域级资源,所有计算需要在同一个区域维度下聚合,跨区域容量不互通
可直接复用的查询SQL
将SQL中的ADMIN项目ID、区域标识替换为实际环境的参数即可执行:
WITH -- 聚合指定区域当前生效的总承诺Slot容量 total_committed_slots AS ( SELECT SUM(slot_count) AS total_committed FROM `[ADMIN_PROJECT_ID].[REGION]`.INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT WHERE state = 'ACTIVE' AND commitment_start_time <= CURRENT_TIMESTAMP() ), -- 聚合指定区域所有已分配给预留的Slot容量 total_allocated_slots AS ( SELECT SUM(slot_capacity) AS total_allocated FROM `[ADMIN_PROJECT_ID].[REGION]`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT WHERE deletion_time IS NULL ) SELECT total_committed, total_allocated, total_committed - total_allocated AS unallocated_slots FROM total_committed_slots, total_allocated_slots
查询结果中的unallocated_slots字段就是目标值,和截图中显示的2026未分配Slot数值一致。
使用率计算适配
把上述CTE逻辑加入原有Slot使用率统计SQL,将未分配Slot纳入总可用容量计算,即可解决资源超配的计算错误问题,适配时注意两个细节:
- 原有查询中
INNER JOIN预留表的写法会漏掉运行在未分配Slot上的作业记录,建议改为LEFT JOIN,将无关联预留的作业统一归到未分配Slot的统计项下 - 如果开启了预留自动扩缩容特性,弹性扩缩的Slot不属于基线承诺容量,不需要纳入这部分未分配统计

内容的提问来源于stack exchange,提问作者RThomas
相关产品推荐
相关产品推荐

