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:
- Datos de entrada y fuentes de datos (E/S): ¿cuántos bytes lee tu consulta?
- Comunicación entre nodos (redistribución): ¿cuántos bytes pasa tu consulta a la siguiente etapa? ¿Qué cantidad de bytes pasa a cada ranura?
- Procesamiento: ¿cuánto trabajo de CPU requiere tu consulta?
- Salidas (materialización): ¿cuántos bytes escribe tu consulta?
- Capacidad y simultaneidad: ¿cuántas ranuras están disponibles y cuántas otras consultas se ejecutan al mismo tiempo?
- Patrones de consulta: ¿Tus consultas siguen las prácticas recomendadas de SQL?
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 generados por las herramientas de inteligencia empresarial, se pueden acelerar mediante el uso de 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 en 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 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 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.
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.
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?
- Obtén información sobre cómo solucionar problemas de ejecución de consultas con los registros de auditoría de BigQuery.
- Aprende otras técnicas de control de costos para BigQuery.
- Visualiza los metadatos casi en tiempo real sobre los trabajos de BigQuery con la vista
INFORMATION_SHEMA.JOBS
. - Aprende a supervisar el uso de BigQuery mediante los informes de tablas del sistema de BigQuery.