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
.