Un article sur l'insertion spéculative dans Postgres et les améliorations de performances qu'elle apporte.
L'insertion spéculative est faite avec la construction INSERT… ON CONFLICT
.
Cette variante vérifie d'abord que l'insert peut être réalisé, ce qui évite la création de "dead tuples" qui sont des lignes n'ayant pu être insérées mais quand présentes jusqu'au prochain garbage collect (vacuum).
Sur une table ayant 1 millions de dead tuples, il y a une différence de perfs de presque 8000% au SELECT ! (0.7 ms vs 54 ms)
Les insert ayant échoués vont aussi incrémenter les ID de transaction et après 200 millions, cela va déclencher le garbage collector pour un nettoyage mais aussi ralentir toute la base de données.
Finalement, tous ces dead tuples consomment aussi de l'espace de stockage.
Bref, il est temps de passer à INSERT… ON CONFLICT DO NOTHING
😄
(Merci Gaël pour le partage)