Tous les produits
Search
Centre de documentation

PolarDB:Use Elastic Parallel Query to accelerate index creation

Dernière mise à jour :Aug 22, 2026

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ètre polar_px_enable_btbuild=on seul n'active pas EPQ pour une construction d'index spécifique. Vous devez inclure WITH (px_build=on) dans l'instruction CREATE INDEX . Sans cela, PolarDB utilise la méthode native (séquentielle) de création d'index, et l'index résultant n'affiche aucune annotation px_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.

Performance comparison

Étapes suivantes