pg_stat_activity
pg_stat_replication
pg_stat_replication_slots
pg_stat_wal_receiver
pg_stat_recovery_prefetch
pg_stat_subscription
pg_stat_subscription_stats
pg_stat_ssl
pg_stat_gssapi
pg_stat_archiver
pg_stat_io
pg_stat_bgwriter
pg_stat_checkpointer
pg_stat_wal
pg_stat_database
pg_stat_database_conflicts
pg_stat_all_tables
pg_stat_all_indexes
pg_statio_all_tables
pg_statio_all_indexes
pg_statio_all_sequences
pg_stat_user_functions
pg_stat_slru
Le système de statistiques cumulatives de PostgreSQL récupère et fournit des informations sur l'activité du serveur. Actuellement, l'accès aux tables et index est comptabilisé en terme d'accès aux lignes et aux blocs. Le nombre total de lignes de chaque table et les informations sur les opérations de nettoyage et de calcul de statistiques sont aussi récupérées pour chaque table. Si activé, les appels aux fonctions des utilisateurs et le temps total passé dans chacune sont aussi comptabilisés.
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 système de statistiques cumulatives.
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 cumulatives 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, d'écriture, d'extension et de synchronisation des blocs.
Le paramètre track_wal_io_timing active la collecte des temps d'écriture et de synchronisation des journaux de transactions.
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
).
Les statistiques cumulatives sont placées en mémoire partagée. Chaque
processus PostgreSQL récupère les statistiques
localement, puis met à jour les données partagées à des intervalles
adéquats. Quand un serveur, y compris un secondaire physique, s'arrête
proprement, une copie permanente des données statistiques est enregistrée
dans le sous-répertoire pg_stat
, pour que les
statistiques survivent aux redémarrages du serveur. Par contre, en cas de
démarrage après un arrêt sale (autrement dit, après un arrêt immédiat, un
crash du serveur, un démarrage suite à la restauration d'une sauvegarde de
base), 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 27.1, sont disponibles pour montrer l'état courant du système. Il existe aussi plusieurs autres vues, listées à Tableau 27.2, qui montrent les statistiques accumulé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 27.2.26.
Lors de l'utilisation des vues et fonctions des statistiques cumulatives
pour superviser les données collectées, il est important de savoir que
l'information n'est pas mise à jour instantanément. Chaque processus serveur
individuel vide les statistiques accumulées en mémoire partagée avant d'être
de nouveau en attente, mais cela n'arrive pas plus fréquemment qu'une fois
toutes les PGSTAT_MIN_INTERVAL
millisecondes (1 seconde
sauf si cette constante est modifiée avant la compilation du serveur) ;
donc une requête ou une transaction toujours en cours n'affecte pas les
totaux affichés et l'information est de ce fait en retard par rapport à
l'activité en cours. Néanmoins, l'information de 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 accumulées, les valeurs accédées
sont mises en cache jusqu'à la fin de la transaction courante dans la
configuration par défaut. Donc les statistiques afficheront une information
statique tout au long de la vue de la transaction. De façon similaire,
l'information sur les requêtes en cours de toutes les sessions est
récupérée quand cette information est demandée pour la première fois à
l'intérieur d'une transaction, et la même information sera affichée tout au
long de la transaction. Ceci est une fonctionnalité, et non pas un bug, car
cela vous permet de réaliser plusieurs requêtes sur les statistiques et de
corréler les résultats sans vous soucier que les nombres changent entre
temps. Lors de l'analyse interactive des statistiques ou avec des requêtes
coûteuses, le delta du temps entre les accès aux statistiques individuelles
peut amener à des valeurs fausses significativement dans les statistiques
en cache. Pour minimiser cela, stats_fetch_consistency
peut être configuré à snapshot
, au prix d'une
utilisation mémoire accrue pour meetre en cache des données statistiques
inutiles. Par contre, s'il est connu que les statistiques ne sont accédées
qu'une seule fois, mettre en cache les statistiques accédées n'est pas
nécessaire et peut être évité en configurant
stats_fetch_consistency
à none
. Vous
pouvez exécuter pg_stat_clear_snapshot()
pour annuler
l'image des statistiques de la transaction en cours ou les valeurs en
cache, si applicable. La prochaine utilisation des informations
statistiques causera (en mode snapshot) la construction d'un nouveau
snapshot ou (en mode cache) la mise en cache des statistiques accédées.
Une transaction peut aussi voir ses propres statistiques (pas encore vidées
dans les statistiques en mémoire partagée) 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 nombres
n'agissent pas comme indiqués ci-dessus ; ils sont au contraire mis à
jour en continue tout au long de la transaction.
Certaines des informations des vues statistiques dynamiques montrées dans
Tableau 27.1 sont à accès
restreint. Les utilisateurs ordinaires peuvent seulement voir toutes les
informations sur leur propres sessions (les sessions appartenant à un
rôle dont ils sont membres). Les lignes des autres sessions auront de
nombreuses colonnes à NULL. Notez néanmoins que l'existence d'une session
et ses propriétés générales, tel que l'utilisateur et la base de données,
sont visibles à tous les utilisateurs. Les superutilisateurs et les rôles
disposant des droits du rôle interne
pg_read_all_stats
(voir aussi Section 21.5) peuvent accéder à toutes les informations
sur les sessions.
Tableau 27.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_recovery_prefetch | Seulement une ligne, affichant des statistiques sur la lecture
en avance de blocs lors du rejeu des transactions. Voir
pg_stat_recovery_prefetch 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_gssapi | Une ligne par connexion (standard et réplication), montrant des
informations sur l'authentification et le chiffrement GSSAPI utilisés
sur cette connexion. Voir
pg_stat_gssapi pour
les détails.
|
pg_stat_progress_analyze | Une ligne pour chaque connexion (incluant celles des processus
autovacuum worker) exécutant un
ANALYZE , pour indiquer le progrès actuel.
Voir Section 27.4.1.
|
pg_stat_progress_create_index | Une ligne pour chaque processus serveur exécutant un CREATE
INDEX ou un REINDEX , affichant la
progression actuelle. Voir
Section 27.4.4.
|
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 27.4.5. |
pg_stat_progress_cluster | Une ligne pour chaque processus serveur exécutant
CLUSTER ou VACUUM FULL , affichant
le progrès en cours.
Voir Section 27.4.2.
|
pg_stat_progress_basebackup | Une ligne pour chaque processus walsender envoyant une sauvegarde de base, en affichant le progrès actuel. Voir Section 27.4.6. |
pg_stat_progress_copy | Une ligne pour chaque processus en cours d'exécution de
COPY , affichant le progrès actuel.
Voir Section 27.4.3.
|
Tableau 27.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_checkpointer | Une seule ligne, affichant les statistiques sur l'activité du
processus checkpointer. Voir
pg_stat_checkpointer pour les 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 plus de détails.
|
pg_stat_io |
Une ligne pour chaque combinaison de type de processus, contexte et objet
cible contenant des statistiques disques sur l'instance. Voir
pg_stat_io pour plus de détails.
|
pg_stat_replication_slots | Une ligne par slot de réplication, affichant des statistiques sur
l'utilisation des slots de réplication. Voir
pg_stat_replication_slots pour plus de
détails.
|
pg_stat_slru | Une ligne par SLRU, affichant les statistiques des opérations. Voir
pg_stat_slru pour plus de détails.
|
pg_stat_subscription_stats | Une ligne par souscription, affichant des statistiques sur les
erreurs.
Voir
pg_stat_subscription_stats pour les détails.
|
pg_stat_wal | Une seule ligne, montrant les statistiques d'activité WAL. Voir
pg_stat_wal pour plus de 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_stat_user_functions |
Une ligne pour chaque fonction tracée, affichant des statistiques
sur l'exécution de cette fonction. Voir
pg_stat_user_functions pour des détails.
|
pg_stat_xact_user_functions | Similaire à pg_stat_user_functions , mais
compte seulement les appels lors de la transaction en cours
(qui ne sont pas encore inclus dans
pg_stat_user_functions ). |
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 |
Les statistiques par index sont particulièrement utiles pour déterminer les index utilisés et leur efficacité.
L'ensemble de vues pg_stat_io
et
pg_statio_
est utile pour déterminer l'efficacité
du cache disque. Elles peuvent être utilisées pour calculer un ratio
de lecture en cache. Notez que, bien que les statistiques d'entrées/sorties
disques de PostgreSQL capturent la plupart des
fois pour lequel le noyau a été appelé réaliser des entrées/sorties disques,
elles ne différencient pas entre les données qui ont été récupérées du
disque et celles qui résidaient déjà dans le cache disque du noyau. Il est
conseillé aux utilisateurs de combiner les vues statistiques de
PostgreSQL avec des outils systèmes pour avoir
un vision plus complète des performances des entrées/sorties disque de la
base de données.
pg_stat_activity
#
La vue pg_stat_activity
aura une ligne par
processus serveur, montrant des informations liées à l'activité courante de
ce processus.
Tableau 27.3. Vue pg_stat_activity
Type Description |
---|
OID de la base de données auquel ce processus serveur est connecté |
Nom de la base de données auquel ce processus serveur est connecté |
Identifiant du processus serveur |
Identifiant du processus du leader pour une requête parallélisée si ce
si ce processus est un worker, identifiant du processus d'un leader pour
la réplication logique parallélisée si ce processus est un worker
d'application parallélisée de la réplication logique.
|
OID de l'utilisateur connecté à ce processus serveur |
Nom de l'utilisateur connecté à ce processus serveur |
Nom de l'application connectée à ce processus serveur |
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. |
Nom d'hôte du client connecté, comme reporté par une recherche DNS
inverse sur |
Numéro de port TCP que le client utilise pour communiquer
avec le processus serveur,
ou |
Heure de démarrage du processus. Pour les processus backends, c'est l'heure où le client s'est connecté au serveur. |
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
|
Heure à laquelle la requête active a été démarrée, ou
si |
Heure à laquelle l'état ( |
Type de l'événement pour lequel le processus est en attente sinon NULL. Voir Tableau 27.4. |
Nom de l'événement d'attente si le processus est en attente, NULL dans le cas contraire. Voir Tableau 27.5 jusqu'à Tableau 27.13. |
État général du processus serveur. Les valeurs possibles sont :
|
Identifiant de transaction de haut niveau de ce processus, si disponible ; voir Section 66.1. |
L'horizon |
L'identifiant de la requête la plus récente du processus. Si
|
Texte de la requête la plus récente pour ce processus serveur. Si
|
Type du processus actuel. Les types possibles sont
|
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 27.4. Types de Wait Event
Type de Wait Event | Description |
---|---|
Activity | Le processus serveur est en attente. Ce type d'événement indique un
processus en attente d'activité dans sa boucle principale de traitement.
wait_event identifiera la point d'attente
spécifique ; voir Tableau 27.5.
|
BufferPin | Le processus serveur est en attente de l'accès exclusif à un buffer de données. Les attentes de ce type peuvent être prolongées si un autre processus détient un curseur ouvert qui est le dernier à avoir lu des données à partir du buffer en question. Voir Tableau 27.6. |
Client | Le processus serveur est en attente d'activité sur un socket
connecté à l'application de l'utilisateur. Donc le serveur attend quelque
chose indépendant de ses traitements internes..
wait_event identifiera le point d'attente
spécifique ; voir Tableau 27.7.
|
Extension | Le processus serveur est en attente d'une condition définie par un module d'extension. Voir Tableau 27.8. |
InjectionPoint | Le processus serveur est en attente qu'un point d'injection atteigne une décision définie dans un test. Voir Section 36.10.13 pour plus de détails. Ce type n'a pas de points d'attente prédéfinis. |
IO | Le processus serveur est en attente de la réalisation d'une opération
d'entrée/sortie disque. wait_event identifiera le
point d'attente spécifique ; voir Tableau 27.9.
|
IPC | Le processus serveur est en attente d'interaction avec un autre
processus serveur. wait_event identifiera le point
d'attente spécifique ; voir Tableau 27.10.
|
Lock | Le processus serveur est en attente d'un verrou lourd. Les verrous
lourds, gérés par le gestionnaire de verrous, protège principalement les
objets SQL visibles tels que les tables. Néanmoins, ils sont aussi
utilisés pour assurer des exclusions mutuelles pour certaines opérations
internes, telles que les extensions de relation.
wait_event identifiera le type de verrou attendu ;
voir Tableau 27.11.
|
LWLock | Le processus serveur est en attente d'un verrou léger. La plupart
de ces verrous protègent une structure de données particulière en mémoire
partagée. wait_event contiendra un nom identifiant le
but du verrou léger. (Certains verrous ont des noms spécifiques ;
les autres font partie d'un groupe de verrous, chacune avec un but
similaire.) Voir Tableau 27.12.
|
Timeout | Le processus serveur est en attente de l'expiration d'un délai.
wait_event identifiera le point d'attente
spécifique ; voir Tableau 27.13.
|
Tableau 27.5. Points d'attente Wait Events
de type Activity
Point d'attente Activity | Description |
---|---|
ArchiverMain | En attente dans la boucle principale du processus
archiver . |
AutovacuumMain | En attente dans la boucle principale du processus
autovacuum launcher . |
BgwriterHibernate | En attente dans le processus
background writer ,
qui hiberne. |
BgwriterMain | En attente dans la boucle principale du processus
background writer . |
CheckpointerMain | En attente dans la boucle principale du processus
checkpointer . |
LogicalApplyMain | En attente dans la boucle principale du processus
logical apply . |
LogicalLauncherMain | En attente dans la boucle principale du processus
logical apply launcher . |
LogicalParallelApplyMain | En attente dans la boucle principale du processus
logical parallel apply . |
RecoveryWalStream | En attente d'arrivée de WAL pendant la boucle principale
du processus startup ,
pendant une restauration avec streaming. |
ReplicationSlotsyncMain | En attente dans la boucle principale du
slotsync worker . |
ReplicationSlotsyncShutdown | En attente d'arrêt du
slotsync worker . |
SysloggerMain | En attente dans la boucle principale du processus
syslogger . |
WalReceiverMain | En attente dans la boucle principale du processus
walreceiver . |
WalSenderMain | En attente dans la boucle principale du processus
walsender . |
WalSummarizerWal | En attente de la génération de nouveaux journaux dans
walsummarizer . |
WalWriterMain | En attente dans la boucle principale du processus
walwriter . |
Tableau 27.6. Points d'attente de type Bufferpin
Point d'attente BufferPin | Description |
---|---|
BufferPin | En attente d'un verrou (pin) exclusif sur un buffer. |
Tableau 27.7. Points d'attente de type Client
Point d'attente Client | Description |
---|---|
ClientRead | En attente de lecture de données depuis le client. |
ClientWrite | En attente d'écriture de données vers le client. |
GssOpenServer | En attente de lecture de données depuis le client lors de l'établissement une session GSSAPI. |
LibpqwalreceiverConnect | En attente de l'établissement d'une connexion à un serveur distant
dans le walreceiver . |
LibpqwalreceiverReceive | En attente de la réception de données depuis un serveur distant
dans le walreceiver . |
SslOpenServer | En attente du SSL lors de l'établissement d'une connexion. |
WaitForStandbyConfirmation | En attente de la réception et de l'enregistrement physique des WAL par le serveur secondaire (réplication physique). |
WalSenderWaitForWal | En attente de l'enregistrement physique de journaux par
le processus walsender . |
WalSenderWriteData | En attente de n'importe quelle activité lors du traitement des
réponses d'un walreveiver
dans le processus walsender . |
Tableau 27.8. Points d'attente de type Extension
Point d'attente Extension | Description |
---|---|
Extension | En attente dans une extension. |
Tableau 27.9. Points d'attente de type Io
Point d'attente IO | Description |
---|---|
BasebackupRead | En attente de la lecture d'un fichier par un base backup. |
BasebackupSync | En attente de l'écriture de données sur un stockage durable par un base backup. |
BasebackupWrite | En attente de l'écriture d'un fichier par un base backup. |
BuffileRead | En attente d'une lecture depuis un fichier tampon (buffered file). |
BuffileTruncate | En attente pendant qu'un fichier tampon est tronqué. |
BuffileWrite | En attente d'une écriture dans un fichier tampon. |
ControlFileRead | En attente d'une lecture dans le fichier pg_control . |
ControlFileSync | En attente de l'écriture du fichier pg_control
en stockage durable. |
ControlFileSyncUpdate | En attente de l'écriture pour mettre à jour le fichier pg_control
vers un stockage durable. |
ControlFileWrite | En attente d'une écriture vers le fichier pg_control . |
ControlFileWriteUpdate | En attente d'une écriture de mise à jour du fichier pg_control . |
CopyFileRead | En attente d'une lecture pendant une copie de fichier. |
CopyFileWrite | En attente d'une écriture pendant une copie de fichier. |
DataFileExtend | En attente de l'extension du fichier d'une relation. |
DataFileFlush | En attente de l'enregistrement du fichier d'une relation sur un stockage durable. |
DataFileImmediateSync | En attente d'une synchronisation immédiate du fichier de données d'une relation vers un stockage durable. |
DataFilePrefetch | En attente d'un préchargement asynchrone d'un fichier de données d'une relation. |
DataFileRead | En attente d'une lecture dans un fichier de données d'une relation. |
DataFileSync | En attente de l'enregistrement des changements d'un fichier de données d'une relation vers un stockage durable. |
DataFileTruncate | En attente pendant qu'un fichier de données d'une relation est tronqué. |
DataFileWrite | En attente d'une écriture dans un fichier de données d'une relation. |
DsmAllocate | En attente de l'allocation d'un segment de mémoire partagée dynamique. |
DsmFillZeroWrite | En attente du remplissage par des zéros d'un fichier de la mémoire partagée. |
LockFileAddtodatadirRead | En attente d'une lecture lors de l'addition d'une ligne au fichier de verrouillage du répertoire de données. |
LockFileAddtodatadirSync | En attente de l'enregistrement de données sur un stockage durable lors de l'addition d'une ligne au fichier de verrouillage du répertoire de données. |
LockFileAddtodatadirWrite | En attente d'une écriture lors de l'ajout d'une ligne au fichier de verrouillage du répertoire de données. |
LockFileCreateRead | En attente de lecture lors de la création du fichier de verrouillage du répertoire de données. |
LockFileCreateSync | En attente de l'écriture de données sur un stockage durable lors de la création du fichier de verrouillage du répertoire de données. |
LockFileCreateWrite | En attente d'une écriture lors de la création du fichier de verrouillage du répertoire de données. |
LockFileRecheckdatadirRead | En attente d'une lecture lors de la vérification du fichier de verrouillage du répertoire de données. |
LogicalRewriteCheckpointSync | En attente de l'écriture sur un stockage durable des données mappées d'une réécriture logique pendant un checkpoint. |
LogicalRewriteMappingSync | En attente de l'écriture sur un stockage durable des données mappées lors d'une réécriture logique. |
LogicalRewriteMappingWrite | En attente de l'écriture des données mappées pendant une réécriture logique. |
LogicalRewriteSync | En attente de l'enregistrement sur un stockage durable des données mappées d'une réécriture logique. |
LogicalRewriteTruncate | En attente pendant que les données mappées sont tronquées pendant une réécriture logique. |
LogicalRewriteWrite | En attente d'une écriture de données mappées d'une réécriture logique. |
RelationMapRead | En attente d'une lecture du fichier de correspondance d'une relation. |
RelationMapReplace | En attente pendant le remplacement durable d'un fichier de correspondance de relation. |
RelationMapWrite | En attente pendant l'écriture du fichier de correspondance d'une relation. |
ReorderBufferRead | En attente d'une lecture pendant la réorganisation des buffers. |
ReorderBufferWrite | En attente d'une écriture pendant la réorganisation des buffers. |
ReorderLogicalMappingRead | En attente d'une lecture du mapping logique pendant la réorganisation des buffers. |
ReplicationSlotRead | En attente d'une lecture depuis le fichier de contrôle d'un slot de réplication. |
ReplicationSlotRestoreSync | En attente de l'écriture sur un stockage durable d'un fichier de contrôle d'un slot de réplication, pendant une restauration en mémoire. |
ReplicationSlotSync | En attente de l'écriture sur un stockage durable d'un fichier de contrôle d'un slot de réplication. |
ReplicationSlotWrite | En attente d'une écriture dans un fichier de contrôle d'un slot de réplication. |
SlruFlushSync | En attente de l'enregistrement sur stockage durable de données d'un cache SLRU pendant un checkpoint ou un arrêt de l'instance. |
SlruRead | En attente d'une lecture d'une page d'un cache SLRU. |
SlruSync | En attente de l'enregistrement sur stockage durable des données d'un cache SLRU suite à une écriture de page. |
SlruWrite | En attente de l'enregistrement d'une page d'un cache SLRU. |
SnapbuildRead | En attente d'une lecture d'un snapshot historique et sérialisé du catalogue. |
SnapbuildSync | En attente de l'enregistrement sur stockage durable d'un snapshot historique et sérialisé du catalogue. |
SnapbuildWrite | En attente d'une écriture d'un snapshot historique et sérialisé du catalogue. |
TimelineHistoryFileSync | En attente de l'enregistrement sur stockage durable d'un fichier d'historique de timeline reçu lors d'une réplication par streaming. |
TimelineHistoryFileWrite | En attente d'une écriture d'un fichier d'historique de timeline reçu par réplication par streaming. |
TimelineHistoryRead | En attente de lecture d'un fichier d'historique de timeline. |
TimelineHistorySync | En attente de l'enregistrement sur stockage durable d'un nouveau fichier d'historique de timeline. |
TimelineHistoryWrite | En attente d'écriture d'un nouveau fichier d'historique de timeline. |
TwophaseFileRead | En attente de lecture d'un fichier d'état de two-phase commit. |
TwophaseFileSync | En attente de l'enregistrement sur stockage durable d'un fichier d'état de two-phase commit. |
TwophaseFileWrite | En attente d'écriture d'un fichier d'état de two-phase commit. |
VersionFileSync | En attente de l'enregistrement sur stockage durable du fichier de version, lors de création d'une base de données. |
VersionFileWrite | En attente de l'écriture du fichier de version lors de création d'une base de données. |
WalsenderTimelineHistoryRead | En attente d'une lecture dans un fichier d'historique de timeline,
lors d'une commande de demande de timeline du walsender . |
WalBootstrapSync | En attente de l'enregistrement d'un WAL en stockage durable lors du bootstrap. |
WalBootstrapWrite | En attente d'une écriture d'une page de WAL lors du bootstrap. |
WalCopyRead | En attente d'une lecture lors de la création d'un nouveau segment de WAL créé par copie d'un segment existant. |
WalCopySync | En attente de l'enregistrement en stockage durable d'un nouveau segment de WAL créé par copie d'un segment existant. |
WalCopyWrite | En attente d'une écriture lors de la création d'un nouveau segment de WAL créé par copie d'un segment existant. |
WalInitSync | En attente de l'enregistrement en stockage durable d'un fichier WAL nouvellement initialisé. |
WalInitWrite | En attente d'une écriture lors de l'initialisation d'un nouveau fichier WAL. |
WalRead | En attente d'une lecture depuis un fichier WAL. |
WalSummaryRead | En attente d'une lecture depuis un fichier résumé de WAL. |
WalSummaryWrite | En attente d'une écriture vers un fichier résumé de WAL. |
WalSync | En attente de l'enregistrement en stockage durable d'un fichier WAL. |
WalSyncMethodAssign | En attente de l'enregistrement en stockage durable lors de l'assignation d'une nouvelle méthode de synchronisation. |
WalWrite | En attente d'une écriture vers un fichier WAL. |
Tableau 27.10. Points d'attente de type Ipc
Point d'attente IPC | Description |
---|---|
AppendReady | En attente de la disponibilité des nœuds des sous-plans
d'un nœud Append . |
ArchiveCleanupCommand | En attente de la fin de l'exécution de la commande archive_cleanup_command. |
ArchiveCommand | En attente de la fin de l'exécution de la commande archive_command. |
BackendTermination | En attente de la terminaison d'un autre backend. |
BackupWaitWalArchive | En attente du succès de l'archivage des fichiers WAL nécessaires à un backup. |
BgworkerShutdown | En attente de l'arrêt d'un background worker. |
BgworkerStartup | En attente du démarrage d'un background worker. |
BtreePage | En attente de la disponibilité du numéro de page nécessaire pour continuer le parcours parallélisé d'un B-tree. |
BufferIo | En attente de la fin d'une entrée-sortie pour un tampon. |
CheckpointDelayComplete | En attente d'un backend qui bloque la fin d'un checkpoint. |
CheckpointDelayStart | En attente d'un backend qui bloque le démarrage d'un checkpoint. |
CheckpointDone | En attente d'un checkpoint en train de se terminer. |
CheckpointStart | En attente du démarrage d'un checkpoint. |
ExecuteGather | En attente d'activité d'un processus enfant, au sein d'un nœud Gather . |
HashBatchAllocate | En attente de l'allocation d'une table de hachage par le participant élu
à un nœud Parallel Hash . |
HashBatchElect | En attente de l'élection d'un participant
à un nœud Parallel Hash pour allouer la table de hachage. |
HashBatchLoad | En attente de la fin du chargement d'une table de hachage par les autres
participants à un nœud Parallel Hash . |
HashBuildAllocate | En attente de l'allocation de la table de hachage initiale par un participant élu
à un nœud Parallel Hash . |
HashBuildElect | En attente de l'élection d'un participant
à un nœud Parallel Hash pour allouer la table de hachage initilale. |
HashBuildHashInner | En attente des autres participants
à un nœud Parallel Hash pour finir de hacher la table interne. |
HashBuildHashOuter | En attente des autres participants
à un nœud Parallel Hash pour finir de hacher la table externe. |
HashGrowBatchesDecide | En attente de l'élection d'un participant
à un nœud Parallel Hash pour décider d'une future croissance du batch. |
HashGrowBatchesElect | En attente de l'élection d'un participant
à un nœud Parallel Hash pour allouer plus de batchs. |
HashGrowBatchesFinish | En attente de la décision d'un participant élu
à un nœud Parallel Hash sur une future croissance du batch. |
HashGrowBatchesReallocate | En attente de l'allocation de plus de batchs par un participant élu
à un nœud Parallel Hash . |
HashGrowBatchesRepartition | En attente de la fin du repartitionnement par les autres participants
à un nœud Parallel Hash . |
HashGrowBucketsElect | En attente de l'élection d'un participant
à un nœud Parallel Hash pour allouer plus de buckets. |
HashGrowBucketsReallocate | En attente de la fin de l'allocation de plus de buckets par le participant élu
à un nœud Parallel Hash . |
HashGrowBucketsReinsert | En attente de la fin de l'insertion des lignes dans les nouveaux buckets
par les autres participants à un nœud Parallel Hash . |
LogicalApplySendData | En attente de l'envoi de données par un processus
apply leader à un processus parallel apply ,
en réplication logique. |
LogicalParallelApplyStateChange | En attente du changement d'état d'un processus parallel apply
de réplication logique. |
LogicalSyncData | En attente de l'envoi de données par un serveur distant pour une synchronisation initiale des tables d'une réplication logique. |
LogicalSyncStateChange | En attente du changement d'état d'un serveur distant en réplication logique. |
MessageQueueInternal | En attente de l'attachement d'un autre processus à une queue de messages partagée. |
MessageQueuePutMessage | En attente de l'écriture d'un message de protocole dans une queue de messages partagée. |
MessageQueueReceive | En attente de la réception d'octets depuis une queue de messages partagée. |
MessageQueueSend | En attente de l'envoi d'octets depuis une queue de messages partagée. |
MultixactCreation | En attente de la fin de la création d'un identifiant partagé
multitransaction (Multixact ). |
ParallelBitmapScan | En attente de la fin de l'initialisation d'un Parallel Bitmap Scan . |
ParallelCreateIndexScan | En attente de la fin du parcours du fichier de la table par les workers parallèles
pendant CREATE INDEX . |
ParallelFinish | En attente de la fin du calcul par des workers parallèles. |
ProcarrayGroupUpdate | En attente du nettoyage de l'ID de transaction par le group leader à la fin d'une opération parallèle. |
ProcSignalBarrier | En attente du traitement d'un évènement-barrière par tous les backends. |
Promote | En attente de la promotion d'un secondaire. |
RecoveryConflictSnapshot | En attente de la résolution d'un conflit de restauration à cause
d'un nettoyage par VACUUM . |
RecoveryConflictTablespace | En attente de la résolution d'un conflit de restauration à cause d'une suppression de tablespace. |
RecoveryEndCommand | En attente de la fin de la commande recovery_end_command. |
RecoveryPause | En attente du redémarrage de la restauration. |
ReplicationOriginDrop | En attente du passage à l'état inactif de l'origine d'une réplication pour pouvoir la supprimer. |
ReplicationSlotDrop | En attente du passage à l'état inactif d'un slot de réplication pour pouvoir le supprimer. |
RestoreCommand | En attente de la fin de la commande restore_command. |
SafeSnapshot | En attente de l'obtention d'un snapshot valide pour une transaction
READ ONLY DEFERRABLE . |
SyncRep | En attente d'une confirmation d'un serveur distant pendant une réplication synchrone. |
WalReceiverExit | En attente de la terminaison du walreceiver . |
WalReceiverWaitStart | En attente de l'envoi par le processus startup
des données initiales pour une réplication par streaming. |
WalSummaryReady | En attente de la fin de la génération d'un nouveau résumé de WAL. |
XactGroupUpdate | En attente de la mise à jour du statut de la transaction par le leader de groupe à la fin d'une opération parallélisée. |
Tableau 27.11. Points d'attente de type Lock
Point d'attente Lock | Description |
---|---|
advisory | En attente d'acquisition d'un verrou informatif (advisory lock) utilisateur. |
applytransaction | En attente d'acquisition d'un verrou sur une transaction distante appliquée par un abonné en réplication logique. |
extend | En attente d'extension d'une relation. |
frozenid | En attente de la mise à jour
de pg_database .datfrozenxid
et pg_database .datminmxid . |
object | En attente de l'acquisition d'un verrou sur un objet de la base autre qu'une table. |
page | En attente de l'acquisition d'un verrou sur une page d'une relation. |
relation | En attente de l'acquisition d'un verrou sur une relation. |
spectoken | En attente de l'acquisition d'un verrou d'insertion spéculative. |
transactionid | En attente de la fin d'une transaction. |
tuple | En attente de l'acquisition d'un verrou sur une ligne. |
userlock | En attente de l'acquisition d'un verrou utilisateur. |
virtualxid | En attente d'acquisition d'un verrou sur un ID de transaction virtuelle ; voir Section 66.1. |
Tableau 27.12. Points d'attente de type Lwlock
Point d'attente LWLock | Description |
---|---|
AddinShmemInit | En attente de gestion de l'espace en mémoire partagée d'une extension. |
AutoFile | En attente de la mise à jour du fichier postgresql.auto.conf . |
Autovacuum | En attente de lecture ou de mise à jour de l'état courant des
autovacuum workers . |
AutovacuumSchedule | En attente de la vérification qu'une table sélectionnée pour l'autovacuum nécessite toujours un nettoyage. |
BackgroundWorker | En attente de lecture ou de mise à jour de l'état d'un
background worker . |
BtreeVacuum | En attente de lecture ou mise à jour des informations liées au vacuum pour un index B-tree. |
BufferContent | En attente d'accès à une page de données en mémoire. |
BufferMapping | En attente de l'association d'un bloc de données avec un tampon dans le pool de mémoire cache. |
CheckpointerComm | En attente de gestion de requêtes fsync . |
CommitTs | En attente de lecture ou de mise à jour de la dernière valeur définie pour l'horodatage d'une validation de transaction (commit timestamp). |
CommitTsBuffer | En attente d'une entrée-sortie sur un tampon du cache SLRU de l'horodatage des commits. |
CommitTsSLRU | En attente d'accès au cache SLRU de l'horodatage des commits. |
ControlFile | En attente de lecture ou de mise à jour du fichier
pg_control , ou de création d'un nouveau fichier WAL. |
DSMRegistry | En attente de lecture ou de mise à jour du registre de mémoire partagée dynamique. |
DSMRegistryDSA | En attente d'accès à l'allocateur de mémoire partagée dynamique du registre de mémoire partagée dynamique. |
DSMRegistryHash | En attente d'accès à la table de hachage du registre de mémoire partagée dynamique. |
DynamicSharedMemoryControl | En attente de lecture ou écriture des informations d'allocation de la mémoire partagée dynamique. |
InjectionPoint | En attente de lecture ou écriture liée aux points d'injection. |
LockFastPath | En attente de lecture ou écriture des informations du verrou rapide (fast-path) d'un processus. |
LockManager | En attente de lecture ou écriture des informations d'un verrou lourd (heavyweight) d'un processus. |
LogicalRepLauncherDSA | En attente de l'allocateur de mémoire partagée dynamique du lanceur de réplication logique. |
LogicalRepLauncherHash | En attente d'accés à la table de hachage du lanceur de réplication logique. |
LogicalRepWorker | En attente de lecture ou de mise à jour de l'état des workers de réplication logique. |
MultiXactGen | En attente de la lecture ou de la mise à jour de l'état
d'un identifiant partagé multitransaction (Multixact ). |
MultiXactMemberBuffer | En attente d'entrée-sortie sur un tampon du cache SLRU pour les membres Multixact. |
MultiXactMemberSLRU | En attente d'accès au cache SLRU des membres Multixact. |
MultiXactOffsetBuffer | En attente d'entrée-sortie sur un tampon du cache SLRU des décalages Multixact. |
MultiXactOffsetSLRU | En attente d'accès au cache SLRU des décalages Multixact. |
MultiXactTruncation | En attente de lecture ou troncature des informations Multixact. |
NotifyBuffer | En attente d'entrée-sortie sur un tampon du cache SLRU
pour les messages NOTIFY . |
NotifyQueue | En attente de lecture ou mise à jour des messages NOTIFY . |
NotifyQueueTail | En attente de mise à jour de la limite de stockage
des messages NOTIFY . |
NotifySLRU | En attente d'accès au cache SLRU des messages NOTIFY . |
OidGen | En attente de l'allocation d'un nouvel OID. |
ParallelAppend | En attente de la sélection du prochain sous-plan
durant l'exécution d'un nœud Parallel Append . |
ParallelHashJoin | En attente de la synchronisation des workers
pendant l'exécution d'un nœud Parallel Hash Join . |
ParallelQueryDSA | En attente d'allocation de mémoire partagée dynamique pour une requête parallélisée. |
ParallelVacuumDSA | En attente d'allocation de mémoire partagée dynamique pour un vacuum parallélisé. |
PerSessionDSA | En attente d'allocation de mémoire partagée dynamique pour une requête parallélisée. |
PerSessionRecordType | En attente d'accès aux informations d'une requête parallélisée sur les types composites. |
PerSessionRecordTypmod | En attente d'accès aux informations d'une requête parallélisée sur les modificateurs de type qui identifient les types d'enregistrements anonymes. |
PerXactPredicateList | En attente d'accès à la liste des verrous de prédicat détenus par la transaction sérialisable en cours, durant une requête parallélisée. |
PgStatsData | En attente d'accès aux données statistiques en mémoire partagée. |
PgStatsDSA | En attente d'accès à l'allocateur de la mémoire partagée dynamique des statistiques. |
PgStatsHash | En attente d'accès à la table de hachage de la mémoire partagée des statistiques. |
PredicateLockManager | En attente d'accès aux informations des verrous de prédicat utilisées par des transactions sérialisables. |
ProcArray | En attente d'accès aux structures de données partagées par processus (typiquement, pour obtenir un snapshot ou pour récupérer l'identifiant de transaction d'une session). |
RelationMapping | En attente de lecture ou mise à jour d'un fichier
pg_filenode.map
(utilisé pour suivre les attributions des numéros de fichier
de certains catalogue système). |
RelCacheInit | En attente de lecture ou de mise à jour
du fichier d'initialisation du cache des relations
pg_internal.init . |
ReplicationOrigin | En attente de la création, suppression ou utilisation d'une origine de réplication. |
ReplicationOriginState | En attente de lecture ou mise à jour de la progression d'une origine de réplication. |
ReplicationSlotAllocation | En attente de l'allocation ou de la libération d'un slot de réplication. |
ReplicationSlotControl | En attente de lecture ou mise à jour de l'état d'un slot de réplication. |
ReplicationSlotIO | En attente d'une entrée-sortie sur un slot de réplication. |
SerialBuffer | En attente d'entrée-sortie sur un tampon du cache SLRU pour les conflits de transactions sérialisables. |
SerialControl | En attente de lecture ou mise à jour l'état partagé de pg_serial . |
SerializableFinishedList | En attente de l'accès à la liste des transactions sérialisées terminées. |
SerializablePredicateList | En attente de l'accès à la liste des verrous de prédicat détenus par les transactions sérialisées. |
SerializableXactHash | En attente de lecture ou de mise à jour des informations sur les transactions sérialisables. |
SerialSLRU | En attente d'accès au cache SLRU de gestion des conflits des transactions sérialisées. |
SharedTidBitmap | En attente d'accès à une bitmap partagé de TID,
lors d'un Bitmap Index Scan parallélisé. |
SharedTupleStore | En attente d'accès à un stockage de lignes partagé lors d'une requête parallélisée. |
ShmemIndex | En attente de recherche ou d'allocation d'espace en mémoire partagée. |
SInvalRead | En attente de récupération de messages depuis la queue d'invalidation des catalogues partagés. |
SInvalWrite | En attente d'ajout d'un message dans la queue d'invalidation des catalogues partagés. |
SubtransBuffer | En attente d'entrée-sortie sur un tampon du cache SLRU des sous-transactions. |
SubtransSLRU | En attente d'accès au cache SLRU des sous-transactions. |
SyncRep | En attente de lecture ou mise à jour d'informations sur l'état de la réplication synchrone. |
SyncScan | En attente de la sélection de l'emplacement de démarrage d'un parcours synchronisé de table. |
TablespaceCreate | En attente de création ou suppression d'un tablespace. |
TwoPhaseState | En attente de lecture ou de mise à jour de l'état des transactions préparées. |
WaitEventExtension | En attente de lecture ou mise à jour des points d'attente personnalisés pour une extension. |
WALBufMapping | En attente du remplacement d'une page dans le cache des WAL. |
WALInsert | En attente de l'insertion de données WAL dans un tampon mémoire. |
WALSummarizer | En attente de lecture ou mise à jour de l'état du résumé des WAL. |
WALWrite | En attente que les tampons WAL soient écrits sur disque. |
WrapLimitsVacuum | En attente de la mise à jour des limites sur la consommation des identifiants de transaction et des identifiants Multixact. |
XactBuffer | En attente d'entrées-sorties sur un tampon du cache SLRU des statuts de transaction. |
XactSLRU | En attente de l'accès au cache SLRU des statuts de transaction. |
XactTruncation |
En attente de l'exécution de la fonction pg_xact_status ,
ou de la mise à jour du plus ancien identifiant de transaction
qui lui est disponible.
|
XidGen | En attente d'allocation d'un nouvel identifiant de transaction. |
Tableau 27.13. Points d'attente de type Timeout
Point d'attente Timeout | Description |
---|---|
BaseBackupThrottle | En attente durant la sauvegarde de base lors de la limitation de l'activité. |
CheckpointWriteDelay | En attente entre les écritures pendant un checkpoint. |
PgSleep | En attente suite à un appel à la fonction pg_sleep
ou à une fonction du même type. |
RecoveryApplyDelay | En attente d'application des WAL pendant la restauration à cause d'un paramétrage de délai. |
RecoveryRetrieveRetryInterval | En attente de la restauration quand les données WAL
ne sont pas disponibles quelque soit la source
(pg_wal , archive ou streaming). |
RegisterSyncRequest | En attente dans l'envoi des requêtes de synchronisation au
checkpointer , à cause d'une queue de requêtes pleine. |
SpinDelay | En attente de l'acquisition d'un verrou spinlock disputé. |
VacuumDelay | En attente pendant la pause d'un vacuum déduite du calcul des coûts. |
VacuumTruncate | En attente de l'acquisition d'un verrou exclusif pour tronquer tous les blocs vides à la fin d'une table nettoyée. |
WalSummarizerError | En attente après une erreur lors du résumé d'un WAL. |
Voici des exemple pour voir les wait events :
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 | ProcArray (2 rows)
SELECT a.pid, a.wait_event, w.description FROM pg_stat_activity a JOIN pg_wait_events w ON (a.wait_event_type = w.type AND a.wait_event = w.name) WHERE a.wait_event is NOT NULL and a.state = 'active'; -[ RECORD 1 ]------------------------------------------------------------------ pid | 686674 wait_event | WALInitSync description | Waiting for a newly initialized WAL file to reach durable storage
Les extensions peuvent ajouter des événements Extension
,
InjectionPoint
et LWLock
aux listes affichées dans Tableau 27.8 et
Tableau 27.12. Dans certains cas, le nom d'un
LWLock
affecté par une extension ne sera pas disponible
pour tous les processus serveur. Il peut être indiqué simplement comme
« extension
» plutôt que par le nom indiqué
par l'extension.
pg_stat_replication
#
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 27.14. Vue pg_stat_replication
Type Description |
---|
Identifiant du processus d'envoi des WAL |
OID de l'utilisateur connecté à ce processus |
Nom de l'utilisateur connecté à ce processus |
Nom de l'application qui est connectée à ce processus |
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. |
Nom de l'hôte du client connecté, comme renvoyé par une
recherche DNS inverse sur |
Numéro du port TCP que le client utilise pour la
communication avec ce processus, ou |
Heure à laquelle ce processus a été démarré, exemple, lorsque le client s'est connecté à ce processus expéditeur de WALs. |
L'horizon |
État courant du processus walsender. Les valeurs possibles sont :
|
La position de la dernière transaction envoyée sur cette connexion |
La position de la dernière transaction écrite sur disque par ce serveur standby |
La position de la dernière transaction vidée sur disque par ce serveur standby |
La position de la dernière transaction rejouée dans la base de données par ce serveur standby |
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 |
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 |
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 |
Priorité de ce serveur standby pour être choisi comme le serveur
|
État synchrone de ce serveur standby. Les valeurs possibles sont :
|
Horodatage d'envoi du dernier message de réponse reçu par le standby |
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.
pg_stat_replication_slots
#
La vue pg_stat_replication_slots
contiendra
une ligne par slot de réplication logique, montrant les statistiques de son utilisation.
Tableau 27.15. Vue pg_stat_replication_slots
Type de la colonne Description |
---|
Un identifiant, unique à l'instance, pour le slot de réplication |
Nombre de transactions déversées sur disque une fois que la mémoire
utilisée par le décodage logique pour décoder les changements depuis les WAL, a
dépassé |
Nombre de fois où des transactions sont déversées sur disque pendant le décodage des changements des WAL pour ce slot. Ce compteur est incrémenté chaque fois qu'une transaction est déversée, et une même transaction peut déverser plusieurs fois. |
Quantité de données de transaction décodées déversées sur disque pendant
le décodage des changements des WAL pour ce slot. Ce compteur et
ceux liés au déversement sur disque peuvent être utilisés pour mesurer les
E/S qui se produisent lors du décodage logique et permettre d'optimiser
|
Nombre de transactions en cours envoyées au plugin de sortie de décodage logique
après que la mémoire utilisée par le décodage logique pour décoder les changements
depuis les WAL pour ce slot a dépassé |
Nombre de fois ou des transactions en cours sont envoyées au plugin de sortie de décodage logique lors du décodage des changements depuis les WAL pour ce slot. Ce compteur est incrémenté chaque fois qu'une transaction est envoyée, et la même transaction peut être envoyée plusieurs fois. |
Quantité de données de transactions décodées pour les transactions en cours
envoyées par flux au plugin de sortie de décodage logique pendant que
des changements sont décodés pour ce slot depuis les WAL. Ce compteur et
les compteurs similaires liés pour ce slot peuvent être utilisés
pour optimiser |
Nombre de transactions décodées envoyées au plugin de sortie de décodage pour ce slot. Cela ne comprend que les transactions de plus haut niveau pour ce slot, et ce compteur n'est pas incrémenté pour les sous-transactions. Notez que cela inclut les transactions qui sont envoyées par flux et/ou déversées sur disque. |
Quantité de données de transactions décodées pour envoyer les transactions au plugin de sortie de décodage pendant que les changements sont décodés depuis les WAL pour ce slot. Notez que cela inclut les transactions qui sont envoyées par flux et/ou déversées sur disque. |
Date où ces statistiques ont été remises à zéro. |
pg_stat_wal_receiver
#
La vue pg_stat_wal_receiver
contiendra seulement
une ligne, affichant les statistiques du walreceiver du serveur de
connexion.
Tableau 27.16. Vue pg_stat_wal_receiver
Type Description |
---|
Identifiant du processus de réception des enregistrements de transaction |
Statut d'activité du processus walreceiver |
Première position dans le journal de transaction utilisée quand walreceiver a été démarré |
Première ligne de temps utilisée quand walreceiver a été démarré |
Dernier emplacement dans les journaux de transactions ayant déjà été reçu et écrit sur disque, mais non vidé du cache. Ceci ne doit pas être utilisé pour des vérifications sur l'intégrité des données. |
Dernier emplacement dans les journaux de transactions ayant déjà été reçu et écrit sur disque, et le cache vidé, la valeur initiale de ce champ étant le premier emplacement utilisé lorsque le processus walreceiver a été démarré. |
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 |
Horodatage d'envoi du dernier message reçu à partir du walsender |
Horodatage de la réception du dernier message à partir du walsender |
Dernière position de transaction reportée par le walsender associé |
Horodatage de la dernière position de transaction reportée par le walsender associé |
Nom du slot de réplication utilisé par ce walreceiver |
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 |
Numéro de port de l'instance PostgreSQL auquel wal receiver est connecté. |
Chaîne de connexion utilisée par ce wal receiver, les informations sensibles au niveau sécurité sont cachés. |
pg_stat_recovery_prefetch
#
La vue pg_stat_recovery_prefetch
contiendra une
seule ligne. Les colonnes wal_distance
,
block_distance
et
io_depth
affichent les valeurs actuelles et les
autres colonnes affichent des compteurs cumulatifs qui peuvent être
réinitialisés avec la fonction pg_stat_reset_shared
.
Tableau 27.17. Vue pg_stat_recovery_prefetch
Type Description |
---|
Horodatage de la dernière réinitialisation de ces statistiques |
Nombre de blocs lus en avance parce qu'ils n'étaient pas dans le cache |
Nombre de blocs non lus en avance parce qu'ils étaient déjà dans le cache |
Nombre de blocs non lus dans le cache parce qu'ils devaient être initialisés à zéro |
Nombre de blocs non lus dans le cache parce qu'ils n'existaient pas encore |
Nombre de blocs non lus dans le cache parce qu'une image complète d'un bloc a été inclus dans le WAL |
Nombre de blocs non lus dans le cache parce qu'ils avaient été récemment lus en avance |
Nombre d'octets que le prefetcher recherche |
Nombre de blocs que le prefetcher recherche |
Nombre de lectures en avance initiées mais pas encore terminées |
pg_stat_subscription
#
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 27.18. Vue pg_stat_subscription
Type Description |
---|
OID de la souscription |
Nom de la souscription |
Type de processus worker pour la souscription. Les types possibles sont
|
Identifiant du processus worker de la souscription |
Identifiant du processus leader si ce processus est un worker d'application parallélisé ; NULL si ce processus est un worker d'application autonome ou un worker de synchronisation de table |
OID de la relation que le processus worker synchronise ; NULL pour le processus worker apply principal et ses workers |
Dernier emplacement de journal de transactions reçu, la valeur initiale de ce champ étant 0 ; NULL pour les workers apply |
Horodatage d'envoi du dernier message reçu à partir du walsender original ; NULL pour les workers apply |
Horodatage de réception du dernier message reçu du walsender original ; NULL pour les workers apply |
Dernier emplacement des journaux de transactions rapporté par le walsender original ; NULL pour les workers apply |
Horodatage du dernier emplacement de journal de transactions rapporté par le walsender original |
pg_stat_subscription_stats
#
La vue pg_stat_subscription_stats
contiendra une
ligne par souscription.
Tableau 27.19. Vue pg_stat_subscription_stats
Type de colonne Description |
---|
OID de la souscription |
Nom de la souscription |
Nombre de fois où une erreur est survenue lors de l'application des modifications |
Nombre de fois où une erreur est survenue lors de la synchronisation initiale de la table |
Horodatage de la dernière réinitialisation de ces statistiques |
pg_stat_ssl
#
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 27.20. Vue pg_stat_ssl
Type Description |
---|
ID du processus backend ou du processus d'envoi de WAL |
True si SSL est utilisé dans cette connexion |
Version de SSL utilisée, ou NULL si SSL n'est pas utilisé pour cette connexion |
Nom du chiffrement SSL utilisé, ou NULL si SSL n'est pas utilisé pour cette connexion |
Nombre de bits dans l'algorithme de chiffrement utilisé, ou NULL si SSL n'est pas utilisé pour cette connexion |
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 |
Numéro de série du certificat client ou NULL si aucun certificat n'a été fourni ou si le SSL n'est pas utilisé dans cette connexion. La combinaison du numéro de série du certification et de l'émetteur du certificat identifie de façon unique un certificat (sauf si l'émetteur réutilise par erreur les numéros de série). |
DN de l'émetteur du certificat client ou NULL si aucun certificat
client n'a été fourni ou si le SSL n'est pas utilisé dans cette
connexion. Ce champ est tronqué comme
|
pg_stat_gssapi
#
La vue pg_stat_gssapi
contient une ligne par
processus serveur, affichant des informations sur l'utilisation de GSSAPI
pour 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 27.21. Vue pg_stat_gssapi
Type Description |
---|
Identifiant du processus serveur |
True si l'authentification GSSAPI a été utilisée pour cette connexion |
Principal utilisé pour authentifier cette connexion, ou NULL si
GSSAPI n'a pas été utilisé pour authentifier cette connexion. Ce champ
est tronqué si le principal est plus long que
|
True si le chiffrement GSSAPI est utilisé avec cette connexion |
Vrai si les informations d'identification GSSAPI ont été déléguées sur cette connexion. |
pg_stat_archiver
#
La vue pg_stat_archiver
aura toujours une seule
ligne contenant les données du processus d'archivage de l'instance.
Tableau 27.22. Vue pg_stat_archiver
Type Description |
---|
Nombre de journaux de transactions archivés avec succès |
Nom du plus récent journal de transaction archivé avec succès |
Horodatage de la plus récente opération d'archivage réussie |
Nombre d'échecs d'archivage de journaux de transactions |
Nom du journal de transactions correspondant au plus récent archivage échoué |
Horodatage de la plus récente opération d'archivage échouée |
Horodatage de la dernière réinitialisation de ces statistiques |
Habituellement, les fichiers WAL sont archivés dans l'ordre, du plus
ancien ou plus récent, mais ceci n'est pas garanti et ne tient pas sous
certaines circonstances, comme lors de la promotion d'un serveur secondaire
ou lors d'une restauration après crash. De ce fait, il n'est pas garanti que
tous les fichiers plus anciens que
last_archived_wal
aient été correctement archivés.
pg_stat_io
#
La vue pg_stat_io
contient une ligne pour chaque
combinaisons de type de processusn objet cible d'entrées/sorties disques,
et contexte d'entrées/sorties disques, affichant des statistiques sur
l'utilisation des entrées/sorties disques par l'instance. Les combinaisons
qui n'ont pas de sens sont omises.
Actuellement, les entrées/sorties disques sur des relations (par exemple, tables, index) sont tracées. Néanmoins, les entrées/sorties disques qui ne passent pas par le cache disque (par exemple lors du déplacement d'une table d'un tablespace à un autre) ne sont pas actuellement tracées.
Tableau 27.23. Vue de pg_stat_io
Type de colonne Description |
---|
Type de processus backend (par exemple un background worker, un autovacuum
worker). Voir
|
Objet cible d'une opération d'entrées/sorties disques. Les valeurs possibles sont :
|
Le contexte d'une opération d'entrées/sorties disques. Les valeurs possibles sont :
|
Nombre d'opérations de lectures, chacune de la taille indiquée dans
|
Temps passés aux opérations de lecture en millisecondes (si track_io_timing est activé, sinon zéro) |
Nombre d'opérations d'écritures, chacune de la taille indiquée dans
|
Temps passés aux opérations d'écriture en millisecondes (si track_io_timing est activé, sinon zéro) |
Nombre d'unités de la taille |
Temps passé en opérations de réécriture en millisecondes (si track_io_timing est activé, sinon zéro). Ceci inclut le temps passé en queue pour les demandes d'écriture et, potentiellement, le temps passé à écrire des données modifiées. |
Nombre d'opérations d'agrandissement de relations, chacune de la taille
spécifiée dans |
Temps passé dans des opérations d'agrandissement en millisecondes (si track_io_timing est activé, sinon zéro) |
Nombre d'octets par unité de lecture, écriture ou agrandissement.
Les lectures, écritures et agrandissements des relations sont faites
dans des unités de |
Nombre de fois qu'un bloc désiré a été trouvé dans le cache disque. |
Nombre de fois qu'un bloc a été écrit à partir d'un cache partagé ou local pour le rendre disponible à d'autres utilisations.
Dans un |
Le nombre de fois où un buffer existant dans un buffer de taille limité a
été réutilisé dans le cadre d'une opération d'entrées/sorties disques des
contextes |
Nombre d'appels à |
Temps passé dans les opérations fsync en millisecondes (si track_io_timing est activé, sinon zéro) |
Horodatage de la dernière réinitialisation des statistiques. |
Certains types de processus backend ne réalisent jamais d'opérations
d'entrées/sorties sur certains objets et/ou certains contextes. Ces lignes
sont omises de la vue. Par exemple, le checkpointer ne s'occupe pas des
tables temporaires, donc il n'y aura pas de lignes pour
backend_type
checkpointer
et
object
temp relation
.
De plus, certaines opérations d'entrées/sorties disques ne seront jamais
réalisées, soit par certains types de backends soit par certains objets
soit par certains contextes. Ces cellules seront à NULL. Par exemple, les
tables temporaires ne sont jamais synchronisées sur disque
(fsync
), donc la colonne fsyncs
sera
à NULL pour object
temp relation
. De
plus, le background writer ne fait pas de lectures, donc la colonne
reads
seront NULL pour les lignes
backend_type
background writer
.
pg_stat_io
peut être utilisé pour informer
sur l'optimisation de la base.
Par exemple :
Un grand nombre d'évictions
peut indiquer que le cache
disque (paramètre shared_buffers
) doit être
augmenté.
Les backends clients se basent sur le checkpointer pour s'assurer que
les données sont enregistrées sur un stockage permanent. De grands nombres
pour fsyncs
pour client backend
pourrait indiquer une mauvaise configuration du cache disque ou du
checkpointer. Il existe plus d'informations sur la configuration du
checkpointer dans Section 28.5.
Habituellement, les backends client doivent être capable de se baser sur les processus auxiliaires tels que le checkpointer et le background writer pour écrire autant que possible les données modifiées. De grands nombres d'écritures par des backends clients peuvent indiquer une mauvaise configuration du cache disque ou du checkpointer. Plus d'informations sur le checkpointer sont disponibles dans Section 28.5.
Les colonnes traçant les durées des entrées/sorties disques seront à des
valeurs différentes de zéro si track_io_timing est
activé. L'utilisateur doit faire attention lors de l'utilisation de ces
colonnes avec celles opérations d'entrée/sorties disqe correspondantes
au cas où track_io_timing
n'était pas activé en
permanence depuis la dernière réinitialisation des statistiques.
pg_stat_bgwriter
#
La vue pg_stat_bgwriter
aura toujours une ligne
unique, contenant les données sur le processus background
writer
de l'instance.
Tableau 27.24. Vue pg_stat_bgwriter
Type Description |
---|
Nombre de tampons écrits par le processus background writer (processus d'écriture en tâche de fond) |
Nombre de fois que le processus background writer a arrêté son parcours de nettoyage pour avoir écrit trop de tampons |
Nombre de tampons alloués |
Dernière fois que ces statistiques ont été réinitialisées |
pg_stat_checkpointer
#
La vue pg_stat_checkpointer
aura toujours une
seule ligne, contenant des données sur le processus checkpointer de
l'instance.
Tableau 27.25. Vue pg_stat_checkpointer
Type Description |
---|
Nombre de checkpoints planifiés suite au dépassement du délai. Notez que les checkpoints peuvent être ignorés si le serveur a été inactif depuis le dernier checkpoint. Cette valeur compte à la fois les checkpoints réalisés et les checkpoints ignorés |
Nombre de checkpoints réclamés et réalisés |
Nombre de restartpoints planifiés suit à un dépassement de délai ou à une tentative échouée |
Nombre de restartpoints réclamés |
Nombre de restartpoints réalisés |
Durée totale passée dans la portion de traitement des checkpoints et restartpoints où des fichiers ont été écrits sur disque, en millisecondes |
Durée totale passée dans la portion de traitement des checkpoints et restartpoints où des fichiers ont été synchronisés sur disque, en millisecondes |
Nombre de buffers écrits lors des checkpoints et restartpoints |
Horodatage de la dernière réinitialisation de ces statistiques |
pg_stat_wal
#
La vue pg_stat_wal
a toujours une ligne,
contenant les données sur l'activité des journaux de transaction de
l'instance.
Tableau 27.26. Vue pg_stat_wal
Type de la colonne Description |
---|
Nombre total d'enregistrements générés dans les journaux de transaction |
Nombre total d'images de pages complètes générées dans les journaux de transactions |
Quantité totale de journaux de transactions générés en octets. |
Nombre de fois où des données de journaux de transactions ont été écrites sur disque parce que le cache des journaux de transactions était rempli |
Nombre de fois où les tampons de journaux de transactions ont été écrits
sur disque via des appels à |
Nombre de fois où les fichiers des journaux de transactions ont été
synchronisés sur disque via des appels à
|
Temps total dépensé à l'écriture du cache des journaux de transactions
sur disque via des appels à |
Temps total dépensé à synchroniser les fichiers des journaux de
transactions vers le disque via des appels à
|
Date où ces statistiques ont été remises à zéro |
pg_stat_database
#
La vue pg_stat_database
ne contiendra qu'une ligne
pour chaque base de données dans l'instance, plus une pour les objets
partagés, montrant ses statistiques globales.
Tableau 27.27. Vue pg_stat_database
Type Description |
---|
OID d'une base de données, ou 0 pour les objets partagés |
Nom de cette base de données, or |
Nombre de processus serveur actuellement connectés à cette base de
données, ou |
Nombre de transactions de cette base de données qui ont été validées |
Nombre de transactions de cette base de données qui ont été annulées |
Nombre de blocs disques lus dans cette base de données |
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). |
Nombre de lignes vivantes récupérées par des parcours séquentiels et par des enregistrements d'index renvoyés par les parcours d'index dans cette base |
Nombre de lignes vivantes récupérées par les parcours d'index dans cette base |
Nombre de lignes insérées par des requêtes dans cette base de données |
Nombre de lignes mises à jour par des requêtes dans cette base de données |
Nombre de lignes supprimées par des requêtes dans cette base de données |
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
|
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. |
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. |
Nombre de verrous mortels détectés dans cette base de données |
Nombre d'échecs pour la vérification des sommes de contrôle détectés sur cette base de données (ou sur un objet partagé), ou NULL si les sommes de contrôle ne sont pas activées. |
Horodatage du dernier échec de vérification de somme de contrôle pour un bloc détecté dans cette base (ou sur un objet partagé), ou NULL si les sommes de contrôle ne sont pas activés. |
Temps passé à lire des blocs de donnée dans des fichiers par des processus serveur dans cette base de données, en millisecondes (si track_io_timing est activé, sinon zéro) |
Temps passé à écrire des blocs de données dans des fichiers par les processus serveur dans cette base de données, en millisecondes (si track_io_timing est activé, sinon zéro) |
Temps passé à écrire par les sessions de cette base de données, en millisecondes (notez que les statistiques sont seulement mises à jour quand l'état d'une session change, ainsi si des sessions ont été inactives longtemps, ce temps d'inactivité ne sera pas inclus) |
Temps passé à exécuter des expressions SQL dans cette base de données,
en millisecondes (ceci correspond à l'état |
Temps passé inactif dans une transaction dans cette base de données, en
millisecondes (cela correspond aux états |
Nombre total de sessions établies dans cette base de données |
Nombre de sessions dans cette base de données qui ont été terminées parce que la connexion au client a été perdue |
Nombre de sessions dans cette base de données qui ont été terminées par des erreurs fatales |
Nombre de sessions dans cette base de données qui ont été terminées par l'intervention d'un opérateur |
Dernière fois que ces statistiques ont été réinitialisées |
pg_stat_database_conflicts
#
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.
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 27.28. Vue pg_stat_database_conflicts
Type Description |
---|
OID de la base de données |
Nom de cette base de données |
Nombre de requêtes dans cette base de données qui ont été annulées suite à la suppression de tablespaces |
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 |
Nombre de requêtes dans cette base de données qui ont été annulées à cause d'instantanés trop vieux |
Nombre de requêtes dans cette base de données qui ont été annulées à cause de tampons verrouillés |
Nombre de requêtes dans cette base de données qui ont
été annulées à cause de |
Nombre d'utilisations de slots logiques dans cette base de données qui ont été annulées parce que le snapshot était trop ancien ou parce que le paramètre wal_level était trop bas sur le primaire |
pg_stat_all_tables
#
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 27.29. Vue pg_stat_all_tables
Type Description |
---|
OID d'une table |
Nom du schéma dans lequel se trouve cette table |
Nom de cette table |
Nombre de parcours séquentiels initiés sur cette table |
Horodatage du dernier parcours séquentiel, basé sur l'heure de fin de la transaction la plus récente |
Nombre de lignes vivantes rapportées par des parcours séquentiels |
Nombre de parcours d'index initiés sur cette table |
Horodatage du dernier parcours d'index, basé sur l'heure de fin de la transaction la plus récente |
Nombre de lignes vivantes rapportées par des parcours d'index |
Nombre total de lignes insérées |
Nombre total de lignes mises à jour. (Ceci inclut les mises à jour
comptées dans |
Nombre total de lignes supprimées |
Nombre de lignes mises à jour en utilisant HOT. Ce sont les mises à jour qui n'ont pas nécessitées de nouvelles versions dans les index. |
Nombre de lignes mises à jour où la nouvelle version de ligne va sur
un nouveau bloc du HEAP, laissant derrière
la version originale dont le
champ |
Nombre estimé de lignes vivantes |
Nombre estimé de lignes mortes |
Nombre estimé de lignes modifiées depuis le dernier ANALYZE sur cette table |
Nombre estimé de lignes insérées depuis le dernier VACUUM sur cette table |
Dernière fois qu'une opération VACUUM manuelle
a été faite sur cette table (sans compter
|
Dernière fois que le démon autovacuum a exécuté une opération VACUUM sur cette table |
Dernière fois qu'une opération ANALYZE a été lancée manuellement sur cette table |
Dernière fois que le démon autovacuum a exécuté une opération ANALYZE sur cette table |
Nombre de fois qu'une opération VACUUM manuelle a été
lancée sur cette table (sans compter
|
Nombre de fois que le démon autovacuum a exécuté une opération VACUUM manuelle |
Nombre de fois qu'une opération ANALYZE manuelle a été lancée sur cette table |
Nombre de fois que le démon autovacuum a exécuté une opération ANALYZE sur cette table |
pg_stat_all_indexes
#
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.
Tableau 27.30. Vue pg_stat_all_indexes
Type Description |
---|
OID de la table pour cet index |
OID de cet index |
Nom du schéma dans lequel se trouve cet index |
Nom de la table pour cet index |
Nom de cet index |
Nombre de parcours d'index initiés par cet index |
L'horodatage du dernier parcours de cet index, basé sur l'heure de fin de la transaction la plus récente |
Nombre d'entrées d'index retournées par des parcours sur cet index |
Nombre de lignes vivantes de la table rapportées par des simples parcours d'index utilisant cet index |
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.
Les requêtes qui utilisent certaines constructions SQL
pour rechercher les lignes correspondant à certaines valeurs d'une liste
ou un tableau de plusieurs valeurs scalaires (voir Section 9.25) réalisent plusieurs parcours d'index
« primitifs » (jusqu'à un parcours primitif par valeur scalaire)
tout au long de l'exécution de la requête. Chaque parcours d'index primitif
interne incrémente le champ
pg_stat_all_indexes
.idx_scan
,
donc il est possible que le nombre de parcours d'index dépasse
significativement le nombre total d'exécutions du nœud de parcours d'index
de l'exécuteur.
pg_statio_all_tables
#
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 27.31. Vue pg_statio_all_tables
Type Description |
---|
OID d'une table |
Nom du schéma dans lequel se trouve cette table |
Nom de cette table |
Nombre de blocs disque lus hors cache pour cette table |
Nombre de blocs disque lus dans le cache pour cette table |
Nombre de blocs disque lus hors cache pour tous les index de cette table |
Nombre de tampons lus dans le cache pour tous les index de cette table |
Nombre de blocs disque lus sur la partie TOAST de cette table (si présente) |
Nombre de tampons récupérés sur la partie TOAST de cette table (si présente) |
Nombre de blocs disque lus sur les index de la partie TOAST de cette table (si présente) |
Nombre de tampons récupérés sur les index de la partie TOAST de cette table (si présente) |
pg_statio_all_indexes
#
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 27.32. Vue pg_statio_all_indexes
Type Description |
---|
OID de la table pour cet index |
OID de cet index |
Nom du schéma dans lequel se trouve cet index |
Nom de la table pour cet index |
Nom de cet index |
Nombre de blocs disque lus pour cet index |
Nombre de tampons récupérés sur cet index |
pg_statio_all_sequences
#
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 27.33. Vue pg_statio_all_sequences
Type Description |
---|
OID de cette séquence |
Nom du schéma dans lequel se trouve cette séquence |
Nom de cette séquence |
Nombre de blocs disque lus pour cette séquence |
Nombre de tampons récupérés pour cette séquence |
pg_stat_user_functions
#
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.
Tableau 27.34. Vue pg_stat_user_functions
Type Description |
---|
OID de cette fonction |
Nom du schéma dans lequel se trouve cette fonction |
Nom de cette fonction |
Nombre de fois que cette fonction a été appelée |
Temps total passé dans cette fonction ainsi que dans toutes les autres fonctions appelées par elle, en millisecondes |
Temps total passé dans cette fonction seule, sans inclure les autres fonctions appelées par elle, en millisecondes |
pg_stat_slru
#
PostgreSQL accède à certaines informations
stockées sur disque via des caches SLRU
(simple least-recently-used). La vue
pg_stat_slru
contiendra une ligne pour chaque
cache SLRU tracé, affichant des statistiques sur l'accès aux pages cachées.
Pour chaque cache SLRU
qui fait partie du cœur du serveur,
il existe un paramètre de configuration permettant de contrôler sa
taille, avec le suffixe _buffers
ajouté.
Tableau 27.35. Vue pg_stat_slru
Type Description |
---|
Nom du cache SLRU |
Nombre de blocs initialisés à zéro |
Nombre de fois que les blocs disques ont été trouvés dans le cache SLRU, et donc qu'une lecture disque n'était pas nécessaire (ceci inclut seulement les lectures dans le cache SLRU, pas les lectures dans le cache du système d'exploitation) |
Nombre de blocs disques lus à partir de ce cache SLRU |
Nombre de blocs disques écrit dans ce cache SLRU |
Nombre de blocs dont l'existence a été vérifiée dans ce cache SLRU |
Nombre de vidages de données modifiées pour ce cache SLRU |
Nombre de troncatures pour ce cache SLRU |
Horodatage de la dernière réinitialisation de ces 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 au système de statistiques cumulatives sont listées dans Tableau 27.36.
Tableau 27.36. Fonctions supplémentaires de 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 autre ensemble
de fonctions d'accès aux statistiques par processus serveur peut être
utilisé ; celle-ci sont montrées dans Tableau 27.37. Ces fonctions d'accès
utilisent un numéro d'identifiant du processus serveur de la session, qui
est un très petit entier positive (>= 0) distinct de l'identifiant du processus
backend de toute session concurrente, bien qu'un identifiant de session
peut être recyclé dès qu'il n'est plus utilisé. L'identifiant de processus
backend est utilisé, entre autres choses, pour identifier le schéma
temporaire de la session s'il en a un. La fonction
pg_stat_get_backend_idset
fournit une manière pratique
de lister tous les numéros d'identifiant des processus serveurs actifs 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(backendid) AS pid, pg_stat_get_backend_activity(backendid) AS query FROM pg_stat_get_backend_idset() AS backendid;
Tableau 27.37. Fonctions statistiques par processus serveur
Fonction Description |
---|
Texte de la requête la plus récente de ce processus serveur |
Heure à laquelle la requête la plus récente a été démarrée |
Adresse IP du client connecté à ce processus serveur |
Numéro de port TCP que le client utilise pour communiquer |
OID de la base de données auquel ce processus serveur est connecté |
Ensemble de numéros de processus serveur actuellement actifs |
Identifiant du processus serveur |
Heure à laquelle ce processus a été démarré |
Renvoie un enregistrement d'informations sur le backend ayant cet
identifiant. Les champs renvoyés sont
|
Renvoie l'OID de l'utilisateur connecté à ce processus serveur |
Renvoie le nom de l'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 27.4 pour les détails. |
Renvoie le nom du type d'événement d'attente si le processus est actuellement en attente, NULL sinon. Voir Tableau 27.4 pour les détails. |
Heure à laquelle la transaction courante a été démarrée |