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

A veces, las consultas se ejecutan de forma más lenta de lo que deseas. 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. 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.

Rendimiento de las consultas

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

Para evaluar si las consultas específicas son problemáticas 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 consumen 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 que generan las herramientas de inteligencia empresarial, se pueden acelerar mediante 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 ninguna modificación de consulta.

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 en microoptimizaciones para que las cargas de trabajo no sean críticas también puede generar que se evite que los recursos creen características nuevas para tus aplicaciones o que ejecuten optimizaciones que tengan mayor impacto. Por lo tanto, 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.

Capacidad y 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 una capacidad de procesamiento de consultas dedicada 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 ranura fijos, puedes usar ranuras de ajuste de escala automático, que proporcionan capacidad dinámica según la carga de trabajo de tu consulta.

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 de progreso.

El acceso a más ranuras no siempre genera 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, además del rendimiento de las cargas de trabajo simultáneas. A fin de mejorar el rendimiento de las consultas, puedes modificar las reservas de ranuras o establecer un límite más alto para el ajuste de escala automático de las ranuras.

Plan de consulta y cronograma

BigQuery genera un plan de consultas cada vez que ejecutas una consulta. Comprender este plan es fundamental para una optimización de consultas efectiva. 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, que pueden ayudarte a diagnosticar y mejorar el rendimiento de las consultas. El grafo de ejecución de consultas proporciona una interfaz gráfica para ver el plan de consultas y diagnosticar los problemas de rendimiento de las consultas.

También puedes usar el método de la API jobs.get o la vista INFORMATION_SCHEMA.JOBS para recuperar el plan de consultas y la información del cronograma. BigQuery Visualiser es 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?