Расширение PostgreSQL

Материал из Документация Ключ-АСТРОМ
Версия от 08:44, 28 октября 2025; IKuznetsov (обсуждение | вклад) (Новая страница: «== Обзор == Решение для мониторинга '''PostgresSQL''' основано на подходе удалённого мониторинга,...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Обзор

Решение для мониторинга 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;

Для мониторинга самых популярных запросов:

Для мониторинга деталей плана исполнения:

  • В базе данных должна быть создана специальная функция 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 и более поздних версий.