Перейти к основному содержимому

Функции для аналитики производительности 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)

Входные параметры:

Название параметраТип значенияОписание
pidintegerИдентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов
begin_timetimestamptzНачальная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то начало отрезка не ограничено
end_timetimestamptzКонечная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то конец отрезка не ограничен

Возвращаемые значения:

Название поляТип значенияОписание
sample_timetimestamptzВремя сохранения данных активности серверного процесса
datidoidOID базы данных
datnamenameИмя базы данных
pidintegerИдентификатор процесса
leader_pidintegerИдентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе
usesysidoidOID пользователя
usenamenameИмя пользователя
application_nametextНазвание приложения
client_addrtextIP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс
client_hostnametextИмя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname
client_portintegerНомер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс
backend_starttimestamptzВремя запуска процесса
xact_starttimestamptzВремя начала текущей транзакции или NULL при отсутствии активной транзакции
query_starttimestamptzВремя начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса
state_changetimestamptzВремя последнего изменения состояния (поле state)
wait_event_typetextТип события, который ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL
wait_eventtextИмя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL
wait_event_starttimestamptzВремя начала события ожидания, зафиксированное в момент среза
statetextОбщее текущее состояние этого серверного процесса
backend_xidxidИдентификатор верхнего уровня транзакции этого серверного процесса или любого другого
backend_xminxidТекущая граница xmin для серверного процесса
query_idbigintИдентификатор запроса
querytextТекст последнего запроса этого серверного процесса. Если поле state имеет значение active, то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос
backend_typetextТип текущего серверного процесса

Пример использования:

Пример запроса функции:

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)

Входные параметры:

Название параметрыТип значенияОписание
pidintegerИдентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов
begin_timetimestamptzНачальная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то начало отрезка не ограничено
end_timetimestamptzКонечная точка отрезка времени, для которого запрашивается история активности процессов. Если NULL, то конец отрезка не ограничен

Возвращаемые значения:

process activity:

Название поляТип значенияОписание
sample_timetimestamptzВремя сохранения данных активности серверного процесса
datidoidOID базы данных
datnamenameИмя базы данных
pidintegerИдентификатор процесса
leader_pidintegerИдентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе
usesysidoidOID пользователя
usenamenameИмя пользователя
application_nametextНазвание приложения
client_addrtextIP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс
client_hostnametextИмя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname
client_portintegerНомер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс
backend_starttimestamptzВремя запуска процесса
xact_starttimestamptzВремя начала текущей транзакции или NULL при отсутствии активной транзакции
query_starttimestamptzВремя начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса
state_changetimestamptzВремя последнего изменения состояния (поле state)
wait_event_typetextТип события, которое ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL
wait_eventtextИмя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL
wait_event_starttimestamptzВремя начала события ожидания, зафиксированное в момент среза
statetextОбщее текущее состояние этого серверного процесса
backend_xidxidИдентификатор верхнего уровня транзакции этого серверного процесса или любой другой
backend_xminxidТекущая граница xmin для серверного процесса
query_idbigintИдентификатор запроса
querytextТекст последнего запроса этого серверного процесса. Если поле state имеет значение active,то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос
backend_typetextТип текущего серверного процесса

resource usage:

Название поляТип значенияОписание
cpu_msbigintВремя потребления CPU в миллисекундах, на момент сбора данных
mem_bytesbigintОбъем используемой памяти (Resident Set Size) в байтах, на момент сбора данных
read_bytesbigintКоличество байтов, которое процесс прочитал с диска
write_bytesbigintКоличество байтов, которое процесс записал на диск

process lock:

Название поляТип значенияОписание
locktypetextТип блокируемого объекта
databaseoidOID базы данных, к которой относится цель блокировки, значение 0, если это разделяемый объект, либо NULL, если целью является идентификатор транзакции
relationoidOID отношения, являющегося целью блокировки, либо NULL, если цель блокировки — не отношение или часть отношения
pageintegerНомер страницы в отношении, являющейся целью блокировки либо NULL, если цель блокировки не страница или кортеж отношения
tuplesmallintНомер кортежа на странице, являющегося целью блокировки либо NULL, если цель блокировки не кортеж
virtualxidtextВиртуальный идентификатор транзакции, являющийся целью блокировки либо NULL, если цель блокировки — другой объект
transactionidxidИдентификатор транзакции, являющейся целью блокировки либо NULL, если цель блокировки — другой объект
classidoidOID системного каталога, содержащего цель блокировки либо NULL, если цель блокировки не основной объект базы данных
objidoidOID цели блокировки в соответствующем системном каталоге либо NULL, если цель блокировки не основной объект базы данных
objsubidsmallintНомер столбца, являющегося целью блокировки (на саму таблицу указывают classid и objid), значение 0, если это некоторый другой основной объект базы данных, либо NULL, если цель не основной объект
virtualtransactiontextВиртуальный идентификатор транзакции, которая удерживает или ожидает блокировку
modetextНазвание режима блокировки, которая удерживается или ожидается процессом
grantedbooleanЕсли блокировка удерживается – значение true, если она ожидается – false
fastpathbooleanЕсли блокировка получена по короткому пути – значение 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)

Входные параметры:

Название параметраТип значенияОписание
pidintegerИдентификатор процесса, для которого отображается история активности. Если NULL, то отображается история активности всех процессов

Возвращаемые значения:

Название поляТип значенияОписание
sample_timetimestamptzВремя сохранения данных активности серверного процесса
datidoidOID базы данных
datnamenameИмя базы данных
pidintegerИдентификатор процесса
leader_pidintegerИдентификатор ведущего процесса группы, если текущий процесс является исполнителем параллельного запроса. Значение NULL, если процесс является ведущим или не задействован в параллельном запросе
usesysidoidOID пользователя
usenamenameИмя пользователя
application_nametextНазвание приложения
client_addrtextIP-адрес клиента. Значение NULL означает, что клиент подключен через сокет Unix на стороне сервера или что это внутренний процесс
client_hostnametextИмя компьютера, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от NULL только в случае соединений по IP и только при включенном режиме log_hostname
client_portintegerНомер TCP-порта, используемый клиентом, или -1, если используется сокет Unix. Значение NULL означает, что это внутренний серверный процесс
backend_starttimestamptzВремя запуска процесса
xact_starttimestamptzВремя начала текущей транзакции или NULL при отсутствии активной транзакции
query_starttimestamptzВремя начала выполнения запроса, активного в момент сохранения данных, или, если поле state не active, то время начала выполнения последнего запроса
state_changetimestamptzВремя последнего изменения состояния (поле state)
wait_event_typetextТип события, который ждет обслуживающий процесс, если это ожидание имеет место, в противном случае — NULL
wait_eventtextИмя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, в противном случае — NULL
wait_event_starttimestamptzВремя начала события ожидания, зафиксированное в момент среза
statetextОбщее текущее состояние этого серверного процесса
backend_xidxidИдентификатор верхнего уровня транзакции этого серверного процесса или любой другой
backend_xminxidТекущая граница xmin для серверного процесса
query_idbigintИдентификатор запроса
querytextТекст последнего запроса этого серверного процесса. Если поле state имеет значение active,то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос
backend_typetextТип текущего серверного процесса

Пример использования:

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)

Входные параметры:

Название параметраТип значенияОписание
pidintegerИдентификатор процесса, для которого отображается история блокировок. Если NULL, то отображается история блокировок всех процессов
begin_timetimestamptzНачальная точка отрезка времени, для которого запрашивается история блокировок процессов. Если NULL, то начало отрезка не ограничено
end_timetimestamptzКонечная точка отрезка времени, для которого запрашивается история блокировок процессов. Если NULL, то конец отрезка не ограничен

Возвращаемые значения:

Название поляТип значенияОписание
sample_timetimestamptzВремя сохранения данных о блокировке, удерживаемой или ожидаемой серверным процессом
locktypetextТип блокируемого объекта
databaseoidOID базы данных, к которой относится цель блокировки, значение 0 если это разделяемый объект, либо NULL, если целью является идентификатор транзакции
relationoidOID отношения, являющегося целью блокировки, либо NULL, если цель блокировки — не отношение или часть отношения
pageintegerНомер страницы в отношении, являющейся целью блокировки либо NULL, если цель блокировки не страница или кортеж отношения
tuplesmallintНомер кортежа на странице, являющегося целью блокировки либо NULL, если цель блокировки не кортеж
virtualxidtextВиртуальный идентификатор транзакции, являющийся целью блокировки либо NULL, если цель блокировки — другой объект
transactionidxidИдентификатор транзакции, являющейся целью блокировки либо NULL, если цель блокировки — другой объект
classidoidOID системного каталога, содержащего цель блокировки либо NULL, если цель блокировки не основной объект базы данных
objidoidOID цели блокировки в соответствующем системном каталоге либо NULL, если цель блокировки не основной объект базы данных
objsubidsmallintНомер столбца, являющегося целью блокировки (на саму таблицу указывают classid и objid), значение 0, если это некоторый другой основной объект базы данных, либо NULL, если цель не основной объект
virtualtransactiontextВиртуальный идентификатор транзакции, которая удерживает или ожидает блокировку
pidintegerИдентификатор серверного процесса, удерживающего или ожидающего эту блокировку, либо NULL, если блокировка удерживается подготовленной транзакцией
modetextНазвание режима блокировки, которая удерживается или ожидается процессом
grantedbooleanЕсли блокировка удерживается – значение true, если она ожидается – false
fastpathbooleanЕсли блокировка получена по короткому пути – значение 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)

Входные параметры:

Название параметраТип значенияОписание
pidintegerИдентификатор процесса, для которого формируется отчет. Если NULL, то отчет формируется для всех процессов
begin_timetimestamptzНачальная точка отрезка времени, для которого формируется отчет. Если NULL, то начало отрезка не ограничено
end_timetimestamptzКонечная точка отрезка времени, для которого формируется отчет. Если NULL, то конец отрезка не ограничен
formattextФормат, в котором формируется отчет. В текущей версии поддерживается только HTML. Если NULL, то будет использован формат HTML

Возвращаемое значение:

Функция возвращает сформированный отчет. Описание разделов отчета представлено в отдельном разделе «Описание разделов отчета по аналитике производительности Pangolin» документа «Справочная информация».