La création d'index B-tree sur de grandes tables peut prendre beaucoup de temps, ce qui bloque les fenêtres de maintenance et ralentit les migrations de schéma. Elastic Parallel Query (EPQ) parallélise l'analyse de la table heap lors de la création d'index, réduisant le temps de construction à environ un cinquième de celui de la méthode native séquentielle.
Fonctionnement
Sans EPQ, PolarDB for PostgreSQL (Compatible with Oracle) analyse la table heap de manière séquentielle pour construire les entrées d'index, puis assemble l'arbre B à partir de ces entrées.
Lorsque EPQ est activé, un processus coordinateur de requête (QC) distribue l'analyse de la table heap entre plusieurs workers parallèles. Chaque worker analyse une partition de la table et transmet les résultats au processus de création d'index, qui assemble l'arbre B final.
Limitations
| Limitation | Détails |
|---|---|
| Types de colonnes | EPQ n'accélère la création d'index que sur les colonnes standards. Les colonnes d'expression ne sont pas prises en charge. |
| Syntaxe | Les options CONCURRENTLY et INCLUDE ne sont pas prises en charge avec EPQ. |
Paramètres
Configurez les paramètres suivants avant de créer des index avec EPQ.
| Paramètre | Valeur par défaut | Recommandé | Description |
|---|---|---|---|
polar_px_enable_btbuild |
off |
on |
Active la création d'index accélérée par EPQ. |
polar_px_dop_per_node |
1 |
8 ou 16 |
Degré de parallélisme (DOP) par nœud. Contrôle également le DOP pour les . |
polar_px_enable_replay_wait |
(auto) | — | S'active automatiquement pour la session en cours lorsque polar_px_enable_btbuild=on. Garantit l'indexation des entrées de table les plus récentes. Se réinitialise à la valeur par défaut de la base de données une fois la création d'index terminée. |
polar_bt_write_page_buffer_size |
0 |
4096 |
Contrôle le comportement des E/S d'écriture lors de la création d'index. Unité : bloc. Maximum : 8192. Définir cette valeur sur 4096 réduit le temps de création d'index jusqu'à 20 %. |
Comportement de polar_bt_write_page_buffer_size
0(par défaut) : Vide les entrées d'index sur le disque bloc par bloc à mesure que chaque page d'index se remplit.Valeur non nulle : Met en mémoire tampon les entrées d'index dans un buffer noyau de la taille spécifiée et les vide toutes en une seule fois lorsque le buffer est plein, réduisant ainsi la surcharge liée à la planification fréquente des E/S.
Créer un index B-tree avec EPQ
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster PolarDB for PostgreSQL (Compatible with Oracle)
Les autorisations nécessaires pour exécuter des instructions DDL sur la table cible
Procédure
L'exemple suivant crée une table nommée test et construit un index en utilisant EPQ.
1. Créez la table de test.
CREATE TABLE test(id int, id2 int);
Vérifiez le schéma de la table :
\d test
Sortie attendue :
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
id2 | integer | | |
2. Activez la création d'index accélérée par EPQ.
SET polar_px_enable_btbuild=on;
Vérifiez le paramètre :
SHOW polar_px_enable_btbuild;
Sortie attendue :
polar_px_enable_btbuild
-------------------------
on
(1 row)
3. Créez l'index.
Ajoutez WITH (px_build=on) à l'instruction CREATE INDEX pour utiliser EPQ pour cette construction :
CREATE INDEX t ON test(id) WITH(px_build=on);
Le paramètrepolar_px_enable_btbuild=onseul n'active pas EPQ pour une construction d'index spécifique. Vous devez inclureWITH (px_build=on)dans l'instructionCREATE INDEX. Sans cela, PolarDB utilise la méthode native (séquentielle) de création d'index, et l'index résultant n'affiche aucune annotationpx_build.
4. Vérifiez que l'index a été créé avec EPQ.
\d test
Sortie attendue :
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
id2 | integer | | |
Indexes:
"t" btree (id) WITH (px_build=finish)
Le champ (px_build=finish) confirme l'utilisation d'EPQ.
Données de performance
EPQ crée des index pour les grandes tables environ cinq fois plus rapidement que la méthode native.
La figure suivante compare les performances de création d'index global avant et après l'activation d'EPQ, avec 130 Go de données.
