Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
STL_EXPLAIN
Zeigt den EXPLAIN-Plan für eine Abfrage an, die zur Ausführung übermittelt wurde.
STL_EXPLAIN ist für alle Benutzer sichtbar. Superuser können alle Zeilen sehen; reguläre Benutzer können nur ihre eigenen Daten sehen. Weitere Informationen finden Sie unter Sichtbarkeit der Daten in Systemtabellen und Ansichten.
Anmerkung
STL_EXPLAIN enthält nur Abfragen, die auf bereitgestellten Haupt-Clustern ausgeführt werden. Abfragen, die auf Parallelitätsskalierungs-Clustern oder in Serverless-Namespaces ausgeführt werden, sind nicht enthalten. Um auf Erklärpläne zuzugreifen, die sowohl auf Haupt-Clustern als auch auf Parallelitätsskalierungs-Clustern und in Serverless-Namespaces ausgeführt werden, empfehlen wir, die SYS-Überwachungsansicht SYS_QUERY_EXPLAIN zu verwenden. Die Daten in der SYS-Überwachungsansicht sind so formatiert, dass sie leichter verwendbar und besser verständlich sind.
Tabellenspalten
| Spaltenname | Datentyp | Beschreibung |
|---|---|---|
| userid | integer | ID des Benutzers, der den Eintrag generiert hat. |
| query | integer | Abfrage-ID. Die Abfrage-Spalte kann verwendet werden, um andere Systemtabellen und Anzeigen anzufügen. |
| nodeid | integer | Plan-Knoten-ID, wo ein Knoten mit einem oder mehreren Schritten in der Ausführung der Abfrage verwunden ist. |
| parentid | integer | Plan-Knoten-ID für einen übergeordneten Knoten. Zu einem übergeordneten Knoten gehört eine bestimmte Anzahl untergeordneter Knoten. So ist beispielsweise ein Zusammenführungsknoten der übergeordnete Knoten der Scans in den verbundenen Tabellen. |
| plannode | character(400) | Der Knotentext aus der EXPLAIN-Ausgabe. Planknoten, die sich auf die Ausführung auf Datenverarbeitungsknoten beziehen, haben das Präfix XN in der EXPLAIN-Ausgabe. |
| info | character(400) | Qualifizierer- und Filterinformationen für den Plan-Knoten. Diese Spalte enthält zum Beispiel Join-Bedingungen und Einschränkungen für WHERE-Klauseln. |
Beispielabfragen
Sehen Sie sich die folgende EXPLAIN-Ausgabe für eine aggregierte Join-Abfrage an:
explain select avg(datediff(day, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; QUERY PLAN ------------------------------------------------------------------------------ XN Aggregate (cost=6350.30..6350.31 rows=1 width=16) -> XN Hash Join DS_DIST_NONE (cost=47.08..6340.89 rows=3766 width=16) Hash Cond: ("outer".listid = "inner".listid) -> XN Seq Scan on listing (cost=0.00..1924.97 rows=192497 width=12) -> XN Hash (cost=37.66..37.66 rows=3766 width=12) -> XN Seq Scan on sales (cost=0.00..37.66 rows=3766 width=12) (6 rows)
Wenn Sie diese Abfrage ausführen und die Abfrage-ID 10 ist, können Sie anhand der Tabelle STL_EXPLAIN die gleichen Arten von Informationen sehen, die der Befehl EXPLAIN ausgibt:
select query,nodeid,parentid,substring(plannode from 1 for 30), substring(info from 1 for 20) from stl_explain where query=10 order by 1,2; query| nodeid |parentid| substring | substring -----+--------+--------+--------------------------------+------------------- 10 | 1 | 0 |XN Aggregate (cost=6717.61..6 | 10 | 2 | 1 | -> XN Merge Join DS_DIST_NO | Merge Cond:("outer" 10 | 3 | 2 | -> XN Seq Scan on lis | 10 | 4 | 2 | -> XN Seq Scan on sal | (4 rows)
Betrachten Sie folgende Abfrage:
select event.eventid, sum(pricepaid) from event, sales where event.eventid=sales.eventid group by event.eventid order by 2 desc; eventid | sum --------+---------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 ...
Wenn die ID dieser Abfrage 15 ist, gibt die folgende Systemansichtsabfrage die ausgeführten Plan-Knoten aus. In diesem Fall ist die Reihenfolge der Knoten umgekehrt, um die tatsächliche Ausführungsreihenfolge zu zeigen:
select query,nodeid,parentid,substring(plannode from 1 for 56) from stl_explain where query=15 order by 1, 2 desc; query|nodeid|parentid| substring -----+------+--------+-------------------------------------------------------- 15 | 8 | 7 | -> XN Seq Scan on eve 15 | 7 | 5 | -> XN Hash(cost=87.98..87.9 15 | 6 | 5 | -> XN Seq Scan on sales(cos 15 | 5 | 4 | -> XN Hash Join DS_DIST_OUTER(cos 15 | 4 | 3 | -> XN HashAggregate(cost=862286577.07.. 15 | 3 | 2 | -> XN Sort(cost=1000862287175.47..10008622871 15 | 2 | 1 | -> XN Network(cost=1000862287175.47..1000862287197. 15 | 1 | 0 |XN Merge(cost=1000862287175.47..1000862287197.46 rows=87 (8 rows)
Die folgende Abfrage ruft die Abfrage-IDs für alle Abfrage-Pläne ab, die eine Fensterfunktion beinhalten:
select query, trim(plannode) from stl_explain where plannode like '%Window%'; query| btrim -----+------------------------------------------------------------------------ 26 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33) 27 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33) (2 rows)