SQL-запросы получения метрик для обзорной панели#
Kintsugi использует поды сервиса inform для выполнения SQL-запросов на получение метрик для обзорной панели. Для визуального представления метрик UI обращается к inform, указывая в запросе идентификатор объекта мониторинга.
Сервис inform предоставляет следующие метрики для обзорной панели объекта мониторинга.
Примечание
Подробное описание обзорной панели объекта мониторинга представлено в «Руководстве оператора», раздел «Сценарии, доступные на вкладке «Метрики»» пункт «Метрики».
Список поддерживаемых метрик#
№ виджета |
Имя виджета обзорной панели |
Запрос метрики для PostgreSQL 11, 12, 13, 15 |
Описание |
|---|---|---|---|
2 |
Статус репликации |
Для PostgreSQL 13: SQL query 4, SQL query 18 |
Содержит информацию о физической и/или логической репликации объекта мониторинга, являющегося частью кластера: какой объект подключен, активность и основные параметры |
3 |
Подключения |
Показывает общую статистику подключений, разделенных по типам |
|
4 |
Производительность СУБД |
Для PostgreSQL 13: SQL query 7; SQL query 8, SQL query 17. |
Среднее время – среднее время выполнения запроса. Вычисляется по формуле |
5 |
Статистика БД |
Процент попадания в кеш – оценка объема данных, берущихся из кеша shared buffers против объем прочитанного с диска. Вычисляется по формуле |
|
6 |
Длительные транзакции |
Транзакции со статусом «active» в наблюдаемой базе данных дольше 1 минуты |
|
7 |
Список баз данных |
Информация о базах данных в наблюдаемой СУБД |
|
8 |
Горизонт заморозки кластера |
Максимальное число незамороженных транзакций, вычисляемых по формуле |
|
9 |
Временные файлы |
Показывает последнее значение объема данных, временно записанных на диск для выполнения запросов |
|
10 |
Объем записи в WAL |
Для PostgreSQL ниже 14: SQL query 19 |
Скорость записи данных в журнал |
11 |
Последняя автоочистка таблиц |
Последний раз, когда очистка запускалась демоном автоочистки |
|
12 |
Очищено контрольными точками |
Отображает в процентах количество буферов, очищенных с помощью процесса контрольной точки. Вычисляется по формуле |
|
13 |
Версии СУБД и время работы |
Отображает версии СУБД (PostgreSQL и/или Platform V Pangolin DB (PSQ)) (SQL query 1) |
SQL query 1#
SELECT version() AS version, (SELECT 'Platform V Pangolin' AS edition WHERE EXISTS (SELECT * FROM pg_catalog.pg_proc WHERE proname='sber_version'));
Пример выходных данных для Platform V Pangolin DB (PSQ) 5.1.0 и выше:
| version | edition |
|---------------------------------------------------------------------------------------------------------+---------------------|
| PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit | Platform V Pangolin |
Пример выходных данных для PostgreSQL 11, 12, 13, 15:
| version | edition |
|-------------------------------------------------------------------------------------------------------------------------------+---------|
| PostgreSQL 11.22 (Debian 11.22-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit | |
SQL query 2#
SELECT now() - pg_postmaster_start_time() AS uptime,pg_postmaster_start_time() AS boot_time, now() - pg_conf_load_time() AS conf_reload_time, pg_is_in_recovery() AS is_in_recovery;
Пример выходных данных:
| uptime | boot_time | conf_reload_time | is_in_recovery |
|-------------------------+-------------------------------+-------------------------+----------------|
| 49 days 02:35:27.154125 | 2024-01-19 07:26:44.149556+00 | 49 days 02:35:27.25775 | f |
SQL query 3#
SELECT setting, name FROM pg_settings WHERE name IN ('wal_keep_segments', 'synchronous_commit', 'synchronous_standby_names');
Пример выходных данных:
| setting | name |
|----------------------+---------------------------|
| on | synchronous_commit |
| | synchronous_standby_names |
| 0 | wal_keep_segments |
SQL query 4#
SELECT client_addr, state, pg_size_pretty(pg_current_wal_lsn() - replay_lsn) AS total_lag_bytes, slot_type, active FROM pg_stat_replication stat LEFT JOIN pg_replication_slots slot ON stat.pid=slot.active_pid;
Пример выходных данных:
| client_addr | state | total_lag_bytes | slot_type | active |
|--------------+-----------+-----------------+------------+--------|
| 10.xx.xx.xx | streaming | 15 MB | physical | t |
Если сервер не является кластером, то выходные значения будут пустыми.
SQL query 5#
SELECT current_setting('max_connections') AS max_connections, (current_setting('max_connections')::integer - count(*)::integer) AS available_connections, (current_setting('max_connections')::integer) - (current_setting('max_connections')::integer - count(*)::integer) AS used_connections, current_setting('superuser_reserved_connections') AS superuser_reserved_connections FROM pg_stat_activity;
Пример выходных данных:
| max_connections | available_connections | used_connections | superuser_reserved_connections |
|-----------------+-----------------------+------------------+--------------------------------|
| 400 | 373 | 27 | 10 |
SQL query 6#
SELECT CASE WHEN (state IS NULL) THEN 'backend' ELSE state END, count(*) FROM pg_stat_activity GROUP BY state;
Пример выходных данных:
| state | count |
|----------------------+-------|
| backend | 5 |
| active | 1 |
SQL query 7#
WITH
a AS (SELECT sum(calls) s FROM pg_stat_statements),
b AS (SELECT sum(calls) s FROM pg_stat_statements , pg_sleep(1))
SELECT b.s-a.s AS QPS FROM a,b;
Пример выходных данных:
| qps |
|-----|
| 45 |
SQL query 8#
WITH
a AS (SELECT sum(xact_commit+xact_rollback) s FROM pg_stat_database),
b AS (SELECT sum(xact_commit+xact_rollback) s FROM pg_stat_database,
pg_stat_clear_snapshot(),
pg_sleep(1))
SELECT b.s-a.s AS TPS FROM a,b;
Пример выходных данных:
| tps |
|-----|
| 0 |
SQL query 9#
SELECT (sum(total_time) / sum(calls))::integer AS avg_time
FROM pg_stat_statements;
Пример выходных данных:
| avg_time |
|----------|
| 29 |
SQL query 10#
SELECT round(100.0*buffers_checkpoint/NULLIF((buffers_checkpoint + buffers_clean + buffers_backend),0),1) AS clean_by_chkp FROM pg_stat_bgwrite
Пример выходных данных:
| clean_by_chkp |
|----------------|
| 64.4 |
SQL query 11#
SELECT round((100*sum(blks_hit)/(sum(blks_hit) + sum(blks_read)))::numeric , 1) as cache_hit_ratio, round((100 * sum(xact_commit) /(sum(xact_commit) + sum(xact_rollback)))::numeric, 1) as commit_ratio FROM pg_stat_database;
Пример выходных данных:
| cache_hit_ratio | commit_ratio |
|-----------------|--------------|
| 99.9 | 99.9 |
SQL query 12#
SELECT max(age(datfrozenxid)) frozen_age
FROM pg_database;
Пример выходных данных:
| frozen_age |
|-------------|
| 0 |
SQL query 13#
SELECT pg_size_pretty(sum(temp_bytes)) AS temp_file_size FROM pg_stat_database;
Пример выходных данных:
| temp_file_size |
|----------------|
| 12 MB |
SQL query 14#
SELECT
EXTRACT(
epoch
FROM
(
CASE
WHEN STATE = 'active' THEN age(NOW(), query_start)
END
)
)::integer AS active,
datname,
usename,
client_addr,
application_name,
pid,
client_port,
query,
STATE
FROM
pg_stat_activity
WHERE
backend_type = 'client backend'
AND STATE = 'active'
AND (NOW() - xact_start) > TIME '00:01:00'
ORDER BY
active DESC
LIMIT
10;
Пример выходных данных:
| idle | datname | usename | client_addr | application_name | pid | client_port | query | state |
|----------------|----------|----------|-------------|------------------|-------|-------------|------------------------|--------|
| 78 | postgres | postgres | 10.xx.xx.xx | psql | 30603 | 55276 | SELECT PG_SLEEP(1000); | active |
SQL query 15#
SELECT
EXTRACT(
epoch
FROM
(
CASE
WHEN STATE = 'idle in transaction' THEN age(NOW(), query_start)
END
)
)::integer AS idle,
datname,
usename,
client_addr,
application_name,
pid,
client_port,
query,
STATE
FROM
pg_stat_activity
WHERE
backend_type = 'client backend'
AND STATE = 'idle in transaction'
AND (NOW() - xact_start) > TIME '00:00:01'
ORDER BY
idle DESC
LIMIT
10;
Пример выходных данных:
| idle | datname | usename | client_addr | application_name | pid | client_port | query | state |
|--------|----------|----------|-------------|------------------|-------|-------------|--------|---------------------|
| 22 | postgres | postgres | 10.xx.xx.xx | psql | 31990 | 55300 | BEGIN; | idle in transaction |
SQL query 16#
SELECT
datname,
pg_catalog.pg_get_userbyid (datdba) AS owner,
pg_catalog.pg_encoding_to_char (encoding) AS encoding,
datcollate,
datctype,
datallowconn,
datconnlimit,
pg_size_pretty(pg_catalog.pg_database_size (datname)) AS size,
t.spcname AS "Tablespace",
CASE WHEN pg_catalog.pg_tablespace_location (t.oid) = '' THEN 'default' ELSE pg_catalog.pg_tablespace_location (t.oid) END AS "location",
pg_catalog.shobj_description (d.oid, 'pg_database') AS "description"
FROM
pg_catalog.pg_database d
JOIN pg_catalog.pg_tablespace t ON d.dattablespace = t.oid
ORDER BY
1;
Пример выходных данных:
| datname | owner | encoding | datcollate | datctype | datallowconn | datconnlimit | size | Tablespace | Location | Description |
|----------|----------|-----------|-------------|-------------|---------------|---------------|----------|-------------|-------------------------------------|--------------------------------------------|
| First_db | db_admin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | t | -1 | 15 MB | Tbl_t | default | |
| postgres | postgres | UTF8 | en_US.utf-8 | en_US.utf-8 | t | -1 | 10049 kB | pg_default | /var/lib/postgresql/data/pg_default | default administrative connection database |
SQL query 17#
SELECT (sum(total_exec_time) / sum(calls))::integer AS avg_time
FROM pg_stat_statements;
Пример выходных данных:
| avg_time |
|----------|
| 29 |
SQL query 18#
SELECT setting, name FROM pg_settings WHERE name IN ('wal_keep_size', 'synchronous_commit', 'synchronous_standby_names');
Пример выходных данных:
| setting | name |
|----------------------+---------------------------|
| on | synchronous_commit |
| | synchronous_standby_names |
| 0 | wal_keep_size |
SQL Query 19#
Примечание
Необходимо взять дельту данного запроса с разницей в 1 секунду.
SELECT PG_CURRENT_WAL_LSN() - '0/0' AS wal_amount;
Пример выходных данных:
wal_amount |
|---|
1391096576968 |
SQL Query 20#
Примечание
Необходимо взять дельту данного запроса с разницей в 1 секунду.
SELECT wal_bytes FROM pg_stat_wal;
Пример выходных данных:
wal_bytes |
|---|
13117649 |
SQL Query 21#
SELECT MAX(last_autovacuum) last_autovacuum FROM pg_stat_all_tables;
Пример выходных данных:
last_autovacuum |
|---|
2024-06-05 12:24:06.813647+00:00 |