Verwenden von T-SQL-Abfragehinweise zur Verbesserung der Abfrageleistung von Babelfish - Amazon Aurora

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 von T-SQL-Abfragehinweise zur Verbesserung der Abfrageleistung von Babelfish

Ab Version 2.3.0 unterstützt Babelfish die Verwendung von Abfragehinweisen mit pg_hint_plan. In Aurora PostgreSQL ist pg_hint_plan standardmäßig installiert. Weitere Informationen zur PostgreSQL-Erweiterung pg_hint_plan finden Sie unter https://github.com/ossc-db/pg_hint_plan. Weitere Informationen zu der Version dieser Erweiterung, die von Aurora PostgreSQL unterstützt wird, finden Sie unter Versionen der Erweiterungen für Amazon Aurora PostgreSQL in den Versionshinweisen für Aurora PostgreSQL.

Mit dem Abfrageoptimierer kann für jede SQL-Anweisung der bestmögliche Ausführungsplans ermittelt werden. Bei der Auswahl eines Plans berücksichtigt der Abfrageoptimierer sowohl das Kostenmodell der Engine als auch die Spalten- und Tabellenstatistiken. Der vorgeschlagene Plan entspricht jedoch möglicherweise nicht den Anforderungen Ihrer Datensätze. Daher werden mit Abfragehinweisen die Leistungsprobleme angesprochen, um die Ausführungspläne zu verbessern. Ein query hint ist Syntax, die dem SQL-Standard hinzugefügt wurde und die Datenbank-Engine anweist, wie die Abfrage auszuführen ist. Beispielsweise kann ein Hinweis die Engine anweisen, einem sequenziellen Scan zu folgen und jeden Plan zu überschreiben, den der Abfrageoptimierer ausgewählt hat.

Aktivieren von T-SQL-Abfragehinweisen in Babelfish

Derzeit ignoriert Babelfish standardmäßig alle T-SQL-Hinweise. Wenn Sie T-SQL-Hinweise anwenden möchten, führen Sie den Befehl sp_babelfish_configure mit dem Wert enable_pg_hint auf ON (EIN) aus.

EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on' [, 'server']

Sie können die Einstellungen auf einer clusterweiten Ebene dauerhaft festlegen, indem Sie das Schlüsselwort Server einschließen. Verwenden Sie „Server“ nicht, wenn Sie die Einstellung nur für die aktuelle Sitzung festlegen möchten.

Nach Einstellung von enable_pg_hint auf ON (EIN) wendet Babelfish die folgenden T-SQL-Hinweise an.

  • INDEX-Hinweise

  • JOIN-Hinweise

  • FORCE ORDER-Hinweis

  • MAXDOP-Hinweis

Mit der folgenden Befehlssequenz wird beispielsweise pg_hint_plan aktiviert.

1> CREATE TABLE t1 (a1 INT PRIMARY KEY, b1 INT); 2> CREATE TABLE t2 (a2 INT PRIMARY KEY, b2 INT); 3> GO 1> EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on'; 2> GO 1> SET BABELFISH_SHOWPLAN_ALL ON; 2> GO 1> SELECT * FROM t1 JOIN t2 ON t1.a1 = t2.a2; --NO HINTS (HASH JOIN) 2> GO

Auf die SELECT-Anweisung wird kein Hinweis angewendet. Der Abfrageplan wird ohne Hinweis zurückgegeben.

QUERY PLAN --------------------------------------------------------------------------- Query Text: SELECT * FROM t1 JOIN t2 ON t1.a1 = t2.a2 Hash Join (cost=60.85..99.39 rows=2260 width=16) Hash Cond: (t1.a1 = t2.a2) -> Seq Scan on t1 (cost=0.00..32.60 rows=2260 width=8) -> Hash (cost=32.60..32.60 rows=2260 width=8) -> Seq Scan on t2 (cost=0.00..32.60 rows=2260 width=8)
1> SELECT * FROM t1 INNER MERGE JOIN t2 ON t1.a1 = t2.a2; 2> GO

Der Abfragehinweis wird auf die SELECT-Anweisung angewendet. Die folgende Ausgabe zeigt, dass der Abfrageplan mit Merge Join zurückgegeben wird.

QUERY PLAN --------------------------------------------------------------------------- Query Text: SELECT/*+ MergeJoin(t1 t2) Leading(t1 t2)*/ * FROM t1 INNER JOIN t2 ON t1.a1 = t2.a2 Merge Join (cost=0.31..190.01 rows=2260 width=16) Merge Cond: (t1.a1 = t2.a2) -> Index Scan using t1_pkey on t1 (cost=0.15..78.06 rows=2260 width=8) -> Index Scan using t2_pkey on t2 (cost=0.15..78.06 rows=2260 width=8)
1> SET BABELFISH_SHOWPLAN_ALL OFF; 2> GO

Einschränkungen

Beachten Sie bei der Verwendung der Abfragehinweise die folgenden Einschränkungen:

  • Wenn ein Abfrageplan zwischengespeichert wird, bevor enable_pg_hint aktiviert wird, werden in derselben Sitzung keine Hinweise angewendet. Sie werden in der neuen Sitzung angewendet.

  • Wenn Schemanamen explizit angegeben werden, können keine Hinweise angewendet werden. Sie können Tabellenaliase als Problemumgehung verwenden.

  • Ein Abfragehinweis kann nicht auf Ansichten und Unterabfragen angewendet werden.

  • Hinweise funktionieren nicht für UPDATE/DELETE-Anweisungen mit JOINs.

  • Ein Indexhinweis für einen nicht existierenden Index oder eine Tabelle wird ignoriert.

  • Der FORCE ORDER-Hinweis funktioniert nicht für HASH JOINs und Nicht-ANSI JOINS.