Introduction
Le projet pg_jitter propose une solution de compilation JIT (Just-In-Time) pour PostgreSQL, visant à améliorer les performances de l'exécution des requêtes. Cette solution offre trois backends alternatifs : sljit, AsmJit et MIR, permettant une compilation plus rapide et une exécution compétitive des requêtes sur les versions 14 à 18 de PostgreSQL.
Contexte Technique
La compilation JIT a été introduite dans Postgres 11 en 2018 pour résoudre le problème de l'interprétation des expressions et des boucles inefficaces lors des conversions de données internes. Cependant, la compilation JIT basée sur LLVM est connue pour être lente, ce qui la rend moins adaptée aux requêtes OLTP (Online Transactional Processing). pg_jitter propose une génération de code natif avec des temps de compilation à l'échelle des microsecondes, rendant la compilation JIT plus efficace pour un plus large éventail de requêtes.
Les temps de compilation typiques pour les différents backends sont les suivants : sljit (dizaines à quelques centaines de microsecondes), AsmJIT (centaines de microsecondes), MIR (centaines de microsecondes à quelques millisecondes), et LLVM (dizaines à centaines de millisecondes).
Analyse et Implications
L'impact de la compilation JIT est plus large que prévu, car l'exécution peut être ralentie jusqu'à 1 ms en raison de facteurs tels que le cache processeur froid et les effets de la pression mémoire accrue. Il est donc recommandé d'éviter la compilation JIT pour les requêtes très rapides, telles que les recherches par point ou les requêtes traitant uniquement quelques enregistrements.
Les résultats des tests montrent que sljit est le backend le plus consistant, offrant des améliorations de performances de 5 à 25 % par rapport à l'interpréteur sur tous les workloads. AsmJIT excelle sur les requêtes à lignes larges et à déformation lourde, tandis que MIR offre des gains solides tout en étant le backend le plus portable.
Perspective
Il est important de surveiller les limites et les prochaines étapes du projet pg_jitter, notamment en termes de tests et de validation à grande échelle. Le code source actuel est considéré comme de qualité bêta et nécessite une vérification plus approfondie pour garantir sa stabilité et ses performances dans des environnements de production.
Les utilisateurs peuvent configurer pg_jitter pour utiliser un backend spécifique ou basculer entre les backends en fonction des besoins de leur workload. La prise en charge de PostgreSQL 14 à 18 et la facilité d'installation et de configuration font de pg_jitter une solution attrayante pour améliorer les performances des bases de données PostgreSQL.