powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранение планов выполнения (текстового документа, в общем случае)
10 сообщений из 10, страница 1 из 1
Хранение планов выполнения (текстового документа, в общем случае)
    #39746242
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы поинтересоваться, кто какими методами пользуется для хранения форматированного текста ( в данном случае плана выполнения полученного командой EXPLAIN) с целью дальнейшего анализа ?

-TEXT[]
-XML
-JSONB
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746252
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinaceХотелось бы поинтересоваться, кто какими методами пользуется для хранения форматированного текста ( в данном случае плана выполнения полученного командой EXPLAIN) с целью дальнейшего анализа ?

-TEXT[]
-XML
-JSONB

EXPLAIN умеет уже отдавать нормальный готовый чего вам угодно
FORMAT { TEXT | XML | JSON | YAML }

https://www.postgresql.org/docs/11/sql-explain.html

Не надо пытаться парсить вывод explain для человека это нездоровое занятие.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746265
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukНе надо пытаться парсить вывод explain для человека это нездоровое занятие.

Вопрос не про парсинг , а про хранение.

Я хочу хранить планы выполнения интересующих меня запросов.
Как вы правильно указали, в соответствии с документацией я могу хранить план в виде TEXT | XML | JSON ...
Вопрос в другом - в каком формате удобнее хранить, что бы потом ,когда понадобится , проще было анализировать и сравнивать с текущим планом ?

Пока остановился на TEXT[] :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE pstat.sql_base_set
(
id   bigint PRIMARY KEY,
mean_time double precision not null , 
max_time double precision not null ,
plan text[] 
);

Если кто укажет на преимущества в использовании XML или JSOB , буду благодарен. Проект только начинается и очень далек даже от эскиза.
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746386
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinaceMaxim BogukНе надо пытаться парсить вывод explain для человека это нездоровое занятие.

Вопрос не про парсинг , а про хранение.

Я хочу хранить планы выполнения интересующих меня запросов.
Как вы правильно указали, в соответствии с документацией я могу хранить план в виде TEXT | XML | JSON ...
Вопрос в другом - в каком формате удобнее хранить, что бы потом ,когда понадобится , проще было анализировать и сравнивать с текущим планом ?

Пока остановился на TEXT[] :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE pstat.sql_base_set
(
id   bigint PRIMARY KEY,
mean_time double precision not null , 
max_time double precision not null ,
plan text[] 
);

Если кто укажет на преимущества в использовании XML или JSOB , буду благодарен. Проект только начинается и очень далек даже от эскиза.

Так все зависит от того какой вывод вы храните... если вывод от explain текстового (который никак вообще не предназначен для автоматического разбора и анализа) - это text[] - но это идея неудачная потому что любая автоматизация приведет к необходимости парсить это в какую то машиночитаемую структуру.
Лучше сразу писать в формате который не требует парсинга (а он для вывода explain весьма нетривиален).

PS: слишком много у вас времени на руках ))). Ну вот заметили вы что план изменился (так он вообще у одного и того же запроса при РАЗНЫХ входных параметрах может быть вполне легитимно разный...) и что дальше будете с этим знанием делать?


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746449
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk Ну вот заметили вы что план изменился (так он вообще у одного и того же запроса при РАЗНЫХ входных параметрах может быть вполне легитимно разный...) и что дальше будете с этим знанием делать?

Идея немного другая .
1)По результатам pg_stat_statements собрать стандартный набор запросов от приложения . Сохранить среднее время выполнения , план запроса , quryid , может быть еще какую-то информацию.
2)мониторить pg_stat_statements , при значительном превышении среднего времени выполнения стандартного запроса поднимается алерт
3)первым делом сравнивается изменился ли план запроса по сравнению с базовым. Если изменился, начинается анализ текущего плана , статистики, данных и т.д.

Просто использование некого подобия baseline сильно облегчит решение инцидентов типа - "было все хорошо а теперь все плохо".

Но мысль хранить разные планы запросов , интересная , спасибо за наводку.
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746451
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukЛучше сразу писать в формате который не требует парсинга (а он для вывода explain весьма нетривиален).

Все равно , я в ручную не собираюсь парсить.
Есть хороший сайт для этого explain depesz com
Я им пользуюсь.
Там как раз на вход дается текст.
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746552
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinaceMaxim BogukЛучше сразу писать в формате который не требует парсинга (а он для вывода explain весьма нетривиален).

Все равно , я в ручную не собираюсь парсить.
Есть хороший сайт для этого explain depesz com
Я им пользуюсь.
Там как раз на вход дается текст.

тогда просто text
зачем вам массив текстов то? по 1 срочке хранить? а зачем?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746587
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
тогда просто text
зачем вам массив текстов то? по 1 срочке хранить? а зачем?

Вот так я получаю план выполнения для хранения :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE OR REPLACE FUNCTION pstat.explain_v_txt(in_sql text)
RETURNS TABLE(explain_line text) 
AS $explain_v_txt$
BEGIN
    RETURN QUERY EXECUTE 'EXPLAIN (FORMAT TEXT) '||in_sql;
END;	
$explain_v_txt$ LANGUAGE plpgsql;
результат выполнения функции помещается в массив

Вот так я получаю план выполнения для анализа
Код: plaintext
copy (select unnest(plan) from pstat.sql_base_set where id = 358746420 ) to '/tmp/stat/358746420_plan.txt' with ( format text);

На выходе получаю читаемый план для разбора
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746594
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinace,

а вам не auto_explain contrib вообще нужен?
...
Рейтинг: 0 / 0
Хранение планов выполнения (текстового документа, в общем случае)
    #39746607
rinace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkijrinace,

а вам не auto_explain contrib вообще нужен?
Мне проще получить нужные мне планы из таблицы простейшими скриптами , чем искать в логе и копипастить.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранение планов выполнения (текстового документа, в общем случае)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]