Функции для аналитики производительности Pangolin
Функции, представленные в данном разделе, реализованы в рамках функциональности аналитики производительности.
Описание и примеры разделов отчета представлены в отдельном в разделе документа «Справочная информация».
pg_stat_get_activity_history()
Функция возвращает набор записей с данными об активности сессий в определенный момент времени.
Синтаксис:
pg_stat_get_activity_history(pid integer, begin_time timestamp with time zone, end_time timestamp with time zone)
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
pid | integer | Идентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов |
begin_time | timestamptz | Начальная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то начало отрезка не ограничено |
end_time | timestamptz | Конечная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то конец отрезка не ограничен |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
sample_time | timestamptz | Время сохранения данных активности серверного процесса |
datid | oid | OID базы данных |
datname | name | Имя базы данных |
pid | integer | Идентификатор процесса |
leader_pid | integer | Идентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе |
usesysid | oid | OID пользователя |
usename | name | Имя пользователя |
application_name | text | Название приложения |
client_addr | text | IP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс |
client_hostname | text | Имя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname |
client_port | integer | Номер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс |
backend_start | timestamptz | Время запуска процесса |
xact_start | timestamptz | Время начала текущей транзакции или NULL при отсутствии активной транзакции |
query_start | timestamptz | Время начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса |
state_change | timestamptz | Время последнего изменения состояния (поле state) |
wait_event_type | text | Тип события, который ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL |
wait_event | text | Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL |
state | text | Общее текущее состояние этого серверного процесса |
backend_xid | xid | Идентификатор верхнего уровня транзакции этого серверного процесса или любого другого |
backend_xmin | xid | Текущая граница xmin для серверного процесса |
query_id | bigint | Идентификатор запроса |
query | text | Текст последнего запроса этого серверного процесса. Если поле state имеет значение active, то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос |
backend_type | text | Тип текущего серверного процесса |
Пример использования:
Пример запроса функции:
SELECT * FROM pg_stat_get_activity_history(NULL, NOW()-interval `5min`, NULL);
Пример запроса определенных данных:
SELECT datname, usename, client_addr, query, state FROM pg_stat_get_activity_history(NULL, NULL, NULL) ORDER BY query_start DESC LIMIT 5;
Пример вывода:
datname | usename | client_addr | query | state
--------+-----------+-------------+------------------------------------------------------+------------------
test_db | test_user | 0.0.0.0 | BEGIN; | idle in transaction
test_db | test_user | 0.0.0.0 | INSERT INTO test_schema.test_table VALUES(***, ***); | idle in transaction
test_db | test_user | 0.0.0.0 | INSERT INTO test_schema.test_table VALUES(***, ***); | idle in transaction
test_db | test_user | 0.0.0.0 | BEGIN; | idle in transaction
test_db | test_user | 0.0.0.0 | DELETE FROM test_schema.test_table WHERE id=***; | idle in transaction
(5 rows)
pg_stat_get_activity_and_lock_status_history()
Функция возвращает данные активности текущих сессий вместе с данными блокировок (если они имеются) и затраченными ресурсами (CPU, IO).
Синтаксис:
pg_stat_get_activity_and_lock_status_history(pid integer, begin_time timestamp with time zone, end_time timestamp with time zone)
Входные параметры:
| Название параметры | Тип значения | Описание |
|---|---|---|
pid | integer | Идентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов |
begin_time | timestamptz | Начальная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то начало отрезка не ограничено |
end_time | timestamptz | Конечная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то конец отрезка не ограничен |
Возвращаемые значения:
process activity:
| Название поля | Тип значения | Описание |
|---|---|---|
sample_time | timestamptz | Время сохранения данных активности серверного процесса |
datid | oid | OID базы данных |
datname | name | Имя базы данных |
pid | integer | Идентификатор процесса |
leader_pid | integer | Идентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе |
usesysid | oid | OID пользователя |
usename | name | Имя пользователя |
application_name | text | Название приложения |
client_addr | text | IP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс |
client_hostname | text | Имя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname |
client_port | integer | Номер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс |
backend_start | timestamptz | Время запуска процесса |
xact_start | timestamptz | Время начала текущей транзакции или NULL при отсутствии активной транзакции |
query_start | timestamptz | Время начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса |
state_change | timestamptz | Время последнего изменения состояния (поле state) |
wait_event_type | text | Тип события, которое ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL |
wait_event | text | Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL |
state | text | Общее текущее состояние этого серверного процесса |
backend_xid | xid | Идентификатор верхнего уровня транзакции этого серверного процесса или любой другой |
backend_xmin | xid | Текущая граница xmin для серверного процесса |
query_id | bigint | Идентификатор запроса |
query | text | Текст последнего запроса этого серверного процесса. Если поле state имеет значение active,то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос |
backend_type | text | Тип текущего серверного процесса |
resource usage:
| Название поля | Тип значения | Описание |
|---|---|---|
cpu_ms | bigint | Время потребления CPU в миллисекундах, на момент сбора данных |
mem_bytes | bigint | Объем используемой памяти (Resident Set Size) в байтах, на момент сбора данных |
read_bytes | bigint | Количество байтов, которое процесс прочитал с диска |
write_bytes | bigint | Количество байтов, которое процесс записал на диск |
process lock:
| Название поля | Тип значения | Описание |
|---|---|---|
locktype | text | Тип блокируемого объекта |
database | oid | OID базы данных, к которой относится цель блокировки, значение 0, если это разделяемый объект, либо NULL, если целью является идентификатор транзакции |
relation | oid | OID отношения, являющегося целью блокировки, либо NULL, если цель блокировки — не отношение или часть отношения |
page | integer | Номер страницы в отношении, являющейся целью блокировки либо NULL, если цель блокировки не страница или кортеж отношения |
tuple | smallint | Номер кортежа на странице, являющегося целью блокировки либо NULL, если цель блокировки не кортеж |
virtualxid | text | Виртуальный идентификатор транзакции, являющийся целью блокировки либо NULL, если цель блокировки — другой объект |
transactionid | xid | Идентификатор транзакции, являющейся целью блокировки либо NULL, если цель блокировки — другой объект |
classid | oid | OID системного каталога, содержащего цель блокировки либо NULL, если цель блокировки не основной объект базы данных |
objid | oid | OID цели блокировки в соответствующем системном каталоге либо NULL, если цель блокировки не основной объект базы данных |
objsubid | smallint | Номер столбца, являющегося целью блокировки (на саму таблицу указывают classid и objid), значение 0, если это некоторый другой основной объект базы данных, либо NULL, если цель не основной объект |
virtualtransaction | text | Виртуальный идентификатор транзакции, которая удерживает или ожидает блокировку |
mode | text | Название режима блокировки, которая удерживается или ожидается процессом |
granted | boolean | Если блокировка удерживается – значение true, если она ожидается – false |
fastpath | boolean | Если блокировка получена по короткому пути – значение true, если она получена через основную таблицу блокировок – false |
Пример использования:
Пример запроса функции:
SELECT * FROM pg_stat_get_activity_and_lock_status_history(NULL, NOW()-interval `5min`, NULL);
Пример запроса определенных данных:
SELECT datname, usename, client_addr, query, state, locktype FROM pg_stat_get_activity_and_lock_status_history(NULL, NULL, NULL) ORDER BY query_start DESC LIMIT 4;
Пример вывода:
datname | usename | client_addr | query | locktype | state
----------+-------------+-------------+------------------------------------------------------------------+---------------+---------------------
test_db | test_user | 0.0.0.0 | BEGIN; | virtualxid | idle in transaction
test_db | test_user | 0.0.0.0 | DELETE FROM test_schema.test_table WHERE id BETWEEN *** AND ***; | transactionid | idle in transaction
test_db | test_user | 0.0.0.0 | DELETE FROM test_schema.test_table WHERE id BETWEEN *** AND ***; | virtualxid | idle in transaction
test_db | test_user | 0.0.0.0 | DELETE FROM test_schema.test_table WHERE id BETWEEN *** AND ***; | virtualxid | idle in transaction
(4 rows)
pg_stat_get_activity_history_last()
Функция возвращает набор записей с данными об активности сессий в последний период обновления истории.
Синтаксис:
pg_stat_get_activity_history_last(pid integer)
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
pid | integer | Идентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
sample_time | timestamptz | Время сохранения данных активности серверного процесса |
datid | oid | OID базы данных |
datname | name | Имя базы данных |
pid | integer | Идентификатор процесса |
leader_pid | integer | Идентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе |
usesysid | oid | OID пользователя |
usename | name | Имя пользователя |
application_name | text | Название приложения |
client_addr | text | IP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс |
client_hostname | text | Имя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname |
client_port | integer | Номер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс |
backend_start | timestamptz | Время запуска процесса |
xact_start | timestamptz | Время начала текущей транзакции или NULL при отсутствии активной транзакции |
query_start | timestamptz | Время начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса |
state_change | timestamptz | Время последнего изменения состояния (поле state) |
wait_event_type | text | Тип события, который ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL |
wait_event | text | Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL |
state | text | Общее текущее состояние этого серверного процесса |
backend_xid | xid | Идентификатор верхнего уровня транзакции этого серверного процесса или любой другой |
backend_xmin | xid | Текущая граница xmin для серверного процесса |
query_id | bigint | Идентификатор запроса |
query | text | Текст последнего запроса этого серверного процесса. Если поле state имеет значение active,то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос |
backend_type | text | Тип текущего серверного процесса |
Пример использования:
SELECT * FROM pg_stat_get_activity_history_last(NULL);
Пример запроса определенных данных:
SELECT datname, usename, client_addr, query, state FROM pg_stat_get_activity_history_last(NULL);
Пример вывода:
datname | usename | client_addr | query | state
--------+-----------+-------------+--------------------------------------------------+--------------------
test_db | test_user | 0.0.0.0 | DELETE FROM test_schema.test_table WHERE id=***; | idle in transaction
(1 row)
pg_lock_status_history()
Функция возвращает набор записей с информацией о блокировках в определенный момент времени.
Синтаксис:
pg_lock_status_history(pid integer, begin_time timestamp with time zone, end_time timestamp with time zone)
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
pid | integer | Идентификатор процесса, для которого отображается история блокировок. Если NULL, то отображается история блокировок всех процессов |
begin_time | timestamptz | Начальная точка отрезка времени, для которого запрашивается история блокировок процессов. Если NULL, то начало отрезка не ограничено |
end_time | timestamptz | Конечная точка отрезка времени, для которого запрашивается история блокировок процессов. Если NULL, то конец отрезка не ограничен |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
sample_time | timestamptz | Время сохранения данных о блокировке, удерживаемой или ожидаемой серверным процессом |
locktype | text | Тип блокируемого объекта |
database | oid | OID базы данных, к которой относится цель блокировки, значение 0 если это разделяемый объект, либо NULL, если целью является идентификатор транзакции |
relation | oid | OID отношения, являющегося целью блокировки, либо NULL, если цель блокировки — не отношение или часть отношения |
page | integer | Номер страницы в отношении, являющейся целью блокировки либо NULL, если цель блокировки не страница или кортеж отношения |
tuple | smallint | Номер кортежа на странице, являющегося целью блокировки либо NULL, если цель блокировки не кортеж |
virtualxid | text | Виртуальный идентификатор транзакции, являющийся целью блокировки либо NULL, если цель блокировки — другой объект |
transactionid | xid | Идентификатор транзакции, являющейся целью блокировки либо NULL, если цель блокировки — другой объект |
classid | oid | OID системного каталога, содержащего цель блокировки либо NULL, если цель блокировки не основной объект базы данных |
objid | oid | OID цели блокировки в соответствующем системном каталоге либо NULL, если цель блокировки не основной объект базы данных |
objsubid | smallint | Номер столбца, являющегося целью блокировки (на саму таблицу указывают classid и objid), значение 0, если это некоторый другой основной объект базы данных, либо NULL, если цель не основной объект |
virtualtransaction | text | Виртуальный идентификатор транзакции, которая удерживает или ожидает блокировку |
pid | integer | Идентификатор серверного процесса, удерживающего или ожидающего эту блокировку, либо NULL, если блокировка удерживается подготовленной транзакцией |
mode | text | Название режима блокировки, которая удерживается или ожидается процессом |
granted | boolean | Если блокировка удерживается – значение true, если она ожидается – false |
fastpath | boolean | Если блокировка получена по короткому пути – значение true, если она получена через основную таблицу блокировок – false |
Пример использования:
SELECT * FROM pg_lock_status_history(NULL, NOW()-interval '5min', NULL);
pg_stat_activity_history_reset()
Функция для управления сохраненными данными, которая полностью очищает историю. Не имеет входных или выходных параметров.
Синтаксис:
pg_stat_activity_history_reset()
Входные параметры:
Отсутствуют.
Возвращаемые значения:
Отсутствуют. В случае успешного выполнения функции значение вернется пустым.
pg_stat_activity_and_lock_status_history_report()
Функция формирует отчет из собранных данных.
Синтаксис:
pg_stat_activity_and_lock_status_history_report(pid integer, begin_time timestamp with time zone, end_time timestamp with time zone, format text)
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
pid | integer | Идентификатор процесса, для которого формируется отчет. Если NULL, то отчет формируется для всех процессов |
begin_time | timestamptz | Начальная точка отрезка времени, для которого формируется отчет. Если NULL, то начало отрезка не ограничено |
end_time | timestamptz | Конечная точка отрезка времени, для которого формируется отчет. Если NULL, то конец отрезка не ограничен |
format | text | Формат, в котором формируется отчет. В текущей версии поддерживается только HTML. Если NULL, то будет использован формат HTML |
Возвращаемое значение:
Функция возвращает сформированный отчет. Описание разделов отчета представлено в отдельном разделе «Описание разделов отчета по аналитике производительности Pangolin» документа «Справочная информация».