Documentation PostgreSQL 14.22 » Administration du serveur » Superviser l'activité de la base de données » Outils Unix standard

Précédent | Niveau supérieur | Suivant
Chapitre 28. Superviser l'activité de la base de données | Sommaire | 28.2. Le récupérateur de statistiques

## 28.1. Outils Unix standard

Sur la plupart des plateformes Unix, PostgreSQL modifie son titre de commande reporté par `ps` de façon à ce que les processus serveur individuels puissent être rapidement identifiés. Voici un affichage d'exemple :

    $ ps auxww | grep ^postgres
    postgres  15551  0.0  0.1  57536  7132 pts/0    S    18:02   0:00 postgres -i
    postgres  15554  0.0  0.0  57536  1184 ?        Ss   18:02   0:00 postgres: background writer
    postgres  15555  0.0  0.0  57536   916 ?        Ss   18:02   0:00 postgres: checkpointer
    postgres  15556  0.0  0.0  57536   916 ?        Ss   18:02   0:00 postgres: walwriter
    postgres  15557  0.0  0.0  58504  2244 ?        Ss   18:02   0:00 postgres: autovacuum launcher
    postgres  15558  0.0  0.0  17512  1068 ?        Ss   18:02   0:00 postgres: stats collector
    postgres  15582  0.0  0.0  58772  3080 ?        Ss   18:04   0:00 postgres: joe runbug 127.0.0.1 idle
    postgres  15606  0.0  0.0  58772  3052 ?        Ss   18:07   0:00 postgres: tgl regression [local] SELECT waiting
    postgres  15610  0.0  0.0  58772  3056 ?        Ss   18:07   0:00 postgres: tgl regression [local] idle in transaction

(L'appel approprié de `ps` varie suivant les différentes plateformes, de même que les détails affichés. Cet exemple est tiré d'un système Linux récent.) Le premier processus affiché ici est le processus serveur primaire. Les arguments affichés pour cette commande sont les mêmes qu'à son lancement. Les cinq processus suivants sont des processus en tâche de fond lancés automatiquement par le processus primaire (le processus « stats collector » n'est pas présent si vous avez configuré le système pour qu'il ne lance pas le récupérateur de statistiques ; de même que le processus « autovacuum launcher » peut être désactivé). Chacun des autres processus est un processus serveur gérant une connexion cliente. Tous ces processus restants initialisent l'affichage de la ligne de commande sous la forme :

    postgres: utilisateur base_de_données hôte activité

L'utilisateur, la base de données et les éléments de l'hôte (client) restent identiques pendant toute la vie de connexion du client mais, l'indicateur d'activité change. L'activité pourrait être `idle` (c'est-à-dire en attente d'une commande du client), `idle in transaction` (en attente du client à l'intérieur d'un bloc de `BEGIN`/`COMMIT`) ou un nom de commande du type `SELECT`. De plus, `waiting` est ajouté si le processus serveur est en attente d'un verrou détenu par une autre session. Dans l'exemple ci-dessus, nous pouvons supposer que le processus 15606 attend que le processus 15610 finisse sa transaction, et par conséquent libère un verrou (le processus 15610 doit être celui qui bloque car il n'y a aucune autre session active. Dans des cas plus compliqués, il serait nécessaire de regarder dans la vue système `pg_locks` pour déterminer qui est en train de bloquer qui.)

Si cluster_name a été configuré, le nom de l'instance figurera également dans la sortie :

    $ psql -c 'SHOW cluster_name'
     cluster_name
    --------------
     server1
    (1 row)

    $ ps aux|grep server1
    postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: server1: background writer
    ...

Si vous avez désactivé update_process_title, alors l'indicateur d'activité n'est pas mis à jour ; le titre du processus est configuré une seule fois quand un nouveau processus est lancé. Sur certaines plateformes, ceci permet d'économiser du temps. Sur d'autres, cette économie est insignifiante.

### Astuce

Solaris requiert une gestion particulière. Vous devez utiliser `/usr/ucb/ps` plutôt que `/bin/ps`. Vous devez aussi utiliser deux options `w` et non pas seulement une. En plus, votre appel original de la commande `postgres` doit avoir un affichage de statut dans `ps` plus petit que celui fourni par les autres processus serveur. Vous devez donc faire ces trois opérations sinon l'affichage de `ps` pour chaque processus serveur sera la ligne de commande originale de `postgres`.