Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Procesamiento de consultas SQL en Amazon Redshift
Amazon Redshift dirige una consulta SQL enviada a través del analizador y el optimizador para desarrollar un plan de consulta. El motor de ejecución luego traduce el plan de consulta en un código y lo envía a los nodos de computación para su ejecución. Antes de diseñar un plan de consultas, es fundamental entender cómo funciona el procesamiento de consultas.
Flujo de trabajo de planificación y ejecución de consultas
El siguiente diagrama proporciona una vista general del flujo de trabajo de planificación y ejecución de consultas.

En el diagrama, se muestra el siguiente flujo de trabajo:
-
El nodo principal del clúster de Amazon Redshift recibe la consulta y analiza la sentencia SQL.
-
El analizador genera un árbol de consultas inicial que es una representación lógica de la consulta original.
-
El optimizador de consultas toma el árbol de consultas inicial y lo evalúa, analiza las estadísticas de la tabla para determinar el orden de unión y la selectividad de los predicados y, si es necesario, reescribe la consulta para maximizar su eficacia. A veces, una sola consulta se puede escribir como varias declaraciones dependientes en segundo plano.
-
El optimizador genera un plan de consulta (o varios, si el paso anterior generó consultas múltiples) para ejecutarlo con el mejor rendimiento posible. El plan de consultas especifica las opciones de ejecución, como la orden de ejecución, las operaciones de red, los tipos de unión, el orden de unión, las opciones de agregación y las distribuciones de datos.
-
Un plan de consulta contiene información sobre las operaciones individuales necesarias para ejecutar una consulta. Puede utilizar el comando
EXPLAIN
para ver el plan de consulta. El plan de consulta es una herramienta fundamental para analizar y ajustar consultas complejas. -
El optimizador de consultas envía el plan de consultas al motor de ejecución. El motor de ejecución comprueba la caché del plan compilado para ver si coincide con el plan de consultas y utiliza la caché compilada (si la encuentra). De lo contrario, el motor de ejecución traduce el plan de consultas en pasos, segmentos y secuencias:
-
Los pasos son operaciones individuales que se llevan a cabo durante la ejecución de la consulta. Los pasos se identifican mediante una etiqueta (por ejemplo
scan
,dist
,hjoin
, omerge
). Un paso es la unidad más pequeña. Puede combinar los pasos para que los nodos de cómputo puedan realizar una consulta, una unión u otra operación de base de datos. -
Un segmento hace referencia a un segmento de una consulta y combina varios pasos que se pueden realizar mediante un único proceso. Un segmento es la unidad de compilación más pequeña que puede ejecutar un segmento de nodos de cómputo. Un sector es la unidad de procesamiento en paralelo de Amazon Redshift.
-
Un flujo es un conjunto de segmentos que se reparten entre los segmentos de nodos de cómputo disponibles. Los segmentos de un flujo corren en paralelo a lo largo de los segmentos de nodos. Por lo tanto, el mismo paso desde el mismo segmento también se ejecuta en paralelo en múltiples cortes.
-
-
El generador de código recibe el plan traducido y genera una función de C++ para cada segmento.
-
La función de C++ generada es compilada por la colección de compiladores de GNU y convertida en un archivo O (
.o
). -
Se ejecuta el código compilado (archivo O). El código compilado se ejecuta más rápido que el código interpretado y utiliza menor capacidad informática.
-
A continuación, el archivo O compilado se transmite a los nodos de cómputo.
-
Cada nodo de cómputo consta de varios segmentos de cómputo. Los segmentos de cómputo ejecutan los segmentos de consulta en paralelo. Amazon Redshift aprovecha la comunicación de red, la memoria y la administración de discos optimizadas para pasar los resultados intermedios de un paso del plan de consultas al siguiente. Esto también ayuda a acelerar la ejecución de las consultas. Considere lo siguiente:
-
Los pasos 6, 7, 8, 9, 10 y 11 se realizan una vez para cada transmisión.
-
El motor crea los segmentos ejecutables de una transmisión y los envía a los nodos de cómputo.
-
Una vez completados los segmentos de una transmisión anterior, el motor genera los segmentos para la siguiente transmisión. De esta manera, el motor puede analizar lo que ocurrió la secuencia anterior (por ejemplo, si las operaciones estaban basadas en el disco) para influir sobre la generación de segmentos en la próxima secuencia.
-
-
Una vez finalizados los nodos de cálculo, devuelven los resultados de la consulta al nodo principal para su procesamiento final. El nodo líder fusiona los datos en un único conjunto de resultados y aborda cualquier clasificación o agregación necesaria.
-
El nodo líder devuelve los resultados al cliente.
El siguiente diagrama muestra el flujo de trabajo de ejecución de transmisiones, segmentos, pasos y segmentos de nodos de cómputo. Tenga en cuenta lo siguiente:
-
Los pasos de un segmento se ejecutan secuencialmente.
-
Los segmentos de un arroyo corren en paralelo.
-
Los arroyos se ejecutan secuencialmente.
-
Los segmentos de nodos de cómputo se ejecutan en paralelo.
El siguiente diagrama muestra una representación visual de flujos, segmentos y pasos. Cada segmento contiene varios pasos y cada transmisión contiene varios segmentos.

El siguiente diagrama muestra una representación visual de las ejecuciones de consultas y los segmentos de nodos de cálculo. Cada nodo de cómputo contiene varios sectores, flujos, segmentos y pasos.

Consideraciones adicionales
Le recomendamos que tenga en cuenta lo siguiente en relación con el procesamiento de consultas:
-
El código compilado en caché se comparte entre las sesiones del mismo clúster, por lo que las ejecuciones posteriores de la misma consulta serán más rápidas y, a menudo, incluso con parámetros diferentes.
-
Al comparar las consultas, le recomendamos que siempre compare los tiempos de la segunda ejecución de una consulta, ya que el tiempo de la primera ejecución incluye la sobrecarga de compilar el código. Para obtener más información, consulte los factores de rendimiento de Query en la guía de prácticas recomendadas de Query para Amazon Redshift.
-
De ser necesario, los nodos de cómputo podrían devolver algunos datos al nodo principal durante la ejecución de la consulta. Por ejemplo, si tiene una subconsulta con una
LIMIT
cláusula, el límite se aplica al nodo principal antes de que los datos se redistribuyan en el clúster para su posterior procesamiento.