Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Логирование в 12й версии  [new]
kliff
Member

Откуда:
Сообщений: 346
Доброго дня! Подскажите пожалуйста можно ли настроить логирование как в старой версии, не могу найти

на версии 9.6 в лог попадают запросы с одной записью duration.

В 12 версии общее время выполнения разбивается на фазы выполнения запроса, что делает лог вообще не читаемым каким то, особенно, если многострочные запросы.

Было

2021-02-19 10:33:22.471 MSK [24988] LOG: duration: 120.202 ms
SELECT .....
FROM ....
WHERE $1
2021-02-19 10:33:22.471 MSK [24988] DETAIL: parameters: $1 = 764


Теперь стало

2021-02-19 10:33:22.471 MSK [24988] LOG: duration: 1.21 ms parse pdo_stmt_00000022:
SELECT .....
FROM ....
WHERE $1
2021-02-19 10:33:22.475 MSK [24988] LOG: duration: 3.360 ms bind pdo_stmt_00000022:
SELECT .....
FROM ....
WHERE $1
2021-02-19 10:33:22.475 MSK [24988] DETAIL: parameters: $1 = 764
2021-02-19 10:33:22.475 MSK [24988] LOG: duration: 110.556 ms execute pdo_stmt_00000022:
SELECT .....
FROM ....
WHERE $1
2021-02-19 10:33:22.475 MSK [24988] DETAIL: parameters: $1 = 764
2021-02-19 10:33:22.476 MSK [24988] LOG: duration: 0.065 ms statement: DEALLOCATE pdo_stmt_00000022


SELECT запросы соответственно по 100-700 строк. Превращают старые 702 строки в новые 2000 строк.

Можно ли как то настроить и схлопнуть в старый формат такую детализацию? Чтоб все фазы выполнения были в общей строке?
19 фев 21, 11:15    [22283322]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
Поставьте PDO::ATTR_EMULATE_PREPARES в true на приложении.

Вы сами отправляете раздельно parse, bind и execute запросы. База честно, согласно своим настройкам, логирует. Большой вопрос, к слову, в осмысленности логирования единиц ms
19 фев 21, 11:57    [22283356]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
kliff
Member

Откуда:
Сообщений: 346
Melkij,
логику работы запроса менять не хотелось бы, prepare делается на бд.

Да и как будет работать сбор статистики, если prepare делать на стороне приложения, очевидно статистика будет сломана, каждый запрос будет падать в таблицу отдельной строкой.
19 фев 21, 13:10    [22283435]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4571
kliff
Melkij,
логику работы запроса менять не хотелось бы, prepare делается на бд.

Да и как будет работать сбор статистики, если prepare делать на стороне приложения, очевидно статистика будет сломана, каждый запрос будет падать в таблицу отдельной строкой.


если prepare делается на БД то и в лог пойдет 3 запроса (parse/bind/execute)
при этом зачастую может быть 2 запроса если parse уже выполнялся

т.е. вы хотите то что противоречит логике работы вашей же... так не бывает...
на 9.6 кстати все логгирование устроено ровно так же как и в новых версиях
и если на 9.6 у вас логгируется по другому значит prepare на стороне базы отключен там.


>>Да и как будет работать сбор статистики, если prepare делать на стороне приложения, очевидно статистика будет сломана, каждый запрос будет падать в таблицу отдельной строкой

странная идея с чего вы это взяли?

ps: большая часть проектов работает с отключенным server side prepare потому что он не совместим с transaction pooling режимом.

pps: а зачем вы вообще все в лог пишете (а не там больше 100-1000ms)?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
19 фев 21, 14:59    [22283526]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
kliff
Member

Откуда:
Сообщений: 346
Maxim Boguk,

>>странная идея с чего вы это взяли?

Как я понимаю, если prepare на бд, то приходит запрос вида select * from table where id = $1;
и параметры к этому запросу отдельно. Соответственно в статистику select * from table where id = $1; падает как один и тот же запрос.

Если на стороне приложения выполнить prepare, то parse, bind будут выполнены и на БД будут приходить запросы

select * from table where id = 14;
select * from table where id = 55;
select * from table where id = 23;
И для статистики все они будут разными


Все запросы для своих целей были временно включены.

Что то ничего хорошего не нарыл в документации, все-таки что лучше и в чем принципиальные плюсы, проблемы, какой так сказать тру стайл - на сервере делать prepare или в приложении.
24 фев 21, 10:14    [22285486]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
kliff,

про какую статистику вы говорите?
24 фев 21, 10:24    [22285493]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
kliff
Member

Откуда:
Сообщений: 346
Melkij, pg_stat_statements
24 фев 21, 11:35    [22285527]     Ответить | Цитировать Сообщить модератору
 Re: Логирование в 12й версии  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
kliff,

у вас же не 9.1, в самом-то деле. pgss давным-давно умеет игнорировать T_Const в тексте запроса.
24 фев 21, 12:48    [22285604]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить