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 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 quatre processus suivants sont des processus
en tâche de fond lancés automatiquement par le processus primaire
(le processus « autovacuum launcher » ne sera pas présent si
vous avez configuré le système pour qu'il n'exécute pas l'autovacuum).
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.
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
.