EXPLAIN - Amazon Redshift

EXPLAIN

Muestra el plan de ejecución de una instrucción de consulta sin ejecutar la consulta. Para obtener información sobre el flujo de trabajo del análisis de consultas, consulte Flujo de trabajo de análisis de consultas.

Sintaxis

EXPLAIN [ VERBOSE ] query

Parámetros

VERBOSE

Muestra el plan de consulta completo en lugar de solo un resumen.

consulta

Instrucción de consulta que se explicará. La consulta puede ser una instrucción SELECT, INSERT, CREATE TABLE AS, UPDATE o DELETE.

Notas de uso

El rendimiento de EXPLAIN a menudo se ve afectado por el tiempo que lleva crear tablas temporales. Por ejemplo, una consulta que usa la optimización de subexpresión común requiere que se creen y analicen tablas temporales para devolver el resultado de EXPLAIN. El plan de consulta depende del esquema y las estadísticas de las tablas temporales. Por lo tanto, el comando EXPLAIN para este tipo de consulta puede tardar más tiempo en ejecutarse que lo esperado.

Puede usar EXPLAIN solo para los siguientes comandos:

  • SELECT

  • SELECT INTO

  • CREATE TABLE AS

  • INSERT

  • UPDATE

  • DELETE

El comando EXPLAIN producirá un error si lo utiliza para otros comandos SQL, como operaciones de base de datos o lenguaje de definición de datos (DDL).

Amazon Redshift utiliza los costos unitarios relativos de los resultados de EXPLAIN para elegir un plan de consultas. Amazon Redshift compara los tamaños de varias estimaciones de recursos para determinar el plan.

Pasos de planificación y ejecución de consultas

El plan de ejecución para una instrucción de consulta de Amazon Redshift específica desglosa la ejecución y el cálculo de una consulta en una secuencia discreta de operaciones de tabla y pasos que eventualmente producen un conjunto de resultados finales para la consulta. Para obtener información acerca de la planificación de consultas, consulte Procesamiento de consultas.

La siguiente tabla proporciona un resumen de los pasos que Amazon Redshift puede utilizar con objeto de desarrollar un plan de ejecución para cualquier consulta que un usuario envíe para su ejecución.

Operadores EXPLAIN Pasos de ejecución de la consulta Descripción
SCAN:
Sequential Scan scan Es el paso o el operador de análisis de tabla, o el análisis de la relación de Amazon Redshift. Analiza la tabla completa de manera secuencial de principio a fin y evalúa las restricciones de la consulta para cada una de las filas (Filtro) si se especifica con la cláusula WHERE. También se utiliza para ejecutar las instrucciones INSERT, UPDATE y DELETE.
JOINS: Amazon Redshift utiliza diferentes operadores de combinación en función del diseño físico de las tablas que se combinarán, de la ubicación de los datos que se necesitan para la combinación y de los atributos específicos de la propia consulta. Análisis de subconsulta -- El anexo y análisis de subconsultas se utilizan para ejecutar consultas UNION.
Nested Loop nloop Combinación menos óptima; se utiliza principalmente para las combinaciones cruzadas (productos cartesianos; sin una condición de combinación) y algunas combinaciones de desigualdades.
Hash Join hjoin También se utiliza para combinaciones internas y combinaciones externas de izquierda y derecha; por lo general, es más rápida que una combinación de bucle anidado. La combinación hash lee la tabla hash externa, aplica la función hash a la columna de combinación y encuentra coincidencias en la tabla hash interna. El paso puede verterse en el disco. (La entrada interna de hjoin es un paso hash que puede estar basado en el disco).
Merge Join mjoin También se utiliza para combinaciones internas y externas (para tablas de combinación que están distribuidas y ordenadas en las columnas de combinación). Por lo general, es el algoritmo de combinación de Amazon Redshift más rápido, sin incluir otras consideraciones en torno al costo.
AGGREGATION: operadores y pasos que se utilizan en las consultas que implican funciones de agregación y operaciones GROUP BY.
Aggregate aggr Operador/paso para las funciones de agregación escalar.
HashAggregate aggr Operador/paso para las funciones de agregación agrupadas. Puede funcionar desde el disco en virtud de la tabla hash que se vierte en el disco.
GroupAggregate aggr En ocasiones, es el operador elegido para consultas de agrupación en conjunto si la configuración de Amazon Redshift del ajuste force_hash_grouping está desactivada.
SORT: operadores y pasos que se utilizan cuando las consultas tienen que ordenar o fusionar conjuntos de resultados.
Sort sort Sort realiza la ordenación especificada por la cláusula ORDER BY y, también, otras operaciones como UNION y combinaciones. Puede funcionar desde el disco.
Merge merge Produce los resultados ordenados finales de una consulta en función de los resultados ordenados intermedios que se derivan de las operaciones realizadas en paralelo.
Operaciones EXCEPT, INTERSECT y UNION:
SetOp Except [Distinct] hjoin Se usa para consultas EXCEPT. Puede funcionar desde el disco dado que el hash de entrada puede estar basado en el disco.
Hash Intersect [Distinct] hjoin Se usa para consultas INTERSECT. Puede funcionar desde el disco dado que el hash de entrada puede estar basado en el disco.
Append [All |Distinct] save Anexo utilizado con el análisis de subconsulta para implementar las consultas UNION y UNION ALL. Puede funcionar desde el disco en virtud del comando "save".
Otros:
Hash hash Se utiliza para combinaciones internas y combinaciones externas de izquierda y derecha (proporciona una entrada a la combinación hash). El operador Hash crea la tabla hash para la tabla interna de una combinación. (La tabla interna es la tabla que se revisa para encontrar coincidencias y, en una combinación de dos tablas, es por lo general la más pequeña de las dos).
Límite límite Evalúa la cláusula LIMIT.
Materialize save Materializa las filas para ingresarlas en combinaciones de bucle anidado y en algunas combinaciones de fusión. Puede funcionar desde el disco.
-- parse Se usa para analizar datos de entrada de texto durante una carga.
-- project Se usa para reordenar columnas y expresiones de computación, es decir, datos del proyecto.
Resultado -- Ejecuta funciones escalares que no implican el acceso a ninguna tabla.
-- return Devuelve filas al nodo principal o cliente.
Subplan -- Se utiliza para algunas subconsultas.
Unique unique Elimina los duplicados de las consultas SELECT DISTINCT y UNION.
Ventana window Calcula la adición y clasificación de funciones de ventana. Puede funcionar desde el disco.
Operaciones de red:
Network (Broadcast) bcast Broadcast también es una atributo de los operadores y pasos de Join Explain.
Network (Distribute) dist Distribuye filas en nodos de computación para el procesamiento paralelo del clúster del data warehouse.
Network (Send to Leader) return Envía los resultados de regreso al nodo principal para seguir trabajando con ellos.
Operaciones DML (operadores que modifican datos):
Insert (using Result) insert Inserta datos.
Delete (Scan + Filter) eliminar Elimina datos. Puede funcionar desde el disco.
Update (Scan + Filter) delete, insert Implementado como eliminar e insertar.

Uso de EXPLAIN para RLS

Si una consulta contiene una tabla que está sujeta a políticas de seguridad de la fila (RLS), EXPLAIN muestra un nodo especial SecureScan de RLS. Amazon Redshift también registra el mismo tipo de nodo en la tabla del sistema STL_EXPLAIN. EXPLAIN no revela el predicado de RLS que se aplica a dim_tbl. El tipo de nodo SecureScan de RLS sirve como indicador de que el plan de ejecución contiene operaciones adicionales que son invisibles para el usuario actual.

En el siguiente ejemplo, se ilustra un nodo SecureScan de RLS.

EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN ------------------------------------------------------------------------ XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") -> *XN* *RLS SecureScan f (cost=0.00..0.14 rows=2 width=4)* Filter: ((k_dim / 10) > 0) -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)

Para habilitar una investigación completa de los planes de consultas que están sujetos a RLS, Amazon Redshift ofrece los permisos del sistema EXPLAIN RLS. Los usuarios a los que se les haya otorgado este permiso pueden inspeccionar planes de consulta completos que también incluyan predicados de RLS.

En el siguiente ejemplo, se ilustra un análisis de secuencia adicional debajo del nodo SecureScan de RLS que también incluye el predicado de política de RLS (k_dim > 1).

EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN --------------------------------------------------------------------------------- XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") *-> XN RLS SecureScan f (cost=0.00..0.14 rows=2 width=4) Filter: ((k_dim / 10) > 0)* -> *XN* *Seq Scan on fact_tbl rls_table (cost=0.00..0.06 rows=5 width=8) Filter: (k_dim > 1)* -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)

Mientras se concede el permiso EXPLAIN RLS a un usuario, Amazon Redshift registra el plan de consulta completo, incluidos los predicados de RLS, en la tabla del sistema STL_EXPLAIN. Las consultas que se ejecutan mientras no se concede este permiso se registrarán sin los internos de RLS. La concesión o eliminación del permiso EXPLAIN RLS no cambiará lo que Amazon Redshift haya registrado en STL_EXPLAIN para consultas anteriores.

Relaciones de Redshift protegidas por RLS de AWS Lake Formation

En el siguiente ejemplo se ilustra un nodo LF SecureScan que puede utilizar para ver las relaciones entre Lake Formation y RLS.

EXPLAIN SELECT * FROM lf_db.public.t_share WHERE a > 1; QUERY PLAN --------------------------------------------------------------- XN LF SecureScan t_share (cost=0.00..0.02 rows=2 width=11) (2 rows)

Ejemplos

nota

Para estos ejemplos, la salida de ejemplo puede variar según la configuración de Amazon Redshift.

El siguiente ejemplo devuelve el plan de consulta para una consulta que selecciona EVENTID, EVENTNAME, VENUEID y VENUENAME de la tablas EVENT y VENUE:

explain select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (5 rows)

El siguiente ejemplo devuelve el plan de consulta para la misma consulta con resultados más detallados:

explain verbose select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- {HASHJOIN :startup_cost 2.52 :total_cost 58653620.93 :plan_rows 8712 :plan_width 43 :best_pathkeys <> :dist_info DS_DIST_OUTER :dist_info.dist_keys ( TARGETENTRY { VAR :varno 2 :varattno 1 ... XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (519 rows)

El siguiente ejemplo devuelve el plan de consulta para una instrucción CREATE TABLE AS (CTAS):

explain create table venue_nonulls as select * from venue where venueseats is not null; QUERY PLAN ----------------------------------------------------------- XN Seq Scan on venue (cost=0.00..2.02 rows=187 width=45) Filter: (venueseats IS NOT NULL) (2 rows)