

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden eines Erläuterungsplans zur Verbesserung der Abfrageleistung von Babelfish
<a name="working-with-babelfish-usage-notes-features.using.explain"></a>

Ab Version 2.1.0 enthält Babelfish zwei Funktionen, die den PostgreSQL-Optimierer transparent verwenden, um geschätzte und tatsächliche Abfragepläne für T-SQL-Abfragen am TDS-Port zu generieren. Diese Funktionen ähneln der Verwendung von SET STATISTICS PROFILE oder SET SHOWPLAN\$1ALL mit SQL-Server-Datenbanken, um langsam laufende Abfragen zu identifizieren und zu verbessern.

**Anmerkung**  
Das Abrufen von Abfrageplänen von Funktionen, Kontrollflüssen und Cursor wird derzeit nicht unterstützt. 

In der Tabelle finden Sie einen Vergleich der Funktionen zur Erläuterung des Abfrageplans in SQL Server, Babelfish und PostgreSQL. 


|  SQL Server  | Babelfish  | PostgreSQL  | 
| --- | --- | --- | 
| SHOWPLAN\$1ALL  | BABELFISH\$1SHOWPLAN\$1ALL  | EXPLAIN  | 
| STATISTICS PROFILE  | BABELFISH\$1STATISTICS PROFILE  | EXPLAIN ANALYZE  | 
| Verwendet den SQL-Server-Optimierer  | Verwendet den PostgreSQL-Optimierer  | Verwendet den PostgreSQL-Optimierer  | 
| Ein- und Ausgabeformat von SQL Server  | Eingabeformat von SQL Server und Ausgabeformat von PostgreSQL  | Ein- und Ausgabeformat von PostgreSQL  | 
| Für die Sitzung einstellen  | Für die Sitzung einstellen  | Auf eine bestimmte Anweisung anwenden  | 
| Unterstützt Folgendes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonRDS/latest/AuroraUserGuide/working-with-babelfish-usage-notes-features.using.explain.html)  | Unterstützt Folgendes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonRDS/latest/AuroraUserGuide/working-with-babelfish-usage-notes-features.using.explain.html)  | Unterstützt Folgendes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonRDS/latest/AuroraUserGuide/working-with-babelfish-usage-notes-features.using.explain.html)  | 

Verwenden Sie die Babelfish-Funktionen wie folgt:
+ SET BABELFISH\$1SHOWPLAN\$1ALL [ON\$1OFF] – Legen Sie diese Funktion auf ON fest, um einen geschätzten Abfrageausführungsplan zu generieren. Diese Funktion implementiert das Verhalten des PostgreSQL-Befehls `EXPLAIN`. Verwenden Sie diesen Befehl, um den Erläuterungsplan für die angegebene Abfrage abzurufen.
+ SET BABELFISH\$1STATISTICS PROFILE [ON\$1OFF] – Legen Sie diese Funktion auf ON fest, um tatsächliche Abfrageausführungspläne zu erhalten. Diese Funktion implementiert das Verhalten des PostgreSQL-Befehls `EXPLAIN ANALYZE`. 

Weitere Informationen zu den PostgreSQL-Befehlen `EXPLAIN` und `EXPLAIN ANALYZE` finden Sie unter [EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html) in der PostgreSQL-Dokumentation.

**Anmerkung**  
Ab Version 2.2.0 können Sie den Parameter `escape_hatch_showplan_all` auf *Ignorieren* einstellen, um die Verwendung des Präfixes *BABELFISH\$1* in der SQL-Server-Syntax für die SET-Befehle `SHOWPLAN_ALL` und `STATISTICS PROFILE` zu vermeiden.

Die folgende Befehlssequenz aktiviert beispielsweise die Abfrageplanung und gibt dann einen geschätzten Abfrageausführungsplan für die SELECT-Anweisung zurück, ohne die Abfrage auszuführen. In diesem Beispiel wird die SQL-Server-Beispieldatenbank `northwind` mit dem `sqlcmd`-Befehlszeilentool zum Abfragen des TDS-Ports verwendet: 

```
1> SET BABELFISH_SHOWPLAN_ALL ON
2> GO
1> SELECT t.territoryid, e.employeeid FROM
2> dbo.employeeterritories e, dbo.territories t
3> WHERE e.territoryid=e.territoryid ORDER BY t.territoryid;
4> GO

QUERY PLAN                                                                                                                                                                                                                                      
------------------------------------------------------------------------------------                                                                                                              
Query Text: SELECT t.territoryid, e.employeeid FROM
dbo.employeeterritories e, dbo.territories t
WHERE e.territoryid=e.territoryid ORDER BY t.territoryid
Sort  (cost=6231.74..6399.22 rows=66992 width=10)
  Sort Key: t.territoryid NULLS FIRST
  ->  Nested Loop  (cost=0.00..861.76 rows=66992 width=10)  
        ->  Seq Scan on employeeterritories e  (cost=0.00..22.70 rows=1264 width=4)
              Filter: ((territoryid)::"varchar" IS NOT NULL)
        ->  Materialize  (cost=0.00..1.79 rows=53 width=6)
              ->  Seq Scan on territories t  (cost=0.00..1.53 rows=53 width=6)
```

Wenn Sie mit der Überprüfung und Anpassung Ihrer Abfrage fertig sind, deaktivieren Sie die Funktion wie nachfolgend gezeigt:

```
1> SET BABELFISH_SHOWPLAN_ALL OFF
```

Wenn BABELFISH\$1STATISTICS PROFILE auf ON festgelegt ist, gibt jede ausgeführte Abfrage ihre reguläre Ergebnismenge zurück, gefolgt von einer zusätzlichen Ergebnismenge, die tatsächliche Abfrageausführungspläne anzeigt. Babelfish generiert den Abfrageplan, der die schnellste Ergebnismenge liefert, wenn die SELECT-Anweisung aufgerufen wird. 

```
1> SET BABELFISH_STATISTICS PROFILE ON
1>
2> GO
1> SELECT e.employeeid, t.territoryid FROM
2> dbo.employeeterritories e, dbo.territories t
3> WHERE t.territoryid=e.territoryid ORDER BY t.territoryid;
4> GO
```

Die Ergebnismenge und der Abfrageplan werden zurückgegeben (dieses Beispiel zeigt nur den Abfrageplan). 

```
QUERY PLAN                                                                                                                                                                                                                                
---------------------------------------------------------------------------
Query Text: SELECT e.employeeid, t.territoryid FROM
dbo.employeeterritories e, dbo.territories t
WHERE t.territoryid=e.territoryid ORDER BY t.territoryid
Sort  (cost=42.44..43.28 rows=337 width=10)
  Sort Key: t.territoryid NULLS FIRST                                                                                                                                               
  ->  Hash Join  (cost=2.19..28.29 rows=337 width=10)
       Hash Cond: ((e.territoryid)::"varchar" = (t.territoryid)::"varchar")
        ->  Seq Scan on employeeterritories e  (cost=0.00..22.70 rows=1270 width=36)
        ->  Hash  (cost=1.53..1.53 rows=53 width=6)
             ->  Seq Scan on territories t  (cost=0.00..1.53 rows=53 width=6)
```

Weitere Informationen darüber, wie Sie Ihre Abfragen und die vom PostgreSQL-Optimierer zurückgegebenen Ergebnisse analysieren können, finden Sie unter [explain.depesz.com](https://www.depesz.com/2013/04/16/explaining-the-unexplainable/). Weitere Informationen zu den PostgreSQL-Befehlen EXPLAIN und EXPLAIN ANALYZE finden Sie unter [EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html) in der PostgreSQL-Dokumentation. 

## Parameter, die Erläuterungsoptionen von Babelfish steuern
<a name="working-with-babelfish-usage-notes-features.using.explain.parameters"></a>

Sie können die in der folgenden Tabelle aufgeführten Parameter verwenden, um die Art der Informationen zu steuern, die in Ihrem Abfrageplan angezeigt werden. 


| Parameter | Beschreibung | 
| --- | --- | 
| babelfishpg\$1tsql.explain\$1buffers | Ein boolescher Wert, der Informationen zur Puffernutzung für den Optimierer ein- und ausschaltet. (Standardwert: off) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1costs | Ein boolescher Wert, der geschätzte Start- und Gesamtkosteninformationen für den Optimierer ein- und ausschaltet. (Standardwert: on) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1format | Gibt das Ausgabeformat für den `EXPLAIN`-Plan an. (Standardwert: text) (Zulässig: text, xml, json, yaml)  | 
| babelfishpg\$1tsql.explain\$1settings | Ein boolescher Wert, der die Aufnahme von Informationen zu Konfigurationsparametern in die EXPLAIN-Planausgabe ein- oder ausschaltet. (Standardwert: off) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1summary | Ein boolescher Wert, der zusammenfassende Informationen wie die Gesamtzeit nach dem Abfrageplan ein- oder ausschaltet. (Standardwert: on) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1timing | Ein boolescher Wert, der die tatsächliche Startzeit und die Zeit, die in jedem Knoten in der Ausgabe verbracht wird, ein- oder ausschaltet. (Standardwert: on) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1verbose | Ein boolescher Wert, der die detaillierteste Version eines Erläuterungsplans ein- oder ausschaltet. (Standardwert: off) (Zulässig: off, on)  | 
| babelfishpg\$1tsql.explain\$1wal | Ein boolescher Wert, der die Generierung von WAL-Datensatzinformationen im Rahmen eines Erläuterungsplans aktiviert (oder deaktiviert). (Standardwert: off) (Zulässig: off, on)  | 

Sie können die Werte aller Babelfish-bezogenen Parameter in Ihrem System überprüfen, indem Sie entweder den PostgreSQL-Client oder den SQL-Server-Client verwenden. Führen Sie den folgenden Befehl aus, um Ihre aktuellen Parameterwerte abzurufen: 

```
1> execute sp_babelfish_configure '%explain%';
2> GO
```

In der folgenden Ausgabe sehen Sie, dass alle Einstellungen für diesen speziellen Babelfish-DB-Cluster auf ihre Standardwerte festgelegt sind. In diesem Beispiel wird nicht die gesamte Ausgabe gezeigt.

```
             name                   setting                     short_desc
---------------------------------- -------- --------------------------------------------------------
babelfishpg_tsql.explain_buffers   off      Include information on buffer usage
babelfishpg_tsql.explain_costs     on       Include information on estimated startup and total cost
babelfishpg_tsql.explain_format    text     Specify the output format, which can be TEXT, XML, JSON, or YAML
babelfishpg_tsql.explain_settings  off      Include information on configuration parameters
babelfishpg_tsql.explain_summary   on       Include summary information (e.g.,totaled timing information) after the query plan 
babelfishpg_tsql.explain_timing    on       Include actual startup time and time spent in each node in the output
babelfishpg_tsql.explain_verbose   off      Display additional information regarding the plan
babelfishpg_tsql.explain_wal       off      Include information on WAL record generation

(8 rows affected)
```

Sie können die Einstellung für diese Parameter mit `sp_babelfish_configure` ändern, wie im folgenden Beispiel veranschaulicht. 

```
1> execute sp_babelfish_configure 'explain_verbose', 'on';
2> GO
```

Wenn Sie die Einstellung auf einer clusterweiten Ebene dauerhaft festlegen möchten, schließen Sie das Schlüsselwort *Server* ein, wie im folgenden Beispiel gezeigt. 

```
1> execute sp_babelfish_configure 'explain_verbose', 'on', 'server';
2> GO
```