13 points par GN⁺ 2024-12-23 | 3 commentaires | Partager sur WhatsApp
  • SQLite est un magasin de stockage orienté lignes, enregistré sur disque sous forme de structure en B-arbre, et exécute les requêtes à l’aide d’une machine virtuelle appelée VDBE. Il est indépendant de la plateforme et peut fonctionner en mono-thread dans presque tous les environnements.
  • C’est une base de données généraliste, mais particulièrement performante pour les charges OLTP. En 2015, des chercheurs de l’université de Buffalo ont constaté que la plupart des requêtes étaient soit de simples consultations clé-valeur, soit des requêtes OLAP complexes.
  • Des chercheurs de l’université du Wisconsin-Madison ont cherché à accélérer les requêtes analytiques. Ils ont comparé les performances avec DuckDB et le Star Schema Benchmark (SSB).

Cause

  • Pour comprendre pourquoi SQLite était lent, ils ont utilisé l’option VDBE_PROFILE afin de mesurer les cycles CPU consommés par chaque instruction de la VDBE.
  • Deux opcodes, SeekRowID et Column, ont été identifiés comme les principales causes.

Jointures de base de données

  • Les bases de données implémentent les jointures de plusieurs façons, notamment par jointure en boucles imbriquées, jointure de hachage et jointure par tri-fusion.
  • SQLite utilise la plus simple, la « jointure en boucles imbriquées ». Elle ressemble à une traversée de B-arbre et coûte cher.

Importance de l’optimisation des jointures

  • Dans les opérations de jointure, l’ordre des tables est important. Le changer peut réduire fortement le nombre d’opérations. C’est un problème NP-difficile.
  • Il existe deux algorithmes de jointure plus efficaces que la jointure en boucles imbriquées, mais la jointure de hachage consomme beaucoup de mémoire, alors que SQLite s’exécute souvent dans des environnements contraints en mémoire.
  • Les chercheurs ont utilisé des filtres de Bloom pour améliorer l’efficacité spatiale et les faire tenir dans les lignes de cache CPU. Ils ont ajouté deux opcodes, Filter et FilterAdd.

Résultats

  • Après optimisation, les grandes barres bleues ont presque disparu de l’analyse des cycles CPU.
  • SQLite est devenu 7 à 10 fois plus rapide. Ce résultat de recherche a été intégré à SQLite v3.38.0.
  • Les filtres de Bloom s’accordent bien avec l’implémentation simple de SQLite avec un surcoût mémoire minimal et fonctionnent au sein du moteur de requêtes existant

3 commentaires

 
porteleaf 2024-12-24

Je viens de vérifier la version : ce système utilise la 3.42.0. À l’heure actuelle, la plus récente est la 3.47.2.

 
halfenif 2024-12-24

Je vais devoir vérifier la version de SQLite que j’utilise en ce moment.

En réalité, je génère aussi des fichiers Excel avec openpyxl, mais comme cela prend beaucoup de temps, il va falloir que je cherche s’il existe une autre bibliothèque.

 
savvykang 2024-12-24

Il vaudrait peut-être mieux faire un profilage, non ?