Introducción a la optimización del rendimiento de consultas

En este documento, se proporciona una descripción general de las técnicas de optimización que pueden mejorar el rendimiento de las consultas en BigQuery. En general, las consultas que hacen menos trabajo funcionan mejor. Se ejecutan más rápido y consumen menos recursos, lo que puede reducir los costos y disminuir las fallas.

Rendimiento de las consultas

La evaluación del rendimiento de las consultas en BigQuery implica varios factores:

Para evaluar consultas específicas o si tienes contención de recursos, puedes usar Cloud Monitoring o los gráficos de recursos administrativos de BigQuery para supervisar los recursos que tus trabajos de BigQuery. Si identificas una consulta lenta o con un alto uso de recursos, puedes enfocarte en las optimizaciones de rendimiento.

Algunos patrones de consulta, en especial los generados por herramientas de inteligencia empresarial, se pueden acelerar con BigQuery BI Engine. BI Engine es un servicio de análisis rápido en la memoria que acelera muchas consultas de SQL en BigQuery mediante el almacenamiento en caché inteligente de los datos que usas con más frecuencia. BI Engine está integrado en BigQuery, lo que significa que, a menudo, puedes obtener un mejor rendimiento sin modificar las consultas.

Al igual que con cualquier sistema, la optimización para lograr un buen rendimiento, en ocasiones, implica compensaciones. Por ejemplo, mediante la sintaxis avanzada de SQL, a veces se puede introducir la complejidad y reducir la comprensibilidad de las consultas para personas que no son expertos en SQL. Dedicar tiempo a microoptimizaciones para cargas de trabajo no críticas también podría implicar que los recursos dejen de crear características nuevas para tus aplicaciones o de identificar optimizaciones más importantes. A fin de ayudarte a lograr el mayor retorno de inversión posible, recomendamos que enfoques tus optimizaciones en las cargas de trabajo más importantes para tus canalizaciones de análisis de datos.

Optimiza la capacidad y la simultaneidad

BigQuery ofrece dos modelos de precios para consultas: precios según demanda y basados en la capacidad. El modelo según demanda proporciona un grupo compartido de capacidad y los precios se basan en la cantidad de datos que procesa cada consulta que ejecutas.

Se recomienda el modelo basado en capacidad si deseas presupuestar un gasto mensual coherente o si necesitas más capacidad de la que está disponible con el modelo según demanda. Cuando usas precios basados en la capacidad, asignas capacidad de procesamiento de búsquedas específica que se mide en ranuras. El costo de todos los bytes procesados se incluye en el precio basado en la capacidad. Además de los compromisos de ranuras fijos, puedes usar ranuras de ajuste de escala automático, que proporcionan capacidad dinámica según la carga de trabajo de la consulta.

El rendimiento de las consultas que se ejecutan de manera repetida en los mismos datos puede variar, y la variación suele ser mayor para las consultas que usan ranuras a pedido que para las que usan reservas de ranuras.

Durante el procesamiento de consultas de SQL, BigQuery desglosa la capacidad de procesamiento requerida para realizar cada etapa de una consulta en ranuras. BigQuery determina de forma automática la cantidad de consultas que se pueden ejecutar de forma simultánea de la siguiente manera:

  • Modelo según demanda: cantidad de ranuras disponibles en el proyecto
  • Modelo basado en la capacidad: cantidad de ranuras disponibles en la reserva

Las consultas que requieren más ranuras de las que están disponibles se ponen en cola hasta que los recursos de procesamiento estén disponibles. Después de que una consulta comienza a ejecutarse, BigQuery calcula cuántas ranuras usa cada etapa de consulta según el tamaño y la complejidad de la etapa y la cantidad de ranuras disponibles. BigQuery usa una técnica llamada programación equilibrada para garantizar que cada consulta tenga suficiente capacidad para avanzar.

El acceso a más ranuras no siempre da como resultado un rendimiento más rápido para una consulta. Sin embargo, un grupo más grande de ranuras puede mejorar el rendimiento de consultas grandes o complejas y el rendimiento de las cargas de trabajo simultáneas. Para mejorar el rendimiento de las consultas, puedes modificar tus reservas de ranuras o establecer un límite más alto para el ajuste de escala automático de ranuras.

Plan de consulta y cronograma

BigQuery genera un plan de consultas cada vez que ejecutas una consulta. Comprender este plan es fundamental para lograr una optimización de consultas eficaz. El plan de consulta muestra estadísticas de ejecución, como bytes leídos y tiempo de ranura consumido. El plan de consulta también incluye detalles sobre las diferentes etapas de ejecución, lo que puede ayudarte a diagnosticar y mejorar el rendimiento de las consultas. El gráfico de ejecución de consultas proporciona una interfaz gráfica para ver el plan de consulta y diagnosticar problemas de rendimiento de consultas.

También puedes usar el método de la API jobs.get o la vista INFORMATION_SCHEMA.JOBS para recuperar el plan de consulta y la información del cronograma. BigQuery Visualiser usa esta información, una herramienta de código abierto que representa de forma visual el flujo de las etapas de ejecución de un trabajo de BigQuery.

Cuando BigQuery ejecuta un trabajo de consulta, convierte la instrucción de SQL declarativa en un grafo de ejecución. Este grafo se divide en una serie de etapas de consulta, que se componen de conjuntos de pasos de ejecución más detallados. BigQuery usa una arquitectura en paralelo muy distribuida para ejecutar estas consultas. Las etapas de BigQuery modelan las unidades de trabajo que varios trabajadores potenciales pueden ejecutar en paralelo. Las etapas se comunican entre sí a través de una arquitectura aleatoria de distribución rápida.

Plan de ejecución de consultas

Además del plan de consultas, los trabajos de consulta también exponen un cronograma de ejecución. Este cronograma proporciona un conteo de las unidades de trabajo completadas, pendientes y activas dentro de los trabajadores de consulta. Una consulta puede tener varias etapas con trabajadores activos en simultáneo, por lo que el cronograma está previsto para mostrar el progreso general de la consulta.

Estadísticas de cronogramas

Para estimar qué tan costosa es una consulta en términos de procesamiento, puedes ver la cantidad total de segundos de ranura que consume. Cuanto menor sea el número de segundos de ranura, mejor, ya que esto significa que existen más recursos disponibles para otras consultas en ejecución en el mismo proyecto, al mismo tiempo.

El plan de consulta y las estadísticas de cronograma te ayudan a comprender cómo BigQuery ejecuta las consultas y si determinadas etapas dominan el uso de recursos. Por ejemplo, una etapa JOIN que genera muchas más filas de salida que filas de entrada podría indicar una oportunidad para aplicar un filtro con anticipación en la consulta. Sin embargo, la naturaleza administrada del servicio limita la practicidad directa de algunos detalles. Si deseas conocer prácticas recomendadas y técnicas para mejorar la ejecución y el rendimiento de las consultas, visita Optimiza el procesamiento de consultas.

¿Qué sigue?