Расширение PostgreSQL
Обзор
Решение для мониторинга PostgresSQL основано на подходе удалённого мониторинга, реализованном в виде расширения Ключ-АСТРОМ АктивногоШлюза. Расширение запрашивает ключевые показатели производительности и работоспособности баз данных Postgres. Затем искусственный интеллект от Ключ-АСТРоМ анализирует эти показатели для выявления отклонений и проблем.
Варианты использования
- Контролируйте состояние работоспособности и производительность своей настройки PostgreSQL.
- Обнаруживайте аномалии и оповещайте о них.
- Примите превентивные меры для предотвращения проблем в обслуживании.
Мониторинг популярных запросов
Если мониторинг логов Ключ-АСТРОМ включён и pg_stat_statements представление доступно, Ключ-АСТРОМ будет собирать 100 самых популярных запросов (отсортированных по общему времени выполнения) каждые 5 минут и сохранять их в виде логов. Эти логи доступны либо на экране экземпляра базы данных, либо в приложении Базы данных в разделе Топ-запросов по общему времени выполнения.
Чтобы отфильтровать эти запросы на дашборде или в блокноте, можно использовать фильтры по dt.extension.name = com.astromkey.extension.postgres и event.group = top_queries. Ниже представлен пример DQL-запроса:
fetch logs | filter dt.extension.name=="com.astromkey.extension.postgres" and event.group=="top_queries" | sort total_exec_time desc
Независимо от того, pg_stat_statements доступно это или нет, Ключ-АСТРОМ все равно будет собирать запросы pg_stat_activity как часть набора функций Queries, которые аналогичным образом поступают в виде логов с event.group = longest_queries.
Получение деталей плана выполнения
Для пользователей SaaS, имеющих доступ к приложению Базы данных и включённых функциях мониторинга самых популярных запросов (см. предыдущий раздел), доступна функция получения планов выполнения для этих запросов. Это можно сделать в приложении Базы данных в разделе Statement performance, щёлкнув Request по плану выполнения конкретного запроса.
Для этого query расширение попытается выполнить следующее:
SELECT * from astromkey.astromkey_execution_plan({query})
и затем загрузить в Ключ-АСТРОМ первую строку столбца с именем explain. Эти планы выполнения загружаются в виде логов с event.group = execution_plans.
Начать
Активация
Действия по активации удаленного мониторинга (версия 1.255+):
- Активируйте расширение в Ключ-АСТРОМ, перейдя по ссылке:
- Ключ-АСТРОМ → Расширения → PostgreSQL → Добавить в среду
- Добавить новую конфигурацию мониторинга
Требования
- Должно быть установлено соединение между АктивнымШлюзом, где развернуто расширение, и базой данных Postgres.
- Необходимо предоставить пользователю базы данных соответствующие разрешения.
Пример:
CREATE USER astromkey WITH PASSWORD '<PASSWORD>' INHERIT; GRANT pg_monitor TO astromkey;
Для мониторинга самых популярных запросов:
pg_stat_statementsпросмотр (должен быть включен) [ https://www.postgresql.org/docs/current/pgstatstatements.html#PGSTATSTATEMENTS ].pg_stat_statements.track_planningдолжен быть включен, чтобы разрешить выборку планов.
Для мониторинга деталей плана исполнения:
- В базе данных должна быть создана специальная функция
astromkey.astromkey_execution_plan, к которой вы будете подключаться и из которой будут извлекаться планы выполнения.
CREATE SCHEMA astromkey;
CREATE OR REPLACE FUNCTION astromkey.astromkey_execution_plan(
query text,
OUT explain JSON
) RETURNS SETOF JSON
LANGUAGE plpgsql
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY DEFINER
ROWS 1
SET plan_cache_mode = force_generic_plan
AS
$$DECLARE
arg_count integer;
open_paren text;
close_paren text;
explain_cmd text;
json_result json;
BEGIN
/* reject statements containing a semicolon in the middle */
IF pg_catalog.strpos(
pg_catalog.rtrim(astromkey_execution_plan.query, ';'),
';'
) OPERATOR(pg_catalog.>) 0 THEN
RAISE EXCEPTION 'query string must not contain a semicolon';
END IF;
/* get the parameter count */
SELECT count(*) INTO arg_count
FROM pg_catalog.regexp_matches( /* extract the "$n" */
pg_catalog.regexp_replace( /* remove single quoted strings */
astromkey_execution_plan.query,
'''[^'']*''',
'',
'g'
),
'\$\d{1,}',
'g'
);
IF arg_count OPERATOR(pg_catalog.=) 0 THEN
open_paren := '';
close_paren := '';
ELSE
open_paren := '(';
close_paren := ')';
END IF;
/* construct a prepared statement */
EXECUTE
pg_catalog.concat(
'PREPARE _stmt_',
open_paren,
pg_catalog.rtrim(
pg_catalog.repeat('unknown,', arg_count),
','
),
close_paren,
' AS ',
astromkey_execution_plan.query
);
/* construct an EXPLAIN statement */
explain_cmd :=
pg_catalog.concat(
'EXPLAIN (FORMAT JSON, ANALYZE FALSE) EXECUTE _stmt_',
open_paren,
pg_catalog.rtrim(
pg_catalog.repeat('NULL,', arg_count),
','
),
close_paren
);
/* get and return the plan */
EXECUTE explain_cmd INTO json_result;
RETURN QUERY SELECT json_result;
/* delete the prepared statement */
DEALLOCATE _stmt_;
END;$$;
- Обратите внимание, что функция выше определена с
SECURITY DEFINER, то есть она выполняется с привилегиями пользователя, который её определил, а не того, кто её выполняет. Это связано с тем, что для запросаEXPLAINтребуются те же разрешения, что и для его выполнения, то есть пользователь, с которым определена эта функция, должен иметь достаточные привилегии для запускаPREPAREиEXPLAINдля запросов, которые она будет объяснять. Поэтому для полной функциональности убедитесь, что функция определена с соответствующим пользователем. - Пользователю, осуществляющему мониторинг, необходимо иметь
USAGEгрант наastromkeyсхему.
GRANT USAGE ON SCHEMA astromkey to <username>
- В некоторых конфигурациях PostgreSQL вам также может потребоваться настроить
search_pathдля пользователя мониторинга:
ALTER USER astromkey SET search_path to astromkey, public;
Подробности
Ограничения
Популярные запросы:
- Из соображений безопасности
ALTERутверждения исключены из коллекции самых популярных запросов.
Подробности плана выполнения:
- Доступно только для пользователей SaaS с установленным приложением DB. Разрешение
extensions:configuration.actions:writeтребуется для запуска загрузки плана выполнения. - План выполнения можно получить только из базы данных, в которой была создана функция
astromkey.astromkey_execution_plan.
Лицензирование
Метрики, собираемые с помощью этого расширения, используют единицы данных Ключ-АСТРОМ ИИ (см. DDU для метрик).
Грубую оценку количества DDU, потребляемых метрическим методом, можно получить с помощью следующей формулы:
( (11 * number of instances) + (29 * number of databases) + (1 * number of tablespaces) ) * 525.6 DDUs/year
Для логов действует стандартное потребление DDU для мониторинга логов. В зависимости от вашей модели лицензирования, см. потребление DDU для мониторинга логов.
Если ваша лицензия включает пользовательские метрики. Каждая пользовательская метрика эквивалентна 525,6 DDU/год. См. документацию Расчёт стоимости метрики.
Информация о совместимости
Расширение предназначено для работы с PostgreSQL версии 11 и более поздних версий.