PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

32. JIT (compilation à la volée)

Ce chapitre décrit ce qu'est le JIT (compilation à la volée), et comment le configurer dans PostgreSQL™.

32.1. Qu'est-ce que le JIT ?

La compilation à la volée (ou JIT pour Just-in-Time Compilation) est le processus de transformation de l'évaluation d'un programme interprété en un programme natif, et ce pendant l'exécution. Par exemple, au lieu d'utiliser un code généraliste pouvant évaluer des expressions SQL arbitraires pour évaluer un prédicat SQL particulier comme WHERE a.col = 3, il est possible de générer une fonction spécifique à cette expression et qui peut être exécutée nativement par le CPU, apportant une accélération.

PostgreSQL™ sait procéder à une compilation JIT grâce à LLVM s'il a été compilé avec --with-llvm (voir --with-llvm).

Consultez src/backend/jit/README pour plus de détails.

32.1.1. JIT Opérations accélérées

Actuellement, l'implémentation JIT de PostgreSQL™ supporte l'accélération de l'évaluation d'expression et du décodage d'enregistrement. Plusieurs autres opérations pourraient être accélérées dans le futur.

L'évaluation d'expression est utilisée pour évaluer les clauses WHERE, les listes de colonnes, les agrégats et les projections. Elle peut être accélérée en générant du code spécifique à chaque cas.

Le décodage d'enregistrement est le processus de transformation d'un enregistrement sur disque (voir Section 68.6.1, « Disposition d'une ligne de table ») dans sa représentation en mémoire. Il peut être accéléré en créant une fonction spécifique au format de la table et au nombre de colonnes extraites.

32.1.2. Inclusion

PostgreSQL™ est très extensible et permet de définir de nouveaux types de données, fonctions, opérateurs et autres objets de base de données ; voir Chapitre 38, Étendre SQL. En fait, ceux intégrés sont implémentés avec à peu près les mêmes mécanismes. Cette extensibilité a un surcoût, par exemple à cause des appels de fonction (voir Section 38.3, « Fonctions utilisateur »). Pour réduire ce surcoût, la compilation JIT peut intégrer le corps des petites fonctions dans les expressions qui les utilisent. Cela permet d'optimiser un pourcentage significatif du surcoût.

32.1.3. Optimisation

LLVM™ permet d'optimiser le code généré. Certaines optimisations sont suffisamment peu coûteuses pour être accomplies à chaque utilisation du JIT, alors que d'autres n'ont de bénéfice que pour les requêtes durant plus longtemps. Voir pour plus de détails sur les optimisations.