Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation des indicateurs de requête T-SQL pour améliorer les performances des requêtes Babelfish
À partir de la version 2.3.0, Babelfish prend en charge l'utilisation des indicateurs de requête avec pg_hint_plan
. Dans Aurora PostgreSQL, pg_hint_plan
est installé par défaut. Pour plus d'informations sur l'extension PostgreSQL pg_hint_plan
, consultez https://github.com/ossc-db/pg_hint_plan
L'optimiseur de requêtes est conçu pour rechercher le plan d'exécution optimal pour une instruction SQL. Lors de la sélection d'un plan, l'optimiseur de requêtes prend en compte à la fois le modèle de coût du moteur et les statistiques des colonnes et des tables. Toutefois, le plan suggéré peut ne pas répondre aux besoins de vos jeux de données. Ainsi, les indicateurs de requête résolvent les problèmes de performances afin d'améliorer les plans d'exécution. query hint
est une syntaxe ajoutée à la norme SQL qui indique au moteur de base de données comment exécuter la requête. Par exemple, un indicateur peut indiquer au moteur de suivre une analyse séquentielle et de remplacer tout plan sélectionné par l'optimiseur de requêtes.
Activer les indicateurs de requête T-SQL dans Babelfish
Actuellement, Babelfish ignore tous les indicateurs T-SQL par défaut. Pour appliquer des indicateurs T-SQL, exécutez la commande sp_babelfish_configure
avec la valeur enable_pg_hint sur ON.
EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on' [, 'server']
Vous pouvez rendre les paramètres permanents à l'échelle du cluster en incluant le mot-clé server. Pour configurer les paramètres de la session en cours uniquement, n'utilisez pas server.
Une fois enable_pg_hint
sur ON, Babelfish applique les indicateurs T-SQL suivants.
-
Indicateurs INDEX
-
Indicateurs JOIN
-
Indicateur FORCE ORDER
-
Indicateur MAXDOP
Par exemple, la séquence de commandes suivante active pg_hint_plan
.
1>
CREATE TABLE t1 (a1 INT PRIMARY KEY, b1 INT);2>
CREATE TABLE t2 (a2 INT PRIMARY KEY, b2 INT);3>
GO1>
EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on';2>
GO1>
SET BABELFISH_SHOWPLAN_ALL ON;2>
GO1>
SELECT * FROM t1 JOIN t2 ON t1.a1 = t2.a2; --NO HINTS (HASH JOIN)2>
GO
Aucun indicateur n'est appliqué à l'instruction SELECT. Le plan de requête sans indicateur est renvoyé.
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
L'indicateur de requête est appliqué à l'instruction SELECT. La sortie suivante indique que le plan de requête avec un fusion JOIN est renvoyé.
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
Limites
Lorsque vous utilisez les indicateurs de requête, prenez en compte les limites suivantes :
-
Si un plan de requête est mis en cache avant d'activer
enable_pg_hint
, les indicateurs ne seront pas appliqués au cours de la même session. Ils seront appliqués lors de la nouvelle session. -
Si les noms de schéma sont explicitement donnés, les indicateurs ne peuvent pas être appliqués. Vous pouvez utiliser des alias de table pour contourner le problème.
-
Un indicateur de requête ne peut pas être appliqué aux vues et aux sous-requêtes.
-
Les indicateurs ne fonctionnent pas pour les instructions UPDATE/DELETE avec JOIN.
-
Un indicateur INDEX pour un index ou une table inexistant est ignoré.
-
L'indicateur FORCE ORDER ne fonctionne pas pour HASH JOIN et non HASH JOIN.