BigQuery FinOps Query Pack

Which BigQuery queries burn the most slot time?

The ranking that matters if you are on Editions — slot-milliseconds consumed, not bytes scanned.

Free to run — INFORMATION_SCHEMA scans no billable bytesChecked 4 Aug 2026

JOBS and TABLE_STORAGE are region-scoped.

-- Top queries by slot consumption, last 30 days.
SELECT
  job_id,
  user_email,
  DATE(creation_time)                                        AS run_date,
  ROUND(total_slot_ms / 1000 / 3600, 2)                      AS slot_hours,
  total_bytes_billed,
  TIMESTAMP_DIFF(end_time, start_time, SECOND)               AS runtime_seconds,
  SAFE_DIVIDE(total_slot_ms, TIMESTAMP_DIFF(end_time, start_time, MILLISECOND))
                                                             AS avg_concurrent_slots,
  reservation_id,
  SUBSTR(REGEXP_REPLACE(query, r'\s+', ' '), 0, 300)         AS query_preview
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND job_type = 'QUERY'
  AND state = 'DONE'
  AND total_slot_ms IS NOT NULL
ORDER BY total_slot_ms DESC
LIMIT 50;

What it returns

slot_hours
Slot-milliseconds converted to the unit Editions bills in.
avg_concurrent_slots
Slot-ms divided by wall-clock ms — how wide the query ran, on average.
reservation_id
NULL means this ran on on-demand capacity.

How to read it

  • This list and the bytes-billed list often disagree completely. A query that scans 50 GiB but joins badly can consume more slot time than one that scans 2 TiB and streams straight through.
  • A high avg_concurrent_slots with a short runtime is healthy parallelism. A low one with a long runtime usually means a skewed join or a single-threaded stage — that is a query-shape problem, not a capacity problem, and buying slots will not fix it.
  • Under on-demand, slot time is free until you hit the concurrency ceiling and start queueing. This ranking tells you which queries will hurt if you move to Editions.

Take it further

Run this once, or have it run every day.

Finitizer evaluates this class of question continuously against your live BigQuery estate, tracks how each number moves between runs, and turns findings into assigned tasks. Read-only and keyless.