IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

28.2. Le récupérateur de statistiques

Le récupérateur de statistiques de PostgreSQL™ est un sous-système qui supporte la récupération et les rapports d'informations sur l'activité du serveur. Actuellement, le récupérateur peut compter les accès aux tables et index à la fois en terme de blocs disque et de lignes individuelles. Il conserve aussi la trace du nombre total de lignes dans chaque table ainsi que des informations sur les VACUUM et les ANALYZE pour chaque table. Il peut aussi compter le nombre d'appels aux fonctions définies par l'utilisateur ainsi que le temps total dépensé par chacune.

PostgreSQL™ est capable également de renvoyer des informations dynamiques sur ce qu'il se passe exactement dans le système en temps réel, comme la commande exacte en cours d'exécution par d'autres processus serveurs, et quels autres connexions existent dans le système. Cette fonctionnalité est indépendante du processus de récupération de données statistiques.

28.2.1. Configuration de la récupération de statistiques

Comme la récupération de statistiques ajoute un temps supplémentaire à l'exécution de la requête, le système peut être configuré pour récupérer ou non des informations. Ceci est contrôlé par les paramètres de configuration qui sont normalement initialisés dans postgresql.conf (voir Chapitre 19, Configuration du serveur pour plus de détails sur leur initialisation).

Le paramètre track_activities active la collecte d'informations sur la commande en cours d'exécution pour n'importe quel processus serveur.

Le paramètre track_counts contrôle si les statistiques sont récupérées pour les accès aux tables et index.

Le paramètre track_functions active le calcul de statistiques sur l'utilisation des fonctions définies par l'utilisateur.

Le paramètre track_io_timing active la collecte des temps de lecture et d'écriture de blocs.

Normalement, ces paramètres sont configurés dans postgresql.conf de façon à ce qu'ils s'appliquent à tous les processus serveur mais il est possible de les activer/désactiver sur des sessions individuelles en utilisant la commande SET(7) (pour empêcher les utilisateurs ordinaires de cacher leur activité à l'administrateur, seuls les superutilisateurs sont autorisés à modifier ces paramètres avec SET).

Le collecteur de statistiques transmets l'information récupérée aux autres processus PostgreSQL™ à travers des fichiers temporaires. Ces fichiers sont stockés dans le répertoire défini par le paramètre stats_temp_directory, par défaut pg_stat_tmp. Pour de meilleures performances, stats_temp_directory peut pointer vers un disque en RAM, diminuant ainsi les besoins en entrées/sorties physique. Quand le serveur s'arrête proprement, une copie permanente des données statistiques est stockée dans le sous-répertoire pg_stat, pour que les statistiques puissent être conservées après un arrêt du serveur. Quand la restauration est réalisée au démarrage du serveur (autrement dit après un arrêt immédiat, un crash du serveur ou lors d'une restauration PITR), tous les compteurs statistiques sont réinitialisés.

Une transaction peut aussi voir des statistiques propres à son activité (qui ne sont pas encore transmises au collecteur) dans les vues pg_stat_xact_all_tables, pg_stat_xact_sys_tables, pg_stat_xact_user_tables et pg_stat_xact_user_functions. Ces informations se mettent à jour en continue pendant l'exécution de la transaction.

28.2.2. Visualiser les statistiques

Plusieurs vues pré-définies, listées à Tableau 28.1, « Vues statistiques dynamiques », sont disponibles pour montrer l'état courant du système. Il existe aussi plusieurs autres vues, listées à Tableau 28.2, « Vues sur les statistiques récupérées », qui montrent les résultats des statistiques récupérées. De manière alternative, quelqu'un pourrait proposer des vues personnalisées qui utilisent les fonctions statistiques sous-jacentes, comme discuté à Section 28.2.3, « Fonctions Statistiques ».

En utilisant les statistiques pour surveiller l'activité en cours, il est important de réaliser que l'information n'est pas mise à jour instantanément. Chaque processus serveur individuel transmet les nouvelles statistiques au récupérateur juste avant l'attente d'une nouvelle commande du client ; donc une requête toujours en cours n'affecte pas les totaux affichés. De plus, le récupérateur lui-même émet un nouveau rapport une fois par PGSTAT_STAT_INTERVAL millisecondes (500 millisecondes, sauf si cette valeur a été modifiée lors de la construction du serveur). Donc, les totaux affichés sont bien derrière l'activité réelle. Néanmoins, l'information sur la requête en cours récupérée par track_activities est toujours à jour.

Un autre point important est que, lorsqu'un processus serveur se voit demander d'afficher une des statistiques, il récupère tout d'abord le rapport le plus récent émis par le processus de récupération, puis continue d'utiliser cette image de toutes les vues et fonctions statistiques jusqu'à la fin de sa transaction en cours. De façon similaire, les informations sur les requêtes en cours, quelque soit le processus, sont récupérées quand une telle information est demandée dans une transaction, et cette même information sera affichée lors de la transaction. Donc, les statistiques afficheront des informations statiques tant que vous restez dans la même transaction. Ceci est une fonctionnalité, et non pas un bogue, car il vous permet de traiter plusieurs requêtes sur les statistiques et de corréler les résultats sans vous inquiéter que les nombres aient pu changer. Mais si vous voulez voir les nouveaux résultats pour chaque requête, assurez-vous de lancer les requêtes en dehors de tout bloc de transaction. Autrement, vous pouvez appeler pg_stat_clear_snapshot(), qui annulera l'image statistique de la transaction en cours. L'utilisation suivante des informations statistiques causera la récupération d'une nouvelle image.

Tableau 28.1. Vues statistiques dynamiques

Nom de la vue Description
pg_stat_activity Une ligne par processus serveur, montrant les informations liées à l'activité courante du processus, comme l'état et la requête en cours. Voir pg_stat_activity pour plus de détails.
pg_stat_replication Une ligne par processus d'envoi de WAL, montrant les statistiques sur la réplication vers le serveur standby connecté au processus. Voir pg_stat_replication pour les détails.
pg_stat_wal_receiver Seulement une ligne, affichant des statistiques sur le récepteur WAL à partir du serveur ayant ce récepteur. Voir pg_stat_wal_receiver pour les détails.
pg_stat_ssl Une ligne par connexion (régulière et de réplication), montrant des informations sur le chiffrement SSL utilisé pour ces connexions. Voir pg_stat_ssl pour les détails.
pg_stat_progress_vacuum Une ligne pour chaque processus (incluant les processus autovacuum worker) exécutant un VACUUM, affichant le progrès en cours.Voir Section 28.4.1, « Rapporter la progression du VACUUM ».

Tableau 28.2. Vues sur les statistiques récupérées

Nom de la vue Description
pg_stat_archiver Une seule ligne, montrant les statistiques sur l'activité du processus d'archivage des journaux de transactions. Voir pg_stat_archiver pour les détails.
pg_stat_bgwriter Une seule ligne, montrant les statistiques d'activité du processus d'écriture d'arrière plan. Voir pg_stat_bgwriter pour plus de détails.
pg_stat_database Une ligne par base de données, montrant les statistiques globales des bases. Voir pg_stat_database pour plus de détails.

Les statistiques par index sont particulièrement utiles pour déterminer les index utilisés et leur efficacité.

Les vues pg_statio_ sont principalement utiles pour déterminer l'efficacité du cache tampon. Quand le nombre de lectures disques réelles est plus petit que le nombre de récupérations valides par le tampon, alors le cache satisfait la plupart des demandes de lecture sans faire appel au noyau. Néanmoins, ces statistiques ne nous donnent pas l'histoire complète : à cause de la façon dont PostgreSQL™ gère les entrées/sorties disque, les données qui ne sont pas dans le tampon de PostgreSQL™ pourraient toujours résider dans le tampon d'entrées/sorties du noyau et pourraient, du coup, être toujours récupérées sans nécessiter une lecture physique. Les utilisateurs intéressés pour obtenir des informations plus détaillées sur le comportement des entrées/sorties dans PostgreSQL™ sont invités à utiliser le récupérateur de statistiques de PostgreSQL™ avec les outils du système d'exploitation permettant une vue de la gestion des entrées/sorties par le noyau.

Tableau 28.3. Vue pg_stat_activity

Colonne Type Description
datid oid OID de la base de données auquelle ce processus serveur est connecté
datname name Nom de la base de données auquelle ce processus serveur est connecté
pid integer Identifiant du processus serveur
usesysid oid OID de l'utilisateur connecté à ce processus serveur
usename name Nom de l'utilisateur connecté à ce processus serveur
application_name text Nom de l'application connectée à ce processus serveurs
client_addr inet Adresse IP du client pour ce processus serveur. Si ce champ est vide, cela indique soit que le client est connecté via un socket Unix sur la machine serveur soit qu'il s'agit d'un processus interne tel qu'autovacuum.
client_hostname text Nom d'hôte du client connecté, comme reporté par une recherche DNS inverse sur client_addr. Ce champ ne sera rempli que pour les connexions IP, et seulement quand log_hostname est activé.
client_port integer Numéro de port TCP que le client utilise pour communiquer avec le processus serveur, ou -1 si un socket Unix est utilisé.
backend_start timestamp with time zone Heure de démarrage du processus, c'est-à-dire quand le client s'est connecté au serveur.
xact_start timestamp with time zone Heure de démarrage de la transaction courante du processus, ou NULL si aucune transaction n'est active. Si la requête courante est la première de sa transaction, cette colonne a la même valeur que la colonne query_start.
query_start timestamp with time zone Heure à laquelle la requête active a été démarrée, ou si state ne vaut pas active, quand la dernière requête a été lancée.
state_change timestamp with time zone Heure à laquelle l'état (state) a été modifié en dernier
wait_event_type text Type de l'événement pour lequel le processus est en attente  sinon NULL. Les valeurs possibles sont :
  • LWLockNamed : Le processus attend un verrou léger d'un nom spécifique. Chaque verrou de ce type protège une structure de données particulière en mémoire partagée. wait_event contiendra le nom du verrou léger.

  • LWLockTranche : Le processus attend un verrou parmi un groupe de verrous légers. Tous les verrous du groupe réalisent une fonction similaire ; wait_event identifie le but global des verrous de ce groupe.

  • Lock : Le processus attend un verrou lourd. Les verrous lourds, connus aussi en tant que verrous du gestionnaire de verrous ou plus simplement verrous, protègent principalement des objets visibles au niveau SQL, comme les tables. Néanmoins, ils sont aussi utilisés pour assurer une exclusion mutuelle pour certaines opérations internes comme l'agrandissement d'une relation. wait_event identifie le type de verrou attendu.

  • BufferPin : Le processus serveur attend d'accéder à un tampon de données lors d'une période où aucun autre processus ne peut examiner ce tampon. Les attentes sur des tampons peuvent rétractées si un autre processus détient un curseur ouvert qui a lu des données dans le tampon en question.

wait_event text Nom de l'événement d'attente si le processus est en attente, NULL dans le cas contraire. Voir Tableau 28.4, « Description de wait_event » pour plus de détails.
state text État général du processus serveur. Les valeurs possibles sont:
  • active : le processus serveur exécute une requête.

  • idle : le processus serveur est en attente d'une commande par le client.

  • idle in transaction : le processus serveur est en transaction, mais n'est pas en train d'exécuter une requête.

  • idle in transaction (aborted) : l'état est similaire à idle in transaction, à la différence qu'une des instructions de la transaction a généré une erreur.

  • fastpath function call : le processus serveur exécute une fonction fast-path.

  • disabled : cet état est affiché si track_activities est désactivé pour ce processus serveur.

backend_xid xid Identifiant de transaction de haut niveau de ce processus, si disponible.
backend_xmin xid L'horizon xmin de ce processus.
query text Texte de la requête la plus récente pour ce processus serveur. Si state vaut active, alors ce champ affiche la requête en cours d'exécution. Dans tous les autres cas, il affichera la dernière requête à avoir été exécutée.

La vue pg_stat_activity aura une ligne par processus serveur, montrant des informations liées à l'activité courante de ce processus.

[Note]

Note

Les colonnes wait_event et state sont indépendantes. Si un processus serveur est dans l'état active, il pourrait, ou non, être en attente (waiting) d'un événement. Si l'état est active et si wait_event est différent de NULL, cela signifie qu'une requête est en cours d'exécution mais que cette exécution est bloquée quelque part dans le système.

Tableau 28.4. Description de wait_event

Type d'événement d'attente Nom d'événement d'attente Description
LWLockNamed ShmemIndexLock Attente pour trouver ou allouer de l'espace en mémoire partagée.
OidGenLock Attente pour allouer ou affecter un OID.
XidGenLock Attente pour allouer ou affecter un identifiant de transaction.
ProcArrayLock Attente pour obtenir une image de la base ou pour effacer un identifiant de transaction à la fin de la transaction.
SInvalReadLock Attente pour récupérer ou supprimer des messages à partir de la queue partagée d'invalidation.
SInvalWriteLock Attente pour ajouter un message dans la queue partagée d'invalidation.
WALBufMappingLock Attente pour replacer un bloc dans les tampons des journaux de transactions.
WALWriteLock Attente pour l'écriture des tampons de journaux de transactions sur disque.
ControlFileLock Attente pour lire ou mettre à jour le fichier contrôle ou pour créer un nouveau journal de transactions.
CheckpointLock Attente pour l'exécution d'un checkpoint.
CLogControlLock Attente pour lire ou mettre à jour le statut de transaction.
SubtransControlLock Attente pour lire ou mettre à jour les informations de sous- transactions.
MultiXactGenLock Attente pour lire ou mettre à jour l'état partagé multixact.
MultiXactOffsetControlLock Attente pour lire ou mettre à jour les correspondances de décalage multixact.
MultiXactMemberControlLock Attente pour lire ou mettre à jour les correspondances de membre multixact.
RelCacheInitLock Attente pour lire ou écrire le fichier d'initialisation du cache de relations.
CheckpointerCommLock Attente pour gérer les demandes fsync.
TwoPhaseStateLock Attente pour lire ou mettre à jour l'état des transactions préparées.
TablespaceCreateLock Attente pour créer ou supprimer le tablespace.
BtreeVacuumLock Attente pour lire ou mettre à jour les informations relatives au vacuum pour un index Btree.
AddinShmemInitLock Attente pour gérer l'allocation d'espace en mémoire partagée.
AutovacuumLock Autovacuum worker ou launcher en attente de mise à jour ou de lecture de l'état actuel des autovacuum worker.
AutovacuumScheduleLock Attente pour s'assurer que la table sélectionnée pour un vacuum a justement besoin d'un vacuum.
SyncScanLock Attente pour obtenir l'emplacement de début d'un parcours d'une table dans le cas de parcours synchronisés.
RelationMappingLock Attente pour mettre à jour le fichier de correspondance des relations utilisé pour enregistrer la correspondance objet logique vers objet physique.
AsyncCtlLock Attente pour lire ou mettre à jour l'état partagé de notification.
AsyncQueueLock Attente pour lire ou mettre à jour les message de notification.
SerializableXactHashLock Attente pour récupérer ou enregistrer des informations sur les transactions sérialisables.
SerializableFinishedListLock Attente pour accéder à la liste des transactions sérialisées terminées.
SerializablePredicateLockListLock Attente pour réaliser une opération sur une liste de verrous détenus par les transactions sérialisées.
OldSerXidLock Attente pour lire ou enregistrer des transactions sérialisées en conflit.
SyncRepLock Attente pour lire ou mettre à jour des informations sur les réplicas synchrones.
BackgroundWorkerLock Attente pour lire ou mettre à l'état d'un background worker.
DynamicSharedMemoryControlLock Attente pour lire ou mettre à jour l'état de la mémoire partagée dynamique.
AutoFileLock Attente pour mettre à jour le fichier postgresql.auto.conf.
ReplicationSlotAllocationLock Attente pour allouer ou libérer un slot de réplication.
ReplicationSlotControlLock Attente pour lire ou mettre à jour l'état d'un slot de réplication.
CommitTsControlLock Attente pour lire ou mettre à jour les horodatages de validation des transactions.
CommitTsLock Attente pour lire ou mettre à jour la dernière valeur d'horodatage de transaction.
ReplicationOriginLock Attente pour configurer, supprimer ou utiliser une origine de réplication.
MultiXactTruncationLock Attente pour lire ou tronquer une information multixact.
OldSnapshotTimeMapLock Attente de lecture ou mise à jour d'informations de contrôle d'une ancienne image de base.
LWLockTranche clog Attente d'I/O sur un tampon clog (statut de transaction).
commit_timestamp Attente d'I/O sur un tampon d'horodatage de validation de transaction.
subtrans Attente d'I/O sur un tampon de sous-transaction.
multixact_offset Attente d'I/O sur un tampon de décalage multixact.
multixact_member Attente d'I/O sur un tampon de membre multixact.
async Attente d'I/O sur un tampon async (notify).
oldserxid Attente d'I/O sur un tampon oldserxid.
wal_insert Attente pour insérer un WAL dans un tampon mémoire.
buffer_content Attente pour lire ou écrire un bloc de données en mémoire.
buffer_io Attente d'I/O sur un bloc de données.
replication_origin Attente pour lire ou mettre à jour le progrès de la réplication.
replication_slot_io Attente d'I/O sur un slot de réplication.
proc Attente pour lire ou mettre à jour l'information de verrou par chemin rapide (fast-path lock).
buffer_mapping Attente pour associer un bloc de données avec un tampon dans le groupe de tampons.
lock_manager Attente pour ajouter ou examiner les verrous des processus, ou attente pour joindre ou quitter un groupe de verrouillage (utilisé par les requêtes parallélisées).
predicate_lock_manager Attente pour ajouter ou examiner les infirmations sur les verrous de prédicat.
Lock relation Attente pour acquérir un verrou sur une relation.
extend Attente pour étendre une relation.
page Attente pour acquérir un verrou sur une page d'une relation.
tuple Attente pour acquérir un verrou sur une ligne.
transactionid Attente de la fin d'une transaction.
virtualxid Attente pour acquérir un verrou de transaction virtuel.
speculative token Attente pour acquérir un verrou d'insertion spéculatif.
object Attente pour acquérir un verrou sur un objet de base qui n'est pas une relation.
userlock Attente pour acquérir un verrou utilisateur.
advisory Attente pour acquérir un verrou utilisateur informatif.
BufferPin BufferPin Attente pour acquérir un blocage d'un tampon.

[Note]

Note

Pour les tranches enregistrées par les extensions, le nom est indiqué par l'extension et peut être affiché comme wait_event. Il est tout à fait possible que l'utilisateur ait enregistré la tranche dans un des processus serveurs (en allouant de la mémoire partagée dynamique), auquel cas les autres processus serveurs n'ont pas cette information. Dans ce cas, le texte extension est affiché.

Voici un exemple de visualisation d'événements d'attente :

SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
 pid  | wait_event_type |  wait_event
------+-----------------+---------------
 2540 | Lock            | relation
 6644 | LWLockNamed     | ProcArrayLock
(2 rows)

Tableau 28.5. Vue pg_stat_replication

Colonne Type Description
pid integer Identifiant du processus d'envoi des WAL
usesysid oid OID de l'utilisateur connecté à ce processus
usename name Nom de l'utilisateur connecté à ce processus
application_name text Nom de l'application qui est connectée à ce processus
client_addr inet Adresse IP du client connecté à ce processus. Si ce champ est NULL, ceci signifie que le client est connecté via un socket Unix sur la machine serveur.
client_hostname text Nom de l'hôte du client connecté, comme renvoyé par une recherche DNS inverse sur client_addr. Ce champ sera uniquement non NULL pour les connexions IP, et seulement si log_hostname est activé.
client_port integer Numéro du port TCP que le client utilise pour la communication avec ce processus, ou -1 si une socket Unix est utilisée.
backend_start timestamp with time zone Heure à laquelle ce processus a été démarré, exemple, lorsque le client s'est connecté à ce processus expéditeur de WALs.
backend_xmin xid L'horizon xmin de ce serveur standby renvoyé par hot_standby.
state text État courant de ce processus
sent_location pg_lsn La position de la dernière transaction envoyée sur cette connexion
write_location pg_lsn La position de la dernière transaction écrite sur disque par ce serveur standby
flush_location pg_lsn La position de la dernière transaction vidée sur disque par ce serveur standby
replay_location pg_lsn La position de la dernière transaction rejouée dans la base de données par ce serveur standby
sync_priority integer Priorité de ce serveur standby pour être choisi comme le serveur standby synchrone
sync_state text État synchrone de ce serveur standby

La vue pg_stat_replication contiendra une ligne par processus d'envoi de WAL, montrant des statistiques sur la réplication avec le serveur standby connecté au processus. Seuls les serveurs standby directement connectés sont listés ; aucune information n'est disponible concernant les serveurs standby en aval.

Tableau 28.6. Vue pg_stat_wal_receiver

Colonne Type Description
pid integer Identifiant du processus de réception des enregistrements de transaction
status text Statut d'activité du processus walreceiver
receive_start_lsn pg_lsn Première position dans le journal de transaction utilisée quand walreceiver a été démarré
receive_start_tli integer Première ligne de temps utilisée quand walreceiver a été démarré
received_lsn pg_lsn Dernière position des journaux de transactions, déjà reçue et écrite sur disque, la valeur initiale de ce champ étant la première position dans les journaux de transactions utilisée lors du démarrage du walreceiver
received_tli integer Numéro de la ligne de temps de la dernière position des journaux de transactions, déjà reçue et écrite sur disque, la valeur initiale de ce champ étant la ligne de temps de la première position dans les journaux de transactions utilisée lors du démarrage du walreceiver
last_msg_send_time timestamp with time zone Horodatage d'envoi du dernier message reçu à partir du walsender
last_msg_receipt_time timestamp with time zone Horodatage de la réception du dernier message à partir du walsender
latest_end_lsn pg_lsn Dernière position de transaction reportée par le walsender associé
latest_end_time timestamp with time zone Horodatage de la dernière position de transaction reportée par le walsender associé
slot_name text Nom du slot de réplication utilisé par ce walreceiver
conninfo text Chaîne de connexion utilisée par ce walreceiver, avec un obscurcissement des informations sensibles au niveau sécurité.

La vue pg_stat_wal_receiver contiendra seulement une ligne, affichant les statistiques du walreceiver du serveur de connexion.

Tableau 28.7. Vue pg_stat_ssl

Colonne Type Description
pid integer ID du processus backend ou du processus d'envoi de WAL
ssl boolean True si SSL est utilisé dans cette connexion
version text Version de SSL utilisée, ou NULL si SSL n'est pas utilisé pour cette connexion
cipher text Nom du chiffrement SSL utilisé, ou NULL si SSL n'est pas utilisé pour cette connexion
bits integer Nombre de bits dans l'algorithme de chiffrement utilisé, ou NULL si SSL n'est pas utilisé pour cette connexion
compression boolean True si la compression SSL est utilisée, false sinon, ou NULL si SSL n'est pas utilisé pour cette connexion
clientdn text Champ Distinguished Name (DN) utilisé par le certificat du client, ou NULL si aucun certificat client n'a été fourni ou si SSL n'est pas utilisé pour cette connexion. Ce champ est tronqué si le champ DN est plus long que NAMEDATALEN (64 caractères dans une compilation standard)

La vue pg_stat_ssl contiendra une ligne par backend ou processus d'envoi de WAL, montrant des statistiques sur l'usage de SSL dans cette connexion. Elle peut être jointe à pg_stat_activity ou pg_stat_replication sur la colonne pid pour obtenir plus de détails sur la connexion.

Tableau 28.8. Vue pg_stat_archiver

Colonne Type Description
archived_count bigint Nombre de journaux de transactions archivés avec succès
last_archived_wal text Nom du dernier journal de transaction archivé avec succès
last_archived_time timestamp with time zone Horodatage de la dernière opération d'archivage réussie
failed_count bigint Nombre d'échec d'archivage de journaux de transactions
last_failed_wal text Nom du journal de transactions correspondant au dernier archivage échoué
last_failed_time timestamp with time zone Horodatage de la dernière opération d'archivage échouée
stats_reset timestamp with time zone Horodatage de la dernière réinitialisation de ces statistiques

La vue pg_stat_archiver aura toujours une seule ligne contenant les données du processus d'archivage de l'instance.

Tableau 28.9. Vue pg_stat_bgwriter

Colonne Type Description
checkpoints_timed bigint Nombre de checkpoints planifiés ayant été effectués
checkpoints_req bigint Nombre de checkpoints demandés ayant été effectués
checkpoint_write_time double precision Temps total passé dans la partie des checkpoints où les fichiers sont écrits sur disque, en millisecondes.
checkpoint_sync_time double precision Temps total passé dans la partie des checkpoints où les fichiers sont synchronisés sur le disque, en millisecondes.
buffers_checkpoint bigint Nombre de tampons écrits durant des checkpoints
buffers_clean bigint Nombre de tampons écrits par le processus background writer (processus d'écriture en tâche de fond)
maxwritten_clean bigint Nombre de fois que le processus background writer a arrêté son parcours de nettoyage pour avoir écrit trop de tampons
buffers_backend bigint Nombre de tampons écrits directement par un processus serveur
buffers_backend_fsync bigint Nombre de fois qu'un processus serveur a du exécuter son propre appel à fsync (normalement le processus background writer gère ces appels même quand le processus serveur effectue sa propre écriture)
buffers_alloc bigint Nombre de tampons alloués
stats_reset timestamp with time zone Dernière fois que ces statistiques ont été réinitialisées

La vue pg_stat_bgwriter aura toujours une ligne unique, contenant les données globales de l'instance.

Tableau 28.10. Vue pg_stat_database

Colonne Type Description
datid oid OID d'une base de données
datname name Nom de cette base de données
numbackends integer Nombre de processus serveurs actuellement connectés à cette base de données. C'est la seule colonne de cette vue qui renvoie une valeur reflétant l'état actuel ; toutes les autres colonnes renvoient les valeurs accumulées depuis la dernière réinitialisation
xact_commit bigint Nombre de transactions de cette base de données qui ont été validées
xact_rollback bigint Nombre de transactions de cette base de données qui ont été annulées
blks_read bigint Nombre de blocs disques lus dans cette base de données
blks_hit bigint Nombre de fois que des blocs disques étaient déjà dans le cache tampon, et qu'il n'a donc pas été nécessaire de les lire sur disque (cela n'inclut que les accès dans le cache tampon de PostgreSQL, pas dans le cache de fichiers du système d'exploitation).
tup_returned bigint Nombre de lignes retournées par des requêtes dans cette base de données
tup_fetched bigint Nombre de lignes rapportées par des requêtes dans cette base de données
tup_inserted bigint Nombre de lignes insérées par des requêtes dans cette base de données
tup_updated bigint Nombre de lignes mises à jour par des requêtes dans cette base de données
tup_deleted bigint Nombre de lignes supprimées par des requêtes dans cette base de données
conflicts bigint Nombre de requêtes annulées à cause de conflits avec la restauration dans cette base de données. (Les conflits n'arrivent que sur des serveurs de standby ; voir pg_stat_database_conflicts pour plus de détails.)
temp_files bigint Nombre de fichiers temporaires créés par des requêtes dans cette base de données. Tous les fichiers temporaires sont comptabilisés, quel que soit la raison de la création du fichier temporaire (par exemple, un tri ou un hachage) et quel que soit la valeur du paramètre log_temp_files.
temp_bytes bigint Quantité totale de données écrites dans des fichiers temporaires par des requêtes dans cette base de données. Tous les fichiers temporaires sont comptabilisés, quel que soit la raison de la création de ce fichier temporaire, et quel que soit la valeur du paramètre log_temp_files.
deadlocks bigint Nombre de verrous mortels détectés dans cette base de données
blk_read_time double precision Temps passé à lire des blocs de donnée dans des fichiers par des processsus serveur dans cette base de données, en millisecondes
blk_write_time double precision Temps passé à écrire des blocs de données dans des fichiers par les processus serveurs dans cette base de données, en millisecondes
stats_reset timestamp with time zone Dernière fois que ces statistiques ont été réinitialisées

La vue pg_stat_database ne contiendra qu'une ligne pour chaque base de données dans l'instance, montrant ses statistiques globales.

Tableau 28.11. Vue pg_stat_database_conflicts

Colonne Type Description
datid oid OID de la base de données
datname name Nom de cette base de données
confl_tablespace bigint Nombre de requêtes dans cette base de données qui ont été annulées suite à la suppression de tablespaces
confl_lock bigint Nombre de requêtes dans cette base de données qui ont été annulées suite à des délais dépassés sur des verrouillages
confl_snapshot bigint Nombre de requêtes dans cette base de données qui ont été annulées à cause d'instantanés trop vieux
confl_bufferpin bigint Nombre de requêtes dans cette base de données qui ont été annulées à cause de tampons verrouillés
confl_deadlock bigint Nombre de requêtes dans cette base de données qui ont été annulées à cause de deadlocks

La vue pg_stat_database_conflicts contiendra une ligne par base de données, montrant des statistiques au niveau de chaque base de données concernant les requêtes annulées survenant à cause de conflits avec la restauration sur des serveurs standby. Cette vue contiendra seulement des informations sur les serveurs standby, dans la mesure où aucun conflit ne survient sur les serveurs primaires.

Tableau 28.12. Vue pg_stat_all_tables

Colonne Type Description
relid oid OID d'une table
schemaname name Nom du schéma dans lequel se trouve cette table
relname name Nom de cette table
seq_scan bigint Nombre de parcours séquentiels initiés sur cette table
seq_tup_read bigint Nombre de lignes vivantes rapportées par des parcours séquentiels
idx_scan bigint Nombre de parcours d'index initiés sur cette table
idx_tup_fetch bigint Nombre de lignes vivantes rapportées par des parcours d'index
n_tup_ins bigint Nombre de lignes insérées
n_tup_upd bigint Nombre de lignes mises à jour (y compris les lignes mises à jour par HOT)
n_tup_del bigint Nombre de lignes supprimées
n_tup_hot_upd bigint Nombre de lignes mises à jour par HOT (i.e., sans mises à jour d'index nécessaire)
n_live_tup bigint Nombre estimé de lignes vivantes
n_dead_tup bigint Nombre estimé de lignes mortes
n_mod_since_analyze bigint Nombre estimé de lignes modifiées depuis le dernier ANALYZE sur cette table
last_vacuum timestamp with time zone Dernière fois qu'une opération VACUUM manuelle a été faite sur cette table (sans compter  VACUUM FULL)
last_autovacuum timestamp with time zone Dernière fois que le démon autovacuum a exécuté une opération VACUUM sur cette table
last_analyze timestamp with time zone Dernière fois qu'une opération ANALYZE a été lancée manuellement sur cette table
last_autoanalyze timestamp with time zone Dernière fois que le démon autovacuum a exécuté une opération ANALYZE sur cette table
vacuum_count bigint Nombre de fois qu'une opération VACUUM manuelle a été lancée sur cette table (sans compter VACUUM FULL)
autovacuum_count bigint Nombre de fois que le démon autovacuum a exécuté une opération VACUUM manuelle
analyze_count bigint Nombre de fois qu'une opération ANALYZE manuelle a été lancée sur cette table
autoanalyze_count bigint Nombre de fois que le démon autovacuum a exécuté une opération ANALYZE sur cette table

La vue pg_stat_all_tables contiendra une ligne par table dans la base de données courante (incluant les tables TOAST), montrant les statistiques d'accès pour cette table spécifiquement. Les vues pg_stat_user_tables et pg_stat_sys_tables contiennent les mêmes informations, mais filtrent respectivement les tables utilisateurs et les tables systèmes.

Tableau 28.13. Vue pg_stat_all_indexes

Colonne Type Description
relid oid OID de la table pour cet index
indexrelid oid OID de cet index
schemaname name Nom du schéma dans lequel se trouve cet index
relname name Nom de la table pour cet index
indexrelname name Nom de cet index
idx_scan bigint Nombre de parcours d'index initiés par cet index
idx_tup_read bigint Nombre d'entrées d'index retournées par des parcours sur cet index
idx_tup_fetch bigint Nombre de lignes vivantes de la table rapportées par des simples parcours d'index utilisant cet index

La vue pg_stat_all_indexes contiendra une ligne pour chaque index dans la base de données courante, montrant les statistiques d'accès sur cet index spécifiquement. Les vues pg_stat_user_indexes et pg_stat_sys_indexes contiennent la même information, mais sont filtrées pour ne montrer respectivement que les index utilisateurs et les index systèmes.

Les index peuvent être utilisés avec un simple parcours d'index, un parcours d'index « bitmap » ou l'optimiseur. Dans un parcours de bitmap, les sorties de plusieurs index peuvent être combinées avec des règles AND ou OR, c'est pourquoi il est difficile d'associer des lecture de lignes individuelles de la table avec des index spécifiques quand un parcours de bitmap est utilisé. Ainsi donc, un parcours de bitmap incrémente le(s) valeur(s) de pg_stat_all_indexes. idx_tup_read pour le(s) index qu'il utilise, et incrémente la valeur de pg_stat_all_tables. idx_tup_fetch pour la table, mais il n'affecte pas pg_stat_all_indexes.idx_tup_fetch. L'optimiseur accède également aux index pour vérifier si des constantes fournies sont en dehors des plages de valeurs enregistrées par les statistiques de l'optimiseur car celles-ci peuvent ne pas être à jour.

[Note]

Note

Les valeurs de idx_tup_read et idx_tup_fetch peuvent être différentes même sans aucune utilisation de parcours de bitmap, car idx_tup_read comptabilise les entrées d'index récupérées de cet index alors que idx_tup_fetch comptabilise le nombre de lignes vivantes rapportées de la table. Le second sera moindre si des lignes mortes ou pas encore validées sont rapportées en utilisant l'index, ou si des lectures de lignes de la table sont évitées grâce a un parcours d'index seul.

Tableau 28.14. Vue pg_statio_all_tables

Colonne Type Description
relid oid OID d'une table
schemaname name Nom du schéma dans lequel se trouve cette table
relname name Nom de cette table
heap_blks_read bigint Nombre de blocs disque lus pour cette table
heap_blks_hit bigint Nombre de tampons récupérés pour cette table
idx_blks_read bigint Nombre de blocs disque lus par tous les index de cette table
idx_blks_hit bigint Nombre de tampons récupérés sur tous les index de cette table
toast_blks_read bigint Nombre de blocs disque lus sur la partie TOAST de cette table (si présente)
toast_blks_hit bigint Nombre de tampons récupérés sur la partie TOAST de cette table (si présente)
tidx_blks_read bigint Nombre de blocs disque lus sur les index de la partie TOAST de cette table (si présente)
tidx_blks_hit bigint Nombre de tampons récupérés sur les index de la partie TOAST de cette table (si présente)

La vue pg_statio_all_tables contiendra une ligne pour chaque table dans la base de données courante (en incluant les tables TOAST), montrant les statistiques d'entrées/sorties de chaque table spécifiquement. Les vues pg_statio_user_tables et pg_statio_sys_tables contiennent la même information, mais sont filtrées pour ne montrer respectivement que les tables utilisateurs et les tables systèmes.

Tableau 28.15. Vue pg_statio_all_indexes

Colonne Type Description
relid oid OID de la table pour cet index
indexrelid oid OID de cet index
schemaname name Nom du schéma dans lequel se trouve cet index
relname name Nom de la table pour cet index
indexrelname name Nom de cet index
idx_blks_read bigint Nombre de blocs disque lus pour cet index
idx_blks_hit bigint Nombre de tampons récupérés sur cet index

La vue pg_statio_all_indexes contiendra une ligne pour chaque index dans la base de données courante, montrant les statistiques d'entrées/sorties sur chaque index spécifiquement. Les vues pg_statio_user_indexes et pg_statio_sys_indexes contiennent la même information, mais sont filtrées pour ne montrer respectivement que les tables utilisateur et tables système.

Tableau 28.16. Vue pg_statio_all_sequences

Colonne Type Description
relid oid OID de cette séquence
schemaname name Nom du schéma dans lequel se trouve cette séquence
relname name Nom de cette séquence
blks_read bigint Nombre de blocs disque lus pour cette séquence
blks_hit bigint Nombre de tampons récupérés pour cette séquence

La vue pg_statio_all_sequences contiendra une ligne pour chaque séquence dans la base de données courante, montrant les statistiques d'entrées/sorties pour chaque séquence spécifiquement.

Tableau 28.17. Vue pg_stat_user_functions

Colonne Type Description
funcid oid OID de cette fonction
schemaname name Nom du schéma dans lequel se trouve cette fonction
funcname name Nom de cette fonction
calls bigint Nombre de fois que cette fonction a été appelée
total_time double precision Temps total passé dans cette fonction ainsi que dans toutes les autres fonctions appelées par elle, en millisecondes
self_time double precision Temps total passé dans cette fonction seule, sans inclure les autres fonctions appelées par elle, en millisecondes

La vue pg_stat_user_functions contiendra une ligne pour chaque fonction suivie, montrant les statistiques d'exécution de cette fonction. Le paramètre track_functions contrôle exactement quelles fonctions sont suivies.

28.2.3. Fonctions Statistiques

Une autre façon de regarder les statistiques peut être mise en place en écrivant des requêtes utilisant les mêmes fonctions d'accès sous- jacentes utilisées par les vues standards montrées au dessus. Pour des détails comme les noms de fonction, veuillez consulter les définitions de ces vues standards. (Par exemple, dans psql vous pouvez utiliser \d+ pg_stat_activity.) Les fonctions d'accès pour les statistiques par base de données prennent comme argument un OID pour identifier sur quelle base de données travailler. Les fonctions par table et par index utilisent un OID de table ou d'index. Les fonctions pour les statistiques par fonctions utilisent un OID de fonction. Notez que seuls les tables, index et fonctions dans la base de données courante peuvent être vus avec ces fonctions.

Les fonctions supplémentaires liées à la récupération de statistiques sont listées dans Tableau 28.18, « Fonctions supplémentaires de statistiques ».

Tableau 28.18. Fonctions supplémentaires de statistiques

Fonction Type renvoyé Description
pg_backend_pid() integer Identifiant du processus serveur gérant la session courante.
pg_stat_get_activity(integer) setof record Retourne un enregistrement d'informations sur le processus serveur du PID spécifié, ou un enregistrement pour chaque processus serveur actif dans le système si NULL est spécifié. Les champs retournés sont des sous-ensembles de ceux dans la vue pg_stat_activity.
pg_stat_get_snapshot_timestamp() timestamp with time zone Renvoie l'horodatage de l'instantané courant des statistiques
pg_stat_clear_snapshot() void Supprime l'image statistique courante.
pg_stat_reset() void Remet à zéro tous les compteurs de statistique pour la base de données courante (nécessite les droits super-utilisateur par défaut, mais le droit EXECUTE peut être donné à d'autres pour cette fonction).
pg_stat_reset_shared(text) void Remet à zéro quelques statistiques globales de l'instance, en fonction de l'argument (nécessite les droits super-utilisateur by default, but EXECUTE for this function can be granted to others). Appeler pg_stat_reset_shared('bgwriter') réinitialisera tous les compteurs montrés dans la vue pg_stat_bgwriter. Appeler pg_stat_reset_shared('archiver') réinitialisera tous les compteurs indiqués dans la vue pg_stat_archiver.
pg_stat_reset_single_table_counters(oid) void Remet à zéro les statistiques pour une seule table ou index dans la base de données courante (nécessite les droits super-utilisateur par défaut, mais le droit EXECUTE peut être donné à d'autres pour cette fonction).
pg_stat_reset_single_function_counters(oid) void Remet à zéro les statistiques pour une seule fonction dans la base de données courante (nécessite les droits super-utilisateur par défaut, mais le droit EXECUTE peut être donné à d'autres pour cette fonction).

pg_stat_get_activity, la fonction sous-jacente de la vue pg_stat_activity, retourne un ensemble d'enregistrements contenant toute l'information disponible sur chaque processus serveur. Parfois il peut être plus pratique de n'obtenir qu'un sous-ensemble de cette information. Dans ces cas là, un ensemble plus vieux de fonctions d'accès aux statistiques par processus serveur peut être utilisé ; celle-ci sont montrées dans Tableau 28.19, « Fonctions statistiques par processus serveur ». Ces fonctions d'accès utilisent un numéro d'identifiant du processus serveur, qui va de un au nombre de processus serveurs actuellement actifs. La fonction pg_stat_get_backend_idset fournit une manière pratique de générer une ligne pour chaque processus serveur actif pour appeler ces fonctions. Par exemple, pour montrer les PID et requêtes en cours de tous les processus serveur :

SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
       pg_stat_get_backend_activity(s.backendid) AS query
    FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

Tableau 28.19. Fonctions statistiques par processus serveur

Fonction Type renvoyé Description
pg_stat_get_backend_idset() setof integer Ensemble de numéros de processus serveur actuellement actifs (de 1 jusqu'au nombre de processus serveur actifs)
pg_stat_get_backend_activity(integer) text Texte de la requête la plus récente de ce processus serveur
pg_stat_get_backend_activity_start(integer) timestamp with time zone Heure à laquelle la requête la plus récente a été démarrée
pg_stat_get_backend_client_addr(integer) inet Adresse IP du client connecté à ce processus serveur
pg_stat_get_backend_client_port(integer) integer Numéro de port TCP que le client utilise pour communiquer
pg_stat_get_backend_dbid(integer) oid OID de la base de données auquelle ce processus serveur est connecté
pg_stat_get_backend_pid(integer) integer Identifiant du processus serveur
pg_stat_get_backend_start(integer) timestamp with time zone Heure à lequelle ce processus a été démarré
pg_stat_get_backend_userid(integer) oid OID de l'utilisateur connecté à ce processus serveur
pg_stat_get_backend_wait_event_type(integer) text Nom du type d'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 28.4, « Description de wait_event » pour les détails.
pg_stat_get_backend_wait_event(integer) text Nom de l'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 28.4, « Description de wait_event » pour les détails.
pg_stat_get_backend_xact_start(integer) timestamp with time zone Heure à laquelle la transaction courante a été démarrée