26.1. Стандартные инструменты Unix#

26.1. Стандартные инструменты Unix

26.1. Стандартные инструменты Unix #

На большинстве Unix-платформ, Tantor BE изменяет свое название команды, как отображается в ps, чтобы можно было легко идентифицировать отдельные серверные процессы. Пример отображения:

$ 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

(Правильное вызов ps может отличаться в зависимости от платформы, а также детали отображаемой информации. Этот пример взят с недавней системы Linux). Первый процесс, перечисленный здесь, является основным серверным процессом. Аргументы команды, отображаемые для него, совпадают с теми, которые использовались при его запуске. Следующие четыре процесса - это фоновые рабочие процессы, автоматически запускаемые основным процессом. (Процесс модуля запуска автоочистки не будет активен, если вы отключили автоочистку). Каждый из оставшихся процессов - это серверный процесс, обрабатывающий одно клиентское подключение. Каждый такой процесс устанавливает отображение своей командной строки в форме

postgres: user database host activity

Пользователь, база данных и (клиентский) хост остаются неизменными на протяжении всей сессии клиента, но индикатор активности меняется. Активность может быть idle (т.е. ожидание команды клиента), idle in transaction (ожидание клиента внутри блока BEGIN), или имя типа команды, такое как SELECT. Кроме того, если серверный процесс в настоящее время ожидает блокировки, удерживаемой другой сессией, добавляется waiting. В приведенном выше примере можно предположить, что процесс 15606 ожидает завершения транзакции процессом 15610 и тем самым освобождает некоторую блокировку. (Процесс 15610 должен быть блокирующим, потому что нет другой активной сессии. В более сложных случаях было бы необходимо изучить представление системы pg_locks чтобы определить, кто блокирует кого).

Если cluster_name был настроен, имя кластера также будет отображаться в выводе ps:

$ 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
...

Если вы отключили update_process_title, то индикатор активности не обновляется; заголовок процесса устанавливается только один раз при запуске нового процесса. На некоторых платформах это позволяет сэкономить заметное количество издержек на каждую команду; на других это незначительно.

Подсказка

Solaris требует особой обработки. необходимо использовать /usr/ucb/ps, а не /bin/ps. Вы также должны использовать два флага w, а не только один. Кроме того, ваше исходное вызов postgres команды должен иметь более короткий ps статусный дисплей, чем предоставляемый каждым процессом сервера. Если вы не выполните все три действия, вывод ps для каждого процесса сервера будет содержать исходную командную строку postgres.