26.1. Стандартные инструменты Unix
В большинстве Unix-платформ Postgres Pro модифицирует заголовок команды, который выводится на экран при выполнении команды 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 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
(Формат вызова ps
, а также детали отображаемой информации зависят от платформы. Это пример для одной из последних Linux-систем.) Первым здесь отображается главный процесс сервера. Для этого процесса отображены аргументы команды, которые использовались при его запуске. Следующие пять процессов — это фоновые рабочие процессы, которые были автоматически запущены процессом сервера. (Процесса «stats collector» в этом списке не будет, если запуск сборщика статистики отключён в системе; аналогично может быть отключён и процесс «autovacuum launcher» — фоновый процесс автоочистки.) Во всех остальных строках перечислены серверные процессы, каждый из которых обслуживает одно клиентское подключение. Командная строка каждого такого процесса имеет следующий формат:
postgres:имя_сервера
база_данных
компьютер
активность
Пользователь, СУБД и компьютер (клиента) остаются неизменными на протяжении всего клиентского подключения, а индикатор деятельности меняется. Возможные виды деятельности: 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
, а не один. Кроме того, при выводе статусов команд с помощью ps
статус для исходной команды postgres
должен отображаться в сокращённом формате для каждого серверного процесса. Если вы не сделаете все три вещи, то вывод ps
для каждого серверного процесса будет исходной командной строкой postgres
.
19.9. Run-time Statistics
19.9.1. Query and Index Statistics Collector
These parameters control server-wide statistics collection features. When statistics collection is enabled, the data that is produced can be accessed via the pg_stat
and pg_statio
family of system views. Refer to Chapter 28 for more information.
track_activities
(boolean
)Enables the collection of information on the currently executing command of each session, along with the time when that command began execution. This parameter is on by default. Note that even when enabled, this information is not visible to all users, only to superusers, roles with privileges of the
pg_read_all_stats
role and the user owning the sessions being reported on (including sessions belonging to a role they have the privileges of), so it should not represent a security risk. Only superusers can change this setting.track_activity_query_size
(integer
)Specifies the number of bytes reserved to track the currently executing command for each active session, for the
pg_stat_activity
.query
field. The default value is 1024. This parameter can only be set at server start.track_counts
(boolean
)Enables collection of statistics on database activity. This parameter is on by default, because the autovacuum daemon needs the collected information. Only superusers can change this setting.
track_io_timing
(boolean
)Enables timing of database I/O calls. This parameter is off by default, because it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms. You can use the pg_test_timing tool to measure the overhead of timing on your system. I/O timing information is displayed in pg_stat_database, in the output of EXPLAIN when the
BUFFERS
option is used, and by pg_stat_statements. Only superusers can change this setting.track_functions
(enum
)Enables tracking of function call counts and time used. Specify
pl
to track only procedural-language functions,all
to also track SQL and C language functions. The default isnone
, which disables function statistics tracking. Only superusers can change this setting.Note
SQL-language functions that are simple enough to be “inlined” into the calling query will not be tracked, regardless of this setting.
stats_temp_directory
(string
)Sets the directory to store temporary statistics data in. This can be a path relative to the data directory or an absolute path. The default is
pg_stat_tmp
. Pointing this at a RAM-based file system will decrease physical I/O requirements and can lead to improved performance. This parameter can only be set in thepostgresql.conf
file or on the server command line.
19.9.2. Statistics Monitoring
log_statement_stats
(boolean
)log_parser_stats
(boolean
)log_planner_stats
(boolean
)log_executor_stats
(boolean
)For each query, output performance statistics of the respective module to the server log. This is a crude profiling instrument, similar to the Unix
getrusage()
operating system facility.log_statement_stats
reports total statement statistics, while the others report per-module statistics.log_statement_stats
cannot be enabled together with any of the per-module options. All of these options are disabled by default. Only superusers can change these settings.