Get a free observability report to evaluate the potential savingsContact us →
费用分析3 分钟阅读

按复杂度排名的 BigQuery 热门查询

BigQuery 中的复杂度通过槽位消耗来衡量——查询在执行期间使用的平均槽位数。此查询按估算槽位数对所有查询排名,揭示项目中计算密集度最高的操作。

为什么重要

高槽位查询影响项目中的每个人。在按需定价下,它们竞争您的公平份额槽位分配(通常为 2,000 个槽位)。在 Editions 定价下,它们直接消耗您的保留容量。识别并优化复杂查询可以改善所有用户的性能,并降低两种计费模式下的费用。

工作原理

估算槽位数通过将 total_slot_ms 除以执行时间(毫秒)来计算。使用 1,000 毫秒槽位毫秒的查询在 1 秒内平均使用约 1 个槽位。此指标捕获每个查询的并行度和计算权重。

SQL 查询

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

SQL
-- Queries ranked by average slot consumption (most compute-heavy first)

DECLARE lookback_days INT64 DEFAULT 14;

WITH jobs AS (
  SELECT
    user_email,
    query,
    project_id,
    start_time,
    end_time,
    total_slot_ms,
    COALESCE(total_bytes_billed, 0) AS bytes_billed,
    TIMESTAMP_DIFF(end_time, start_time, MILLISECOND) AS duration_ms,
    ROW_NUMBER() OVER (PARTITION BY job_id ORDER BY end_time DESC) AS rn
  FROM `your-project`.`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
  WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL lookback_days DAY)
    AND job_type = 'QUERY' AND state = 'DONE' AND total_slot_ms IS NOT NULL
)
SELECT
  user_email,
  query,
  project_id,
  start_time,
  end_time,
  ROUND(SAFE_DIVIDE(total_slot_ms, duration_ms), 0) AS avg_slots,
  ROUND(duration_ms / 1000, 1) AS duration_sec,
  ROUND(bytes_billed / POW(1024, 4) * 6.25, 2) AS on_demand_cost_usd
FROM jobs
WHERE rn = 1
...
将 your-project 和 region-us 替换为您的 GCP 项目和数据集区域。

查询说明

核心公式是 SAFE_DIVIDE(total_slot_ms, duration_ms)。如果一个查询在 100 毫秒内使用了 10,000 个槽位毫秒,其估算槽位数为 100——这意味着它同时使用了大约 100 个槽位。数字越高表示并行度越高,计算需求越大。

关键洞察

  • lightbulb

    槽位 >500 的查询被认为高度复杂,可能受益于重写。

  • lightbulb

    低计费字节数下的高槽位数表明计算密集型操作:复杂的 JOIN、窗口函数或大数据集上的 DISTINCT。

  • lightbulb

    高字节数下的高槽位数表明数据量和计算问题——最大的优化目标。

  • lightbulb

    将槽位数与执行时间进行比较:如果槽位高但执行快,查询是高效并行的,但资源密集。

最佳实践

  1. 1

    通过预聚合或使用中间表来简化多路 JOIN。

  2. 2

    当精度不重要时,用 APPROX_COUNT_DISTINCT() 替换精确的 COUNT(DISTINCT ...)。

  3. 3

    避免相关子查询——将它们改写为 JOIN 或窗口函数。

  4. 4

    在 JOIN 键上使用聚类来减少 shuffle 操作。

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

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

相关指南