Le récupérateur de statistiques de PostgreSQL™ est un sous-système qui supporte la récupération et les rapports d'informations sur l'activité du serveur. Actuellement, le récupérateur peut compter les accès aux tables et index à la fois en terme de blocs disque et de lignes individuelles. Il conserve aussi la trace du nombre total de lignes dans chaque table ainsi que des informations sur les VACUUM et les ANALYZE pour chaque table. Il peut aussi compter le nombre d'appels aux fonctions définies par l'utilisateur ainsi que le temps total dépensé par chacune.
PostgreSQL™ supporte aussi la détermination de la commande exacte en cours d'exécution par les autres processus serveur. Cette fonctionnalité indépendante ne dépend pas du récupérateur de statistiques.
Comme la récupération de statistiques ajoute un temps supplémentaire à l'exécution de la requête, le système peut être configuré pour récupérer ou non des informations. Ceci est contrôlé par les paramètres de configuration qui sont normalement initialisés dans postgresql.conf (voir Chapitre 18, Configuration du serveur pour plus de détails sur leur initialisation).
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_activities active la surveillance de la commande en cours d'exécution par un processus serveur.
Normalement, ces paramètres sont configurés dans postgresql.conf de façon à ce qu'ils s'appliquent à tous les processus serveur mais il est possible de les activer/désactiver sur des sessions individuelles en utilisant la commande SET(7) (pour empêcher les utilisateurs ordinaires de cacher leur activité à l'administrateur, seuls les superutilisateurs sont autorisés à modifier ces paramètres avec SET).
Le collecteur de statistiques transmet les informations récupérées aux processus du moteur (y compris l'autovacuum) via des fichiers temporaires. Ces fichiers sont stockées dans le sous-répertoire pg_stat_tmp. Quand le processus père est arrêté, une copie permanente des données statistiques est stockée dans le sous-répertoire global. Pour des performances accrues, le paramètre stats_temp_directory peut être pointé vers un système de fichiers en RAM, diminuant fortement les besoins en entrées/sorties.
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, ou via les fonctions appelées par ces vues. Ces informations se mettent à jour en continue pendant l'exécution de la transaction.
Plusieurs vues prédéfinies, listées dans le Tableau 27.1, « Vues statistiques standards », sont disponibles pour afficher les résultats de la récupération de statistiques. Autrement, vous pouvez construire des vues personnalisées en utilisant les fonctions statistiques existantes.
En utilisant les statistiques pour surveiller l'activité en cours, il est important de réaliser que l'information n'est pas mise à jour instantanément. Chaque processus serveur individuel transmet les nouvelles statistiques au récupérateur juste avant l'attente d'une nouvelle commande du client ; donc une requête toujours en cours n'affecte pas les totaux affichés. De plus, le récupérateur lui-même émet un nouveau rapport une fois par PGSTAT_STAT_INTERVAL millisecondes (500, sauf si cette valeur a été modifiée lors de la construction du serveur). Donc, les totaux affichés sont bien derrière l'activité réelle. Néanmoins, l'information sur la requête en cours récupérée par track_activities est toujours à jour.
Un autre point important est que, lorsqu'un processus serveur se voit demander d'afficher une des statistiques, il récupère tout d'abord le rapport le plus récent émis par le processus de récupération, puis continue d'utiliser cette image de toutes les vues et fonctions statistiques jusqu'à la fin de sa transaction en cours. De façon similaire, les informations sur les requêtes en cours, quelque soit le processus, sont récupérées quand une telle information est demandée dans une transaction, et cette même information sera affichée lors de la transaction. Donc, les statistiques afficheront des informations statiques tant que vous restez dans la même transaction. Ceci est une fonctionnalité, et non pas un bogue, car il vous permet de traiter plusieurs requêtes sur les statistiques et de corréler les résultats sans vous inquiéter que les nombres aient pu changer. Mais si vous voulez voir les nouveaux résultats pour chaque requête, assurez-vous de lancer les requêtes en dehors de tout bloc de transaction. Autrement, vous pouvez appeler pg_stat_clear_snapshot(), qui annulera l'image statistique de la transaction en cours. L'utilisation suivante des informations statistiques causera la récupération d'une nouvelle image.
Tableau 27.1. Vues statistiques standards
Nom de la vue | Description |
---|---|
pg_stat_activity | Une ligne par processus serveur, affichant l'OID de la base de données, le nom de la base, l'ID du processus, l'OID de l'utilisateur, son nom, le nom de l'application, l'adresse, le nom de l'hôte (si disponible) et le port du client, la date et l'heure à laquelle le client s'est connecté, de début de la transaction, et de début de la requête, le statut d'attente de verrou du processus et le texte de la requête en cours d'exécution. Les colonnes renvoyant des données sur la requête en cours sont disponibles sauf si le paramètre track_activities a été désactivé. De plus, ces colonnes sont seulement visibles si l'utilisateur examinant cette vue est un superutilisateur ou est le propriétaire du processus en cours de rapport. Le nom de l'hôte du client sera disponible seulement si log_hostname est activé ou s'il a été nécessaire de le rechercher pendant la phase d'authentification (pg_hba.conf). |
pg_stat_bgwriter | Une seule ligne indiquant des statistiques du cluster complet provenant du processus d'écriture en tâche de fond : nombre de points de vérification planifiés, points de vérification demandés, tampons écrits par les points de vérification et parcours de nettoyage, et le nombre de fois où le processus d'écriture en tâche de fond a stoppé un parcours de nettoyage parce qu'il a écrit trop de tampons. Cela inclut aussi des statistiques sur les tampons partagés dont le nombre de tampons écrit par les processus serveur (c'est-à-dire par autre chose que le processus d'écriture en tâche de fond), sur le nombre de fois que les processus serveurs ont exécuté eux-mêmes des appels à fsync (normalement, le processus d'écriture en tâche de fond s'en occupe même si le processus serveur a fait les écritures), le nombre de tampons alloués et l'horodatage de la dernière réinitialisation des statistiques. |
pg_stat_database | Une ligne par base de données, affichant l'OID de la base de données, son nom, le nombre de processus serveur actifs connectés à cette base, le nombre total de transactions validées et le nombre de celles qui ont été annulées, le nombre total de blocs disque lus, le nombre total de succès du tampon (c'est-à-dire le nombre de lectures de blocs évitées en trouvant déjà le bloc dans le cache du tampon), le nombre de lignes renvoyées, récupérées, insérées, mises à jour et supprimées, le nombre total de requêtes annulées à cause d'un conflit avec la restauration (sur les serveurs en standby) et l'horodatage de la dernière réinitialisation des statistiques. |
pg_stat_database_conflicts | Une ligne par base de données, affichant l'OID de la base, son nom et le nombre de requêtes qui ont été annulées dans cette base à cause de tablespaces supprimées, de délais dépassés pour les verrous, d'images de base trop anciennes, de tampons verrouillés et de verrous mortels. Ne contiendra que des informations sur les serveurs en standby car les conflits ne surviennent pas sur les serveurs maîtres. |
pg_stat_replication | Une ligne par processus walsender, affichant l'identifiant du processus, l'OID de l'utilisateur, le nom de l'utilisateur, le nom de l'application, l'adresse du client, le nom d'hôte (si disponible) et le numéro de port, la date et l'heure à laquelle le processus serveur a commencé son exécution, l'état du processus et la position dans les journaux de transactions. De plus, le serveur en standby rapporte la dernière position reçue et écrite dans les journaux de transactions, la dernière position qu'il a écrite sur disque, et la dernière position qu'il a rejouée. Cette information est aussi affichée ici. Si les noms d'applications du serveur en standby correspondent à un de noms configurés dans synchronous_standby_names, alors la priorité de synchronisation est aussi affichée ici (cela correspond à l'ordre dans lequel les serveurs en standby deviennent le serveur synchrone). Les colonnes détaillant le travail de la connexion sont seulement visibles si l'utilisateur qui examine la vue est un superutilisateur. Le nom de l'hôte du client sera disponible seulement si log_hostname est activé ou s'il a été nécessaire de rechercher le nom d'hôte de l'utilisateur pendant la phase d'authentification (pg_hba.conf). |
pg_stat_all_tables | Pour chaque table dans la base de données en cours (ceci incluant les tables TOAST), l'OID de la table, le nom du schéma et de la table, le nombre de parcours séquentiels réalisés, le nombre de lignes vivantes récupérées par des parcours séquentiels, le nombre de lignes vivantes récupérées par des parcours séquentiels, le nombre de parcours d'index réalisés (pour tous les index appartenant à cette table), le nombre de lignes vivantes récupérées par les parcours d'index, le nombre d'insertions, de modifications et de suppressions de ligne, le nombre de mises à jour de ligne via HOT (donc sans mise à jour séparée des index), le nombre de lignes vivantes et mortes, la dernière fois que la table a été la cible d'un VACUUM manuel (sans l'option FULL), la dernière fois qu'elle a été la cible d'un VACUUM exécuté par le démon autovacuum, la dernière fois que la table a été la cible d'un ANALYZE manuel, la dernière fois qu'elle a été la cible d'un ANALYZE exécuté par le démon autovacuum, le nombre de fois que la table a été la cible d'un VACUUM manuel (sans l'option FULL), le nombre de fois qu'elle a été la cible d'un VACUUM exécuté par le démon autovacuum, le nombre de fois que la table a été la cible d'un ANALYZE manuel, le nombre de fois qu'elle a été la cible d'un ANALYZE exécuté par le démon autovacuum. |
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 | Pour chaque index de la base de données en cours, l'OID de la table et de l'index, le nom du schéma, de la table et de l'index, le nombre de parcours d'index initiés sur cet index, le nombre d'entrées de l'index renvoyées par les parcours d'index, et le nombre de lignes actives de table récupérées par de simples parcours d'index utilisant cet index. |
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 | Pour chaque table de la base de données en cours (ceci incluant les tables TOAST), l'OID de la table, le nom du schéma et de la table, le nombre de blocs disque lus à partir de cette table, le nombre de lectures tampon réussies dans tous les index de cette table, le nombre de blocs disque lus et de lectures tampon réussies à partir de la table TOAST (si elle existe), et, enfin, le nombre de blocs disque lus et le nombre de lectures tampon réussies à partir de l'index de la table TOAST. |
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 | Pour chaque index de la base de données en cours, l'OID de la table et de l'index, le nom du schéma, de la table et de l'index, le nombre de blocs disque lus et le nombre de lectures tampon réussies pour cet index. |
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 | Pour chaque séquence de la base de données en cours, l'OID de la séquence, le nom du schéma et de la séquence, le nombre de blocs disque lus et le nombre de lectures réussies du tampon pour cette séquence. |
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 | Pour les fonctions tracées, OID de la fonction, schéma, nom, nombre d'appels, temps total et temps de la fonction. Ce dernier est le temps passé uniquement dans la fonction. Le temps total inclus le temps passé dans les fonctions appelées. Les valeurs sont en millisecondes. |
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 index peuvent être utilisés soit directement soit via des « parcours de bitmap ». Dans un parcours de bitmap, les résultats de plusieurs index peuvent être combinés via des règles AND ou OR ; donc il est difficile d'associer des récupérations de lignes d'en-têtes individuelles avec des index spécifiques quand un parcours de bitmap est utilisé. Du coup, un parcours de bitmap incrémente le nombre dans pg_stat_all_indexes.idx_tup_read pour les index qu'il utilise et il incrémente le nombre pg_stat_all_tables.idx_tup_fetch pour la table, mais il n'affecte pas pg_stat_all_indexes.idx_tup_fetch.
Avant PostgreSQL™ 8.1, les totaux idx_tup_read et idx_tup_fetch étaient pratiquement toujours égaux. Maintenant, ils peuvent être différents même sans considérer les parcours de bitmap parce que idx_tup_read compte les entrées d'index récupérées à partir de l'index alors que idx_tup_fetch compte les lignes actives récupérées à partir de la table ; ce dernier sera moindre si des lignes mortes ou pas-encore-validées sont récupérées en utilisant l'index.
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.
Il existe d'autres façons de regarder les statistiques. Cela se fait en écrivant des requêtes qui utilisent les mêmes fonctions d'accès aux statistiques que les vues standards. Ces fonctions sont listées dans le Tableau 27.2, « Fonctions d'accès aux statistiques ». Les fonctions d'accès par base de données prennent un OID de la base de données comme argument pour identifier la base de données du rapport. Les fonctions par table et par index prennent l'OID de la table ou de l'index. Les fonctions des statistiques pour les appels de fonctions prennent un OID. (notez que seuls les tables et les index de la base de données en cours peuvent être vus par ces fonctions). Les fonctions d'accès au processus prennent le numéro d'identifiant du processus.
Tableau 27.2. Fonctions d'accès aux statistiques
Fonction | Code de retour | Description |
---|---|---|
pg_stat_get_db_numbackends(oid) | integer | Nombre de processus actifs pour la base de données |
pg_stat_get_db_xact_commit(oid) | bigint | Nombre de transactions validées dans la base de données |
pg_stat_get_db_xact_rollback(oid) | bigint | Nombre de transactions annulées dans la base de données |
pg_stat_get_db_blocks_fetched(oid) | bigint | Nombre de demandes de récupérations de blocs disque pour la base de données |
pg_stat_get_db_blocks_hit(oid) | bigint | Nombre de demandes de récupérations de blocs disque trouvés dans le tampon pour la base de données |
pg_stat_get_db_tuples_returned(oid) | bigint | Nombre de lignes renvoyées pour la base |
pg_stat_get_db_tuples_fetched(oid) | bigint | Nombre de lignes récupérées pour la base |
pg_stat_get_db_tuples_inserted(oid) | bigint | Nombre de lignes insérées dans la base |
pg_stat_get_db_tuples_updated(oid) | bigint | Nombre de lignes mises à jour dans la base |
pg_stat_get_db_tuples_deleted(oid) | bigint | Nombre de lignes supprimées dans la base |
pg_stat_get_db_conflict_tablespace(oid) | bigint | Nombre de requêtes annulées à cause d'un conflit dans la restauration avec des tablespaces supprimées |
pg_stat_get_db_conflict_lock(oid) | bigint | Nombre de requêtes annulées à cause d'un conflit dans la restauration avec des verrous |
pg_stat_get_db_conflict_snapshot(oid) | bigint | Nombre de requêtes annulées à cause d'un conflit dans la restauration avec d'anciennes images de base |
pg_stat_get_db_conflict_bufferpin(oid) | bigint | Nombre de requêtes annulées à cause d'un conflit dans la restauration avec des tampons verrouillés |
pg_stat_get_db_conflict_startup_deadlock(oid) | bigint | Nombre de requêtes annulées à cause d'un conflit dans la restauration avec des verrous mortels |
pg_stat_get_db_stat_reset_time(oid) | timestamptz | Horodatage de la dernière réinitialisation des statistiques pour la base de données. Initialisé à l'heure système lors de la première connexion à chaque base de données. L'heure de réinitialisation est mise à jour quand vous appelez pg_stat_reset sur la base de données, ainsi qu'après exécution de pg_stat_reset_single_table_counters sur une table ou un index. |
pg_stat_get_numscans(oid) | bigint | Nombre de parcours séquentiels réalisés lorsque l'argument est une table, ou nombre de parcours d'index lorsque l'argument est un index |
pg_stat_get_tuples_returned(oid) | bigint | Nombre de lignes lues par les parcours séquentiels lorsque l'argument est une table, ou nombre de lignes d'index lues lorsque l'argument est un index |
pg_stat_get_tuples_fetched(oid) | bigint | Le nombre de lignes de table récupérées par des parcours de bitmap quand l'argument est une table, ou les lignes de table récupérées par de simples parcours d'index en utilisant cet index quand l'argument est un index. |
pg_stat_get_tuples_inserted(oid) | bigint | Nombre de lignes insérées dans la table |
pg_stat_get_tuples_updated(oid) | bigint | Nombre de lignes mises à jour dans la table (incluant les mises à jour via HOT) |
pg_stat_get_tuples_deleted(oid) | bigint | Nombre de lignes supprimées dans la table |
pg_stat_get_tuples_hot_updated(oid) | bigint | Nombre de lignes mises à jour via HOT dans la table |
pg_stat_get_live_tuples(oid) | bigint | Nombre de lignes vivantes dans la table |
pg_stat_get_dead_tuples(oid) | bigint | Nombre de lignes mortes dans la table |
pg_stat_get_blocks_fetched(oid) | bigint | Nombre de demandes de récupération de blocs disques pour la table ou l'index |
pg_stat_get_blocks_hit(oid) | bigint | Nombre de demandes de blocs disque récupérés dans le tampon pour la table ou l'index |
pg_stat_get_tuples_deleted(oid) | bigint | Nombre de lignes supprimées dans la table |
pg_stat_get_blocks_fetched(oid) | bigint | Nombre de requêtes de récupération de blocs disque pour les tables ou index |
pg_stat_get_blocks_hit(oid) | bigint | Nombre de requêtes de blocs disque trouvés en cache pour les tables ou index |
pg_stat_get_last_vacuum_time(oid) | timestamptz | Date/heure du dernier VACUUM (sans l'option FULL) survenu sur cette table à la demande de l'utilisateur |
pg_stat_get_last_autovacuum_time(oid) | timestamptz | Date/heure du dernier ANALYZE lancé par le démon autovacuum survenu sur cette table. |
pg_stat_get_last_analyze_time(oid) | timestamptz | Date/heure du dernier VACUUM survenu sur cette table à la demande de l'utilisateur |
pg_stat_get_last_autoanalyze_time(oid) | timestamptz | Date/heure du dernier ANALYZE lancé par le démon autovacuum survenu sur cette table. |
pg_stat_get_vacuum_count(oid) | bigint | Nombre de fois qu'un VACUUM non FULL a été exécuté manuellement sur cette table |
pg_stat_get_autovacuum_count(oid) | bigint | Nombre de fois qu'un VACUUM a été exécuté automatiquement sur cette table par le démon autovacuum |
pg_stat_get_analyze_count(oid) | bigint | Nombre de fois qu'un ANALYZE a été exécuté manuellement sur cette table |
pg_stat_get_autoanalyze_count(oid) | bigint | Nombre de fois qu'un ANALYZE a été exécuté automatiquement sur cette table par le démon autovacuum |
pg_stat_get_xact_numscans(oid) | bigint | Nombre de parcours séquentiels réalisés quand l'argument est une table, ou nombre de parcours d'index réalisés quand l'argument est un index, pour la transaction courante |
pg_stat_get_xact_tuples_returned(oid) | bigint | Nombre de lignes lues par des parcours séquentiels quand l'argument est une table, ou nombre d'entrées d'index renvoyées quand l'argument est un index, pour la transaction en cours |
pg_stat_get_xact_tuples_fetched(oid) | bigint | Nombre de lignes de table récupérées par des parcours de bitmap quand l'argument est une table, ou nombre de lignes de table récupérées par des parcours simples d'index quand l'argument est un index, pour la transaction en cours |
pg_stat_get_xact_tuples_inserted(oid) | bigint | Nombre de lignes insérées dans la table, pour la transaction en cours |
pg_stat_get_xact_tuples_updated(oid) | bigint | Nombre de lignes mises à jour (incluant les mises à jour HOT) dans la table, pour la transaction en cours |
pg_stat_get_xact_tuples_deleted(oid) | bigint | Nombre de lignes supprimées dans la table, pour la transaction en cours |
pg_stat_get_xact_tuples_hot_updated(oid) | bigint | Nombre de lignes mises à jour via HOT dans la table, pour la transaction en cours |
pg_stat_get_xact_blocks_fetched(oid) | bigint | Nombre de demandes de lectures de blocs disques pour la table ou l'index, pour la transaction en cours |
pg_stat_get_xact_blocks_hit(oid) | bigint | Nombre de demandes de lectures de blocs disques pour la table ou l'index trouvés dans le cache, pour la transaction en cours |
pg_backend_pid() | integer | ID du processus pour le processus serveur attaché à la session en cours |
pg_stat_get_activity(integer) | setof record | Renvoie un ensemble d'informations sur le processus serveur correspondant au PID indiqué, ou un enregistrement pour chaque processus serveur actif sur le système si le PID vaut NULL. Les champs renvoyés sont un sous-ensemble de ceux proposés par la vue pg_stat_activity |
pg_stat_get_function_calls(oid) | bigint | Nombre d'appels de la fonction. |
pg_stat_get_function_time(oid) | bigint | Temps passé dans la fonction, en microsecondes. Inclut le temps passé dans les fonctions appelées par cette fonction. |
pg_stat_get_function_self_time(oid) | bigint | Temps passé uniquement dans cette fonction. Le temps passé dans les fonctions appelées est exclu. |
pg_stat_get_xact_function_calls(oid) | bigint | Nombre de fois où la fonction a été appelée, dans la transaction en cours |
pg_stat_get_xact_function_time(oid) | bigint | Temps passé dans la fonction, en microsecondes, pour la transaction en cours. Inclut le temps passé dans les fonctions appelées par cette fonction. |
pg_stat_get_xact_function_self_time(oid) | bigint | Temps passé uniquement dans cette fonction pour la transaction en cours. Le temps passé dans les fonctions appelées est exclu. |
pg_stat_get_backend_idset() | setof integer | PID des processus serveurs actifs à ce moment (de 1 au nombre de processus serveurs actifs). Voir un exemple d'utilisation dans le texte. |
pg_stat_get_backend_pid(integer) | integer | ID du processus pour le processus serveur donné |
pg_stat_get_backend_dbid(integer) | oid | ID de la base de données pour le processus serveur en cours |
pg_stat_get_backend_userid(integer) | oid | ID de l'utilisateur pour le processus serveur en cours |
pg_stat_get_backend_activity(integer) | text | Commande active du processus serveur indiqué mais seulement si l'utilisateur courant est un superutilisateur ou le même utilisateur dont vient la commande (et que track_activities est activé) |
pg_stat_get_backend_waiting(integer) | boolean | True si le processus serveur indiqué attend un verrou mais seulement si l'utilisateur courant est un superutilisateur ou le même utilisateur dont vient la commande (et que track_activities est activé) |
pg_stat_get_backend_activity_start(integer) | timestamp with time zone | Date/heure du lancement de la requête en cours d'exécution sur le processus serveur indiqué, mais seulement si l'utilisateur courant est un superutilisateur ou le même utilisateur dont vient la commande (et que track_activities est activé) |
pg_stat_get_backend_xact_start(integer) | timestamp with time zone | Le moment auquel le processus serveur indiqué a été exécuté. Seulement si l'utilisateur est un superutilisateur ou le même utilisateur que celui qui a lancé la session (et que track_activities est activé) |
pg_stat_get_backend_start(integer) | timestamp with time zone | L'heure à laquelle le processus serveur donné a été lancé ou NULL si l'utilisateur en cours n'est ni un superutilisateur ni l'utilisateur de la session requêtée |
pg_stat_get_backend_client_addr(integer) | inet | L'adresse IP du client connecté au processus serveur donné. NULL si la connexion est établie sur un socket de domaine Unix. Aussi NULL si l'utilisateur en cours n'est ni un superutilisateur ni l'utilisateur de la session requêtée |
pg_stat_get_backend_client_port(integer) | integer | Le numéro de port TCP du client connecté au processus serveur donné. -1 si la connexion est établie sur un socket de domaine Unix. NULL si l'utilisateur en cours n'est ni un superutilisateur ni l'utilisateur de la session requêtée |
pg_stat_get_bgwriter_timed_checkpoints() | bigint | Le nombre de fois où le processus d'écriture en tâche de fond a lancé des points de vérification planifiés (donc parce que checkpoint_timeout est arrivé à expiration) |
pg_stat_get_bgwriter_requested_checkpoints() | bigint | Nombre de fois où le processus d'écriture en tâche de fond a lancé des points de vérification en se basant sur les demandes des processus serveur parce que checkpoint_segments a été dépassé ou parce que la commande CHECKPOINT a été lancée |
pg_stat_get_bgwriter_buf_written_checkpoints() | bigint | Nombre de tampons écrits par le processus d'écriture en tâche de fond lors de points de vérification |
pg_stat_get_bgwriter_buf_written_clean() | bigint | Nombre de tampons écrits par le processus d'écriture en tâche de fond pour le nettoyage de routine des pages sales |
pg_stat_get_bgwriter_maxwritten_clean() | bigint | Nombre de fois où le processus d'écriture en tâche de fond est arrêté son parcours de nettoyage parce qu'il a écrit plus de tampons que ce qui est spécifié par le paramètre bgwriter_lru_maxpages |
pg_stat_get_bgwriter_stat_reset_time() | timestamptz | Horodatage de la dernière réinitialisation des statistiques pour le processus d'écriture en tâche de fond, mis à jour lors de l'exécution de pg_stat_reset_shared('bgwriter') sur l'instance. |
pg_stat_get_buf_written_backend() | bigint | Nombre de tampons écrits par les processus serveur parce qu'ils ont besoin d'allouer un nouveau tampon |
pg_stat_get_buf_alloc() | bigint | Le nombre total d'allocations de tampons |
pg_stat_get_wal_senders() | setof record | Un enregistrement pour chaque processus walsender actif. Les champs renvoyés sont un sous-ensemble de ceux disponibles dans la vue pg_stat_replication. |
pg_stat_clear_snapshot() | void | Annule l'image statistique actuelle |
pg_stat_reset() | void | Réinitialise à zéro tous les compteurs statistiques pour la base de données actuelle (nécessite les droits superutilisateur) |
pg_stat_reset_shared(text) | void | Réinitialise des compteurs de statistiques partagés pour le cluster de base de données à zéro (nécessite les droits du superutilisateur). Appeler pg_stat_reset_shared('bgwriter') mettra à zéro toutes les valeurs affichées par pg_stat_bgwriter. |
pg_stat_reset_single_table_counters(oid) | void | Réinitialise les statistiques pour une table ou un index particulier dans la base de données en cours (nécessite les droits du superutilisateur). |
pg_stat_reset_single_function_counters(oid) | void | Réinitialise les statistiques pour une fonction particulière dans la base de données en cours (nécessite les droits du superutilisateur). |
pg_stat_get_blocks_fetched moins pg_stat_get_blocks_hit donne le nombre d'appels lancés pour la table, l'index ou la base de données ; mais le nombre de lectures physiques réelles est habituellement moindre à cause des tampons du noyau. Les colonnes statistiques *_blks_read utilisent cette soustraction, c'est-à-dire lus en cache soustrait aux lus sur disque.
Toutes les fonctions accédant aux informations sur les processus sont indexées par numéro d'identifiant, sauf que pg_stat_get_activity est indexé par PID. La fonction pg_stat_get_backend_idset fournit un moyen agréable de générer une ligne pour chaque processus serveur actif. Par exemple, pour afficher les PID et les requêtes en cours pour tous les processus serveur :
SELECT pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_activity(s.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;