Planificateur de requêtes de PostgreSQL – Les parcours

Magazine
Marque
GNU/Linux Magazine
Numéro
170
Mois de parution
avril 2014
Spécialité(s)


Résumé

Un moteur de bases de données est composé de plusieurs parties, ne serait-ce qu'au niveau des requêtes : un analyseur syntaxique, un planificateur, un exécuteur. Le planificateur est certainement l'un des composants les plus importants : de ses capacités vont dépendre les performances du moteur. Un mauvais plan peut rapidement ralentir tout un système, alors qu'un bon plan permettra à la fois de bonnes performances et une grande interaction des différentes sessions. Cet article va tenter d'expliquer le planificateur de PostgreSQL, ses capacités, ses points forts, comme ses points faibles, pour permettre à tout un chacun de comprendre pourquoi telle requête utilise tel plan d'exécution.


1. Schéma et données de tests

Commençons par créer une base, y créer une table et lui ajouter quelques données :

$ psql postgres

psql (9.3.3)

Type "help" for help.

postgres=# CREATE DATABASE planif;

CREATE DATABASE

postgres=# \c planif

You are now connected to database "planif" as user "guillaume".

planif=# CREATE TABLE t1 (c1 integer, c2 text);

CREATE TABLE

planif=# ALTER TABLE t1 SET (autovacuum_enabled=off);

ALTER TABLE

planif=# INSERT INTO t1

planif-# SELECT i, md5(random()::text) FROM generate_series(1, 1000000) AS i;

INSERT 0 1000000

La commande ALTER TABLE sert à désactiver l'autovacuum sur la table, le but étant de contrôler quand nous allons faire un ANALYZE ou un VACUUM sur cette table. Le reste…

La suite est réservée aux abonnés. Il vous reste 97% à découvrir.
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez des listes de lecture et des contenus Premium
  • Consultez les nouveaux articles en avant-première
Envie de lire la suite ? Rejoignez Connect
Je m'abonne maintenant