Главная » Хабрахабр » Мониторим активные сессии PostgreSQL 10 как в Oracle

Мониторим активные сессии PostgreSQL 10 как в Oracle

image

Данный инструмент написан из спортивного интереса, когда мною было обнаружено, что вьюха pg_stat_activity в PostgreSQL 10 имеет поля wait_event_type и wait_event, очень похожие по сути на оракловые wait_class и event из v$session.

Учитывая, что я не профессиональный разработчик, было не просто, но очень интересно. Активно работая в данный момент с программой ASH-Viewer от akardapolov мне стало любопытно — насколько сложно переписать этот продукт под Postgres. По ходу дела даже нашёл, как мне кажется, пару значительных багов, которые проявляются и в оригинальной программе для Oracle, по кр.мере для Standard Edition.

Берём данные исключительно из встроенной вьюхи pg_stat_activity. Принципы работы PASH-Viewer:
Не нужны никакие расширения.

Раз в секунду делается запрос активных сессий:

текст запроса к pg_stat_activity

SELECT current_timestamp, datid, datname, pid, usesysid, coalesce(usename, backend_type, 'unknown') as usename, coalesce(client_hostname, client_addr::text, 'localhost') as client_hostname, application_name, wait_event_type, wait_event, state, backend_type, query from pg_stat_activity where state='active' and pid != pg_backend_pid();

Раз в 15 секунд данные за последние 15 снимков усредняются и выводятся на график.

Я думал, как использовать queryid, но к сожалению не нашёл способа сопоставить запросы из этих двух представлений. SQL id, который нужен для группировки запросов в разделе Top SQL, я генерирую сам, он не имеет никакого отношения к queryid из pg_stat_statements. Было бы здорово, если бы разработчики добавили поле queryid в pg_stat_activity.

SQL id = первые 13 символов от md5 (нормализованный текст запроса).

Я написал плохую. Нормализованный текст запроса — это запрос, в котором удалены символы новых строк и лишние пробелы, а литералы заменены на $1, $2 и т.д… Написать хорошую функцию нормализации запроса для меня было сложно. Лучше пришлите хорошую. Текст привожу, но вы его пожалуйста не смотрите, а то мне стыдно.

NormalizeSQL

public static String NormalizeSQL(String sql) else if ((array[i].charAt(0) == '\'') && (array[i].charAt(array[i].length() - 1) == '\'')) { bvn++; array[i] = "$" + bvn; } nsql += array[i] + " "; } return nsql; }

С планом выполнения запроса было сложно. Это к Oracle ты приходишь и говоришь «Дай мне план для sqlid=...», и он тебе отвечает — «Тебе самый последний, или за вчера, или показать все за последний месяц со статистикой выполнения по каждому?». А PostgreSQL тебе отвечает — «А что такое sqlid?».

Делаем это не чаще 1 раза в час. Поэтому для запросов вида SELEСT/UPDATE/INSERT/DELETE посылаем в БД команду EXPLAIN и сохраняем результат локально.

И работает это только в том случае, если запрос выполнялся в той же БД, к который вы подключились (указывается при настройке соединения).

Но некоторые, наверное, не захотят использовать суперюзера. EXPLAIN работает, только если вы подключились к БД под суперюзером (postgresql). Будет работать всё, кроме отображения планов. Поэтому можно создать специального пользователя для мониторинга.

CREATE USER pgmonuser WITH password 'pgmonuser';
GRANT pg_monitor TO pgmonuser;

Скачать тут: https://sourceforge.net/projects/pash-viewer
GitHub: https://github.com/dbacvetkov/PASH-Viewer

Спасибы и приветы:
Александру Кардаполову за ASH-Viewer.
Антону Глушакову за консультацию и тестирование.
Дмитрию Рудопысову за то, что объяснил, как компилировать и запускать скачанный с github проект.

Ещё слайды:

image

image

image


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Разработка buck-преобразователя на STM32F334: принцип работы, расчеты, макетирование

В двух своих последних статьях я рассказал о силовом модуле и плате управления на базе микроконтроллера STM32F334R8T6, которые созданы специально для реализации систем управления силовыми преобразователями и электроприводом. Так же был рассмотрен пример DC/AC преобразователя, который являлся демонстрацией, а не ...

Simulation theory: взаимосвязь квантово-химических расчётов и Реальности

Введение О чём этот текст Если человек услышит о «симуляции реальности», то в наиболее вероятно ему в голову придут или разные научно-фантастические произведения (типа Матрицы, Темного города, или Теоремы Зеро), или компьютерные игры. В случае людей, чьи головы засорены инженерным ...