Le récupérateur de statistiques de PostgreSQL est un sous-système qui prend en charge 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 termes 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 d'elles.
PostgreSQL est également capable de renvoyer des informations dynamiques en temps réel sur ce qu'il se passe exactement dans le système, comme la commande exacte en cours d'exécution par d'autres processus serveur et les autres connexions qui existent dans le système. Cette fonctionnalité est indépendante du processus de récupération de données 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 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 (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 transmet 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 physiques. 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 puis réutilisées au redémarrage du serveur. Lorsqu'au démarrage du
serveur, la restauration est réalisée (par exemple, après un arrêt
immédiat, un crash du serveur ou encore après 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 continu pendant l'exécution de la transaction.
Plusieurs vues prédéfinies, listées à Tableau 28.1, sont disponibles pour montrer l'état courant du système. Il existe aussi plusieurs autres vues, listées à Tableau 28.2, qui montrent les résultats des statistiques récupérées. De manière alternative, il est possible de créer des vues personnalisées qui utilisent les fonctions statistiques sous-jacentes, comme discuté à Section 28.2.3.
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 (soit 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, quel que 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_subscription | Au moins une ligne par souscription, affichant des informations sur les processus workers de souscription. Voir pg_stat_subscription pour plus de 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. |
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. |
pg_stat_database_conflicts | Une ligne par base de données, montrant les statistiques au niveau de la base concernant les requêtes annulées à cause de conflits avec les serveurs standby en restauration. Voir pg_stat_database_conflicts pour les détails. |
pg_stat_all_tables | Une ligne par table de la base de données courante, montrant les statistiques d'accès de chaque table spécifiquement. Voir pg_stat_all_tables pour plus de détails. |
pg_stat_sys_tables | Identique à pg_stat_all_tables , sauf que seules les
tables systèmes sont affichées |
pg_stat_user_tables | Identique à pg_stat_all_tables , sauf que seules les
tables utilisateurs sont affichées |
pg_stat_xact_all_tables | Similaire à pg_stat_all_tables , mais
décompte les actions prises dans la transaction en cours (qui ne
sont pas encore pris en compte dans la vue
pg_stat_all_tables et les vues du même
type). Les colonnes correspondant au nombre de lignes vivantes et
mortes, ainsi que celles pour les actions du VACUUM et de l'ANALYZE
ne sont pas présentes dans cette vue |
pg_stat_xact_sys_tables | Identique à pg_stat_xact_all_tables ,
sauf que seules les tables systèmes sont affichées |
pg_stat_xact_user_tables | Identique à pg_stat_xact_all_tables , sauf que seules les
tables utilisateurs sont affichées |
pg_stat_all_indexes | Une ligne par index de la base de données courante, montrant les statistiques d'accès de chaque index spécifiquement. Voir pg_stat_all_indexes pour plus de détails. |
pg_stat_sys_indexes | Identique à pg_stat_all_indexes , sauf que seules les
tables systèmes sont affichées |
pg_stat_user_indexes | Identique à pg_stat_all_indexes , sauf que seules
les tables utilisateurs sont affichées |
pg_statio_all_tables | Une ligne par table de la base de données courante, montrant les statistiques d'entrées/sorties de chaque table spécifiquement. Voir pg_statio_all_tables pour plus de détails. |
pg_statio_sys_tables | Identique à pg_statio_all_tables , sauf que seules
les tables systèmes sont affichées |
pg_statio_user_tables | Identique à pg_statio_all_tables , sauf que seules
les tables utilisateur sont affichées |
pg_statio_all_indexes | Une ligne par index de la base de données courante, montrant les les statistiques d'entrées/sorties de chaque index spécifiquement. Voir pg_statio_all_indexes pour plus de détails. |
pg_statio_sys_indexes | Identique à pg_statio_all_indexes , sauf que seuls
les index systèmes sont affichés |
pg_statio_user_indexes | Identique à pg_statio_all_indexes , sauf que seuls
les index utilisateur sont affichés |
pg_statio_all_sequences | Une ligne par séquence de la base de données courante, montrant les statistiques d'entrées/sorties de chaque séquence spécifiquement. Voir pg_statio_all_sequences pour plus de détails. |
pg_statio_sys_sequences | Identique à pg_statio_all_sequences , sauf que
seules les séquences système sont affichées (actuellement, aucune
séquence système n'est définie, donc cette vue est toujours vide) |
pg_statio_user_sequences | Identique à pg_statio_all_sequences , sauf que
seules les séquences utilisateur sont affichées |
pg_stat_user_functions | Une ligne par fonction suivie, montrant les statistiques d'exécution de cette fonction. Voir pg_stat_user_functions pour plus de détails. |
pg_stat_xact_user_functions | Similaire à pg_stat_user_functions ,
mais compte seulement les appels pendant la transaction en cours
(qui ne sont pas encore inclus dans
pg_stat_user_functions ) |
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 serveur |
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. Pour les processus backends, c'est l'heure où 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 :
|
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 pour plus de détails. |
state | text | État général du processus serveur.
Les valeurs possibles sont:
|
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. Par défaut,
le texte de la requête est tronqué à 1024 octets. Cette valeur peut
être modifiée avec le paramètre
track_activity_query_size.
|
backend_type | text | Type du processus actuel. Les types possibles sont
logical replication launcher ,
logical replication worker ,
parallel worker , background writer ,
client backend , checkpointer ,
startup , walreceiver ,
walsender et walwriter .
De plus, les background workers enregistrés par les extensions pourraient
avoir des types supplémentaires.
|
La vue pg_stat_activity
aura une ligne par processus
serveur, montrant des informations liées à l'activité courante de ce processus.
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 |
---|---|---|
LWLock | 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 messages 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. | |
BackendRandomLock | Attente de la génération d'un nombre aléatoire. | |
LogicalRepWorkerLock | Attente d'une action sur le processus worker de la réplication logique pour se terminer. | |
CLogTruncationLock | Attente de l'exécution de txid_status ou
de la mise à jour de l'identifiant le plus ancien disponible. | |
WrapLimitsVacuumLock | Attente de la mise à jour des limites sur la consommation des identifiants de transactions et de multixact. | |
NotifyQueueTailLock | Attente de la mise à jour des limites sur le stockage des messages de notification. | |
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. | |
parallel_query_dsa | Attente du verrou d'allocation de la mémoire partagée dynamique pour les requêtes dynamiques. | |
tbm | Attente du verrou sur l'itérateur partagé TBM. | |
parallel_append | Attente pour sélectionner le sous-plan suivant pendant
l'exécution du plan Parallel Append | |
parallel_hash_join | Attente pour allouer ou changer une portion de la mémoire ou
pour mettre à jour les compteurs pendant l'exécution d'un
Parallel Hash du plan d'exécution.
| |
Lock | relation | Attente pour acquérir un verrou sur une relation. |
extend | Attente pour étendre une relation. | |
frozenid | Attente pour mettre à jour
pg_database .datfrozenxid
et pg_database .datminmxid .
| |
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. |
Activity | ArchiverMain | Attente dans la boucle principale du processus d'archivage. |
AutoVacuumMain | Attente dans la boucle principale du processus autovacuum launcher. | |
BgWriterHibernate | Attente du processus background writer, hibernation. | |
BgWriterMain | Attente dans la boucle principale du processus background writer. | |
CheckpointerMain | Attente dans la boucle principale du processus checkpointer. | |
LogicalApplyMain | Attente dans la boucle principale du processus logical apply. | |
LogicalLauncherMain | Attente dans la boucle principale du processus logical launcher. | |
PgStatMain | Attente dans la boucle principale du processus de collecte des statistiques. | |
RecoveryWalAll | Attente de WAL à partir du flux lors de la restauration. | |
RecoveryWalStream | Attente lorsque les données WAL ne sont pas disponibles à partir de tout type de sources (local, archive ou stream) avant d'essayer de nouveau de récupérer les données WAL lors de la restauration. | |
SysLoggerMain | Attente dans la boucle principale du processus syslogger. | |
WalReceiverMain | Attente dans la boucle principale du processus WAL receiver. | |
WalSenderMain | Attente dans la boucle principale du processus WAL sender. | |
WalWriterMain | Attente dans la boucle principale du processus WAL writer. | |
Client | ClientRead | Attente de lecture de données provenant du client. |
ClientWrite | Attente d'écriture de données provenant du client. | |
LibPQWalReceiverConnect | Attente dans le WAL receiver pour établir une connexion avec le serveur distant. | |
LibPQWalReceiverReceive | Attente dans le WAL receiver pour recevoir des données du serveur distant. | |
SSLOpenServer | Attente du SSL lors d'une tentative de connexion. | |
WalReceiverWaitStart | Attente du processus de démarrage pour envoyer les données initiales de la réplication en flux. | |
WalSenderWaitForWAL | Attente de WAL à vider sur disque par le processus WAL sender. | |
WalSenderWriteData | Attente de toute activité lors du traitement des réponses provenant du WAL receiver dans le processus WAL sender. | |
Extension | Extension | Attente dans une extension. |
IPC | BgWorkerShutdown | Attente de l'arrêt d'un background worker. |
BgWorkerStartup | Attente du démarrage d'un background worker. | |
BtreePage | Attente de la disponibilité du numéro de bloc nécessaire pour continuer un parcours parallélisé d'un index B-tree. | |
ClogGroupUpdate | Waiting for group leader to update transaction status at transaction end. | |
ExecuteGather | Attente d'activité d'un processus fils lors de l'exécution
d'un nœud Gather . | |
Hash/Batch/Allocating | Attente de l'élection d'un participant (worker)
Parallel Hash pour lui attribuer une table de
hachage. | |
Hash/Batch/Electing | Élection d'un participant (worker) au
Parallel Hash pour lui attribuer une table de
hachage. | |
Hash/Batch/Loading | Attente d'autres participants (workers) au
Parallel Hash afin de terminer le chargement
d'une table de hachage | |
Hash/Build/Allocating | Attente qu'un participant (worker) élu au
Parallel Hash s'attribue la table de hachage
initiale. | |
Hash/Build/Electing | Élection d'un participant (worker) au Parallel Hash
pour l'attribution de la table de hachage initiale. | |
Hash/Build/HashingInner | Attente que d'autres participants (worker) au
Parallel Hash aient terminé le hachage de la
relation interne. | |
Hash/Build/HashingOuter | Attente que d'autres participants (worker) au
Parallel Hash aient terminé le partitionnement de la
relation externe | |
Hash/GrowBatches/Allocating | Attente qu'un participant (worker) élu au Parallel Hash
s'attribue d'autres lots de traitement. | |
Hash/GrowBatches/Deciding | Élection d'un participant (worker) au Parallel Hash
à la décision de la croissance future des lots de traitements. | |
Hash/GrowBatches/Electing | Élection d'un participant (worker) au Parallel Hash
pour l'affectation de lots de traitements supplémentaires. | |
Hash/GrowBatches/Finishing | Attente d'un participant (worker) élu au Parallel Hash
à la décision de la croissance future des lots de traitements. | |
Hash/GrowBatches/Repartitioning | Attente que d'autres participants (workers) au Parallel Hash
aient terminé le repartitionnement. | |
Hash/GrowBuckets/Allocating | Attente qu'un participant (worker) élu au Parallel Hash
ait terminé l'affectation de plus de paquets. | |
Hash/GrowBuckets/Electing | Élection d'un participant (worker) au Parallel Hash
pour l'affectation de plus de paquets. | |
Hash/GrowBuckets/Reinserting | Attente que d'autres participants (worker) au Parallel Hash
aient terminé d'insérer les lignes dans de nouveaux paquets. | |
LogicalSyncData | Attente de l'envoi de données du serveur distant en réplication logique pour la synchronisation initiale de tables. | |
LogicalSyncStateChange | Attente du changement d'état du serveur distant en réplication logique. | |
MessageQueueInternal | Attente de l'attachement dans la queue de messages partagées d'autres processus. | |
MessageQueuePutMessage | Attente de l'écriture d'un message du protocole dans une queue de messages partagée. | |
MessageQueueReceive | Attente de la réception d'octets d'une queue de messages partagée. | |
MessageQueueSend | Attente de l'envoi d'octets provenant d'une queue de messages partagé. | |
ParallelBitmapScan | Attente de l'initialisation d'un parcours bitmap parallélisé. | |
ParallelCreateIndexScan | Waiting for parallel CREATE INDEX workers to finish heap scan. | |
ParallelFinish | Attente la fin du traitement de processus workers parallélisés. | |
ProcArrayGroupUpdate | Attente de l'effacement de l'identifiant de transactions en fin de transaction par le leader du groupe. | |
ReplicationOriginDrop | Attente du placement en inactivité de l'origine de réplication pour sa suppression. | |
ReplicationSlotDrop | Attente du placement en inactivité d'un slot de réplication pour sa suppression. | |
SafeSnapshot | Attente d'un snapshot pour une transaction READ ONLY
DEFERRABLE . | |
SyncRep | Attente de confirmation du serveur distant lors d'une réplication synchrone. | |
Timeout | BaseBackupThrottle | Attente d'une sauvegarde de base provoquée par un délai d'attente dépassé pendant une forte activité système. |
PgSleep | Attente du processus ayant appelé pg_sleep . | |
RecoveryApplyDelay | Attente lors de l'application des WAL à la restauration pour respecter le délai configuré. | |
IO | BufFileRead | Attente de lecture à partir d'un fichier en cache. |
BufFileWrite | Attente d'écriture dans un fichier en cache. | |
ControlFileRead | Attente d'une lecture du fichier de contrôle. | |
ControlFileSync | Attente que le fichier de contrôle atteigne un stockage stable. | |
ControlFileSyncUpdate | Attente d'une mise à jour pour que le fichier de contrôle atteigne un stockage stable. | |
ControlFileWrite | Attente d'une écriture dans le fichier de contrôle. | |
ControlFileWriteUpdate | Attente d'une écriture pour mettre à jour le fichier de contrôle. | |
CopyFileRead | Attente d'une lecture lors d'une opération de copie de fichier. | |
CopyFileWrite | Attente d'une écriture lors d'une opération de copie de fichier. | |
DataFileExtend | Attente de l'extension d'un fichier de données. | |
DataFileFlush | Attente qu'un fichier de données atteignent un stockage stable. | |
DataFileImmediateSync | Attente de la synchronisation immédiate d'un fichier de données dans un stockage table. | |
DataFilePrefetch | Attente d'une prélecture asynchrone d'un fichier de données. | |
DataFileRead | Attente d'une lecture à partir d'un fichier de données. | |
DataFileSync | Attente que les changements d'un fichier de données atteignent le stockage stable. | |
DataFileTruncate | Attente de la troncature d'un fichier de données. | |
DataFileWrite | Attente d'une écriture sur un fichier de données. | |
DSMFillZeroWrite | Attente de l'écriture de zéro octet dans un fichier de mémoire partagée dynamique. | |
LockFileAddToDataDirRead | Attente d'une lecture lors de l'ajout d'une ligne dans le fichier de verrouillage du répertoire de données. | |
LockFileAddToDataDirSync | Attente que les données atteignent un stockage stable lors de l'ajout d'une ligne dans le fichier de verrouillage du répertoire de données. | |
LockFileAddToDataDirWrite | Attente d'une écriture lors de l'ajout d'une ligne dans le fichier de verrouillage du répertoire de données. | |
LockFileCreateRead | Attente d'une lecture lors de la création du fichier de verrouillage du répertoire de données. | |
LockFileCreateSync | Attente que les données atteignent le stockage stable lors de la création du fichier de verrouillage du répertoire de données. | |
LockFileCreateWrite | Attente d'une écriture lors de la création du fichier de verrouillage du répertoire de données. | |
LockFileReCheckDataDirRead | Attente d'une lecture lors de la vérification du fichier de verrouillage du répertoire de données. | |
LogicalRewriteCheckpointSync | Attente que les correspondances de réécriture logique atteignent un stockage stable lors d'un checkpoint. | |
LogicalRewriteMappingSync | Attente que la correspondance des données atteignent un stockage stable lors d'une réécriture logique. | |
LogicalRewriteMappingWrite | Attente d'une réécriture des correspondances des données lors d'une réécriture logique. | |
LogicalRewriteSync | Attente que les correspondances de réécriture logique atteignent un stockage stable. | |
LogicalRewriteTruncate | Attente du vidage des données de correspondance lors d'une réécriture logique. | |
LogicalRewriteWrite | Attente d'une écriture des correspondances de réécriture logique. | |
RelationMapRead | Attente d'une lecture dans le fichier de correspondance des relations. | |
RelationMapSync | Attente que le fichier de correspondance des relations atteigne un stockage stable. | |
RelationMapWrite | Attente d'une écriture dans le fichier de correspondance des relations. | |
ReorderBufferRead | Attente d'une lecture lors de la gestion du tri des tampons. | |
ReorderBufferWrite | Attente d'une écriture lors de la gestion du tri des tampons. | |
ReorderLogicalMappingRead | Attente d'une lecture d'une correspondance logique lors de la gestion du tri des tampons. | |
ReplicationSlotRead | Attente d'une lecture à partir d'un fichier de contrôle pour un slot de réplication. | |
ReplicationSlotRestoreSync | Attente qu'un fichier de contrôle pour un slot de réplication atteigne le stockage stable lors de sa restauration en mémoire. | |
ReplicationSlotSync | Attente qu'un fichier de contrôle pour un slot de réplication atteigne le stockage stable. | |
ReplicationSlotWrite | Attente d'une écriture dans un fichier de contrôle pour un slot de réplication. | |
SLRUFlushSync | Attente que les données SLRU atteignent un stockage stable lors d'un checkpoint ou lors d'un arrêt du serveur de bases de données. | |
SLRURead | Attente d'une lecture à partir d'un bloc SLRU. | |
SLRUSync | Attente que les données SLRU atteignent un stockage stable suivant l'écriture d'un bloc. | |
SLRUWrite | Attente d'une écriture dans un bloc SLRU. | |
SnapbuildRead | Attente d'une lecture pour un snapshot du catalogue historique sérialisé. | |
SnapbuildSync | Attente que le snapshot du catalogue historique sérialisé atteigne un stockage stable. | |
SnapbuildWrite | Attente d'une écriture dans le snapshot du catalogue historique sérialisé. | |
TimelineHistoryFileSync | Attente que le fichier d'historique des timelines reçu via le flux de réplication atteigne un stockage stable. | |
TimelineHistoryFileWrite | Attente d'une écriture dans le fichier d'historique des timelines reçu via le flux de réplication. | |
TimelineHistoryRead | Attente d'une lecture dans le fichier d'historique des timelines reçu via le flux de réplication. | |
TimelineHistorySync | Attente qu'un nouveau fichier d'historique des timelines atteigne le stockage stable. | |
TimelineHistoryWrite | Attente d'une écriture d'un fichier d'historique des timelines. | |
TwophaseFileRead | Attente d'une lecture dans un fichier d'état pour le 2PC. | |
TwophaseFileSync | Attente que le fichier d'état du 2PC atteigne un stockage stable. | |
TwophaseFileWrite | Attente d'une écriture dans un fichier d'état pour le 2PC. | |
WALBootstrapSync | Attente que le WAL atteigne le stockage stable pendant l'initialisation (bootstrapping). | |
WALBootstrapWrite | Attente d'une écriture d'une page WAL lors de l'initialisation (bootstrapping). | |
WALCopyRead | Attente d'une lecture lors de la création d'un nouveau segment WAL en copiant un existant. | |
WALCopySync | Attente qu'un nouveau segment WAL créé, en copiant un existant, atteigne un stockage stable. | |
WALCopyWrite | Attente d'une écriture lors de la création d'un nouveau segment WAL par copie d'un existant. | |
WALInitSync | Attente qu'un fichier WAL nouvellement initialisée atteigne le stockage stable. | |
WALInitWrite | Attente d'une écriture lors de l'initialisation d'un nouveau fichier WAL. | |
WALRead | Attente d'une lecture à partir d'un fichier WAL. | |
WALSenderTimelineHistoryRead | Attente d'une lecture dans un fichier d'historique de timelines lors de la commande timeline du walsender. | |
WALSyncMethodAssign | Attente que les données atteignent un stockage stable lors de l'affectation de la méthode de synchronisation des WAL. | |
WALWrite | Attente d'une écriture dans un fichier WAL. |
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 serveur (en allouant de la mémoire partagée dynamique),
auquel cas les autres processus serveur 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 | LWLock | 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 un 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 du processus walsender.
Les valeurs possibles sont :
|
sent_lsn | pg_lsn | La position de la dernière transaction envoyée sur cette connexion |
write_lsn | pg_lsn | La position de la dernière transaction écrite sur disque par ce serveur standby |
flush_lsn | pg_lsn | La position de la dernière transaction vidée sur disque par ce serveur standby |
replay_lsn | pg_lsn | La position de la dernière transaction rejouée dans la base de données par ce serveur standby |
write_lag | interval | Durée passée entre le vidage local des WAL récents et la réception
de notification que ce serveur secondaire les a bien écrites (mais pas
encore vidées ou appliquées). Ceci peut être utilisé pour mesurer le
délai que le niveau remote_write de
synchronous_commit coûterait lors de la validation si
ce serveur était configuré comme un serveur secondaire
synchrone. |
flush_lag | interval | Durée passée entre le vidage local des WAL récents et la réception
de notification que ce serveur secondaire les a bien écrites et vidées
sur disque (mais pas encore appliquées). Ceci peut être utilisé pour
mesurer le délai que le niveau on de
synchronous_commit coûterait lors de la validation si
ce serveur était configuré comme un serveur secondaire
synchrone. |
replay_lag | interval | Durée passée entre le vidage local des WAL récents et la réception
de notification que ce serveur secondaire les a bien écrites, vidées
sur disque et appliquées. Ceci peut être utilisé pour
mesurer le délai que le niveau remote_apply de
synchronous_commit coûterait lors de la validation si
ce serveur était configuré comme un serveur secondaire
synchrone. |
sync_priority | integer | Priorité de ce serveur standby pour être choisi comme le serveur
standby synchrone dans une réplication synchrone basée
sur la priorité. Ceci n'a pas d'effet sur une réplication synchrone basée
sur un quorum. |
sync_state | text | État synchrone de ce serveur standby.
Les valeurs possibles sont :
|
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.
Les délais rapportés dans la vue
pg_stat_replication
sont des mesures de temps
prises pour l'écriture, le vidage sur disque et le rejeu des données
récentes des WAL et pour que le serveur d'envoi soit mis au courant. Ces
durées représentent le délai de validation qui a été (ou aurait été)
introduit par chaque niveau de validation synchrone si le serveur distant
était configuré comme un standby synchrone. Pour un standby asynchrone, la
colonne replay_lag
renvoie une approximation du
délai avant que les transactions récentes deviennent visibles aux requêtes.
Si le serveur standby a complètement rattrapé le serveur d'envoi et qu'il
n'y a plus d'activité en écriture (donc plus de nouveaux enregistrements
dans les journaux de transactions), les délais mesurés le plus récemment
continueront à être affichés pendant un court instant, puis seront mis à
NULL.
Les délais fonctionnent automatiquement pour la réplication physique. Les plugins de décodage logique pourraient émettre des messages de trace. S'ils ne le font pas, le mécanisme de trace affichera simplement une valeur NULL.
Les délais rapportés ne sont pas des prédictions du temps pris par le
serveur standby pour rattraper le serveur d'envoi en constatant le taux
actuel de rejeu. Un tel système afficherait des temps similaires alors que
de nouveaux journaux de transactions seraient générés, mais différeraient
lorsque le serveur deviendrait inactif. En particulier, quand le serveur
standby a complètement rattrapé le serveur d'envoi,
pg_stat_replication
affiche le temps pris pour
écrire, vider sur disque et rejouer l'emplacement de l'enregistrement le
plus récemment rapporté plutôt que zéro comme certains utilisateurs
pourraient s'y attendre. Ceci est cohérent avec le but de mesurer les
délais de la validation synchrone et de la visibilité des transactions
pour les transactions récentes en écriture. Pour réduire la confusion pour
les utilisateurs s'attendant à un autre modèle de retard, les colonnes de
retard sont réinitialisées à NULL après un court moment sur un système
entièrement à jour et complètement inactif. Les systèmes de supervision
devraient choisir s'ils souhaitent représenter ces colonnes comme des
données manquantes, des données à zéro, ou continuer à afficher la
dernière valeur connue.
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 |
sender_host | text |
Hôte de l'instance PostgreSQL auquel ce processus
« wal receiver » est connecté. Il peut s'agir d'un nom d'hôte,
d'une adresse IP ou d'un chemin d'accès à un répertoire
si la connexion se fait via un socket Unix (dans ce dernier cas, il est facile
de le distinguer car il s'agira toujours d'un chemin absolu débutant
par le caractère (/ ).)
|
sender_port | integer | Numéro de port de l'instance PostgreSQL auquel wal receiver est connecté. |
conninfo | text | Chaîne de connexion utilisée par ce wal receiver, les informations sensibles au niveau sécurité sont cachés. |
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_subscription
Colonne | Type | Description |
---|---|---|
subid | oid | OID de la souscription |
subname | text | Nom de la souscription |
pid | integer | Identifiant du processus worker de la souscription |
relid | Oid | OID de la relation que le processus worker synchronise ; NULL pour le processus worker apply principal |
received_lsn | pg_lsn | Dernier emplacement de journal de transactions reçu, la valeur initiale de ce champ étant 0 |
last_msg_send_time | timestamp with time zone | Horodatage d'envoi du dernier message reçu à partir du walsender original |
last_msg_receipt_time | timestamp with time zone | Horodatage de réception du dernier message reçu du walsender original |
latest_end_lsn | pg_lsn | Dernier emplacement des journaux de transactions rapporté par le walsender original |
latest_end_time | timestamp with time zone | Horodatage du dernier emplacement de journal de transactions rapporté par le walsender original |
La vue pg_stat_subscription
contiendra une ligne
par souscription du worker principal (avec le PID NULL si le processus
worker n'est pas en cours d'exécution), et des lignes supplémentaires pour
les workers gérant la copie initiale de données des tables souscrites.
Tableau 28.8. 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.9. 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'échecs 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.10. 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.11. 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 serveur 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 de 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 processus 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 serveur 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.12. 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.13. 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 avec HOT) |
n_tup_del | bigint | Nombre de lignes supprimées |
n_tup_hot_upd | bigint | Nombre de lignes mises à jour par HOT (c’est-à-dire 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.14. 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ème.
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
lectures de lignes individuelles de la table avec des index spécifiques
quand un parcours de bitmap est utilisé. Par conséquent, 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.
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 à un
parcours d'index seul.
Tableau 28.15. 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ème.
Tableau 28.16. 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.17. 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.18. 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.
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.19.
Tableau 28.19. Fonctions supplémentaires de statistiques
Utiliser pg_stat_reset()
réinitialise aussi les
compteurs que l'autovacuum utilise pour déterminer quand déclencher une
opération VACUUM ou une opération ANALYZE. Réinitialiser ces compteurs peut
empêcher l'autovacuum de réaliser un travail pourtant nécessaire, ce qui
entrainerait comme conséquence une fragmentation des tables ou des
statistiques obsolètes sur les données des tables. Un
ANALYZE
sur la base est recommandé après avoir
réinitialisé les statistiques.
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.20.
Ces fonctions d'accès utilisent un numéro d'identifiant du processus serveur, qui
va de un au nombre de processus serveur 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.20. Fonctions statistiques par processus serveur
Fonction | Type renvoyé | Description |
---|---|---|
| setof integer | Ensemble de numéros de processus serveur actuellement actifs (de 1 jusqu'au nombre de processus serveur actifs) |
| text | Texte de la requête la plus récente de ce processus serveur |
| timestamp with time zone | Heure à laquelle la requête la plus récente a été démarrée |
| inet | Adresse IP du client connecté à ce processus serveur |
| integer | Numéro de port TCP que le client utilise pour communiquer |
| oid | OID de la base de données auquelle ce processus serveur est connecté |
| integer | Identifiant du processus serveur |
| timestamp with time zone | Heure à laquelle ce processus a été démarré |
| oid | OID de l'utilisateur connecté à ce processus serveur |
| text | Nom du type d'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 28.4 pour les détails. |
| text | Nom de l'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 28.4 pour les détails. |
| timestamp with time zone | Heure à laquelle la transaction courante a été démarrée |