Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 13. Conseils sur les performances | Avance rapide | Suivant |
Comme nous avons vu dans la section pr�c�dente, le planificateur de requ�tes a besoin d'estimer le nombre de lignes r�cup�r�es par une requ�te pour faire les bons choix dans ses plans de requ�tes. Cette section fournit un aper�u rapide sur les statistiques que le syst�me utilise pour ces estimations.
Un composant des statistiques est le nombre total d'entr�es dans chaque table et index, ainsi que le nombre de blocs disque occup�s par chaque table et index. Cette information est conserv�e dans la table pg_class sur les colonnes reltuples et relpages. Nous pouvons la regarder avec des requ�tes comme celle-ci :
SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 'tenk1%'; relname | relkind | reltuples | relpages ---------------+---------+-----------+---------- tenk1 | r | 10000 | 233 tenk1_hundred | i | 10000 | 30 tenk1_unique1 | i | 10000 | 30 tenk1_unique2 | i | 10000 | 30 (4 rows)
Ici, nous pouvons voir que tenk1 contient 10000 lignes, comme pour ses index, mais que les index sont bien plus petits que la table (ce qui n'est pas surprenant).
Pour des raisons d'efficacit�, reltuples et relpages ne sont pas mis � jour en temps r�el, et du coup, elles contiennent habituellement des valeurs approximatives (ce qui est suffisant pour le but du planificateur). Elles sont initialis�es avec des valeurs de base (actuellement respectivement 1000 et 10) quand une table est cr��e. Elles sont mises � jour par certaines commandes, VACUUM, ANALYZE et CREATE INDEX. Un ANALYZE seul, donc ne faisant pas partie d'un VACUUM, g�n�re une valeur approximative de reltuples car il ne lit pas chaque ligne de la table.
La plupart des requ�tes ne r�cup�re qu'une fraction des lignes dans une table � cause de clauses WHERE qui restreignent les lignes � examiner. Du coup, le planificateur a besoin d'une estimation de la s�lectivit� des clauses WHERE, c'est-�-dire la fraction des lignes qui correspondent � chaque condition de la clause WHERE. L'information utilis�e pour cette t�che est stock�e dans le catalogue syst�me pg_statistic. Les entr�es de pg_statistic sont mises � jour par les commandes ANALYZE et VACUUM ANALYZE et sont toujours approximatives m�me si elles ont �t� mises � jour r�cemment.
Plut�t que de regarder directement dans pg_statistic, il est mieux de visualiser sa vue pg_stats lors de l'examen manuel des statistiques. pg_stats est con�u pour �tre plus facilement lisible. De plus, pg_stats est lisible par tous alors que pg_statistic n'est lisible que par un superutilisateur. (Ceci emp�che les utilisateurs non privil�gi�s d'apprendre certains choses sur le contenu des tables d'autres personnes � partir des statistiques. La vue pg_stats est restreinte pour afficher seulement les lignes des tables lisibles par l'utilisateur courant.) Par exemple, nous pourrions lancer :
SELECT attname, n_distinct, most_common_vals FROM pg_stats WHERE tablename = 'road'; attname | n_distinct | most_common_vals ---------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- name | -0.467008 | {"I- 580 Ramp","I- 880 Ramp","Sp Railroad ","I- 580 ","I- 680 Ramp","I- 80 Ramp","14th St ","5th St ","Mission Blvd","I- 880 "} thepath | 20 | {"[(-122.089,37.71),(-122.0886,37.711)]"} (2 rows)
pg_stats est d�crit en d�tail dans Section 43.35.
Le nombre d'informations stock�es dans pg_statistic, en particulier le nombre maximum d'�l�ments dans les tableaux most_common_vals et histogram_bounds pour chaque colonne, peut �tre initialis� sur une base colonne-par-colonne en utilisant la commande ALTER TABLE SET STATISTICS ou globalement en initialisant le param�tre d'ex�cution default_statistics_target. La limite par d�faut est actuellement de dix entr�es. Augmenter la limite pourrait permettre des estimations plus pr�cises du planificateur, en particulier pour les colonnes ayant des distributions de donn�es irr�guli�res, au prix d'un plus grand espace consomm� dans pg_statistic et en un temps plus long pour calculer les estimations. Par contre, une limite plus basse pourrait �tre appropri�e pour les colonnes � distributions de donn�es simples.
Pr�c�dent | Sommaire | Suivant |
Conseils sur les performances | Niveau sup�rieur | Contr�ler le planificateur avec des clauses JOIN explicites |