Get a free observability report to evaluate the potential savingsContact us →
Análisis de costos3 min de lectura

Top consultas de BigQuery por complejidad

La complejidad en BigQuery se mide por el consumo de slots — el número promedio de slots que una consulta utiliza durante la ejecución. Esta consulta clasifica todas las consultas por su número aproximado de slots, revelando las operaciones más intensivas en cómputo en su proyecto.

Por qué importa

Las consultas con muchos slots afectan a todos en su proyecto. Bajo la tarificación bajo demanda compiten por su asignación de slots de cuota compartida (típicamente 2,000 slots). Bajo la tarificación Editions consumen directamente su capacidad reservada. Identificar y optimizar consultas complejas mejora el rendimiento para todos los usuarios y reduce costos bajo ambos modelos de facturación.

Cómo funciona

El número aproximado de slots se calcula dividiendo total_slot_ms por el tiempo de ejecución en milisegundos. Una consulta que usa 1,000 slot-milisegundos durante 1 segundo usó aproximadamente 1 slot en promedio. Esta métrica captura el paralelismo y el peso computacional de cada consulta.

Consulta 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
...
Reemplace your-project y region-us con su proyecto GCP y la región de su dataset.

Explicación de la consulta

La fórmula central es SAFE_DIVIDE(total_slot_ms, duration_ms). Si una consulta usó 10,000 slot-milisegundos durante 100 milisegundos, su número aproximado de slots es 100 — lo que significa que usó aproximadamente 100 slots concurrentemente. Números más altos indican más paralelismo y mayor demanda computacional.

Puntos clave

  • lightbulb

    Las consultas con >500 slots se consideran altamente complejas y pueden beneficiarse de la reescritura.

  • lightbulb

    Alto número de slots con pocos bytes facturados sugiere operaciones intensivas en cómputo: JOINs complejos, funciones de ventana o DISTINCT en conjuntos de datos grandes.

  • lightbulb

    Alto número de slots con muchos bytes facturados indica problemas tanto de volumen de datos como de cómputo — los mayores objetivos de optimización.

  • lightbulb

    Compare el número de slots con el tiempo de ejecución: si los slots son altos pero la ejecución rápida, la consulta es eficientemente paralela pero consume muchos recursos.

Mejores prácticas

  1. 1

    Simplifique los JOINs multi-direccionales pre-agregando o usando tablas intermedias.

  2. 2

    Reemplace COUNT(DISTINCT ...) exacto por APPROX_COUNT_DISTINCT() cuando la precisión no es crítica.

  3. 3

    Evite subconsultas correlacionadas — reescríbalas como JOINs o funciones de ventana.

  4. 4

    Use clustering en claves de JOIN para reducir operaciones de shuffle.

¿Quiere que CloudClerk encuentre estos ahorros automáticamente?

Nuestra plataforma se conecta a su proyecto BigQuery, ejecuta estos análisis automáticamente y entrega recomendaciones de optimización impulsadas por IA — todo con sus datos completamente anonimizados.

Guías relacionadas