Closed xinferum closed 2 weeks ago
Изменение параметра pg_profile.subsample_enabled в конфигурационном файле postgresql.conf никак не влияет, те же ошибки при обоих значениях true и false.
Еще в документации указано:
pg_profile.min_idle_xact_duration (integer) - idle transaction threshold Any setting of the above can be defined on a server level using the set_server_subsampling() function.
То есть тип параметра integer, но в функции:
set_server_subsampling(server name, subsample_enabled boolean, min_query_duration interval, min_xact_duration interval, min_xact_age integer, min_idle_xact_dur interval hour to second) Set subsample settings for a server.
subsample_enabled - should the take_subsample() function perform a subsample actually.
min_query_duration - query duration threshold
min_xact_duration - transaction duration threshold
min_xact_age - transaction age threshold
min_idle_xact_dur - idle transaction threshold
Параметр min_idle_xact_dur уже имеет тип interval hour to second и тип interval указан в функции в базе. Так же сама таблица в которую прописываются параметры:
CREATE TABLE profile.server_subsample (
server_id int4 NOT NULL,
subsample_enabled bool DEFAULT true NOT NULL,
min_query_dur interval hour to second NULL,
min_xact_dur interval hour to second NULL,
min_xact_age int8 NULL,
min_idle_xact_dur interval hour to second NULL,
CONSTRAINT pk_server_subsample PRIMARY KEY (server_id),
CONSTRAINT fk_server_subsample_server FOREIGN KEY (server_id) REFERENCES profile.servers(server_id) ON DELETE CASCADE
);
Тоже тип interval.
Делаю попытку прописать серверу настройки для subsample:
=# select profile.set_server_subsampling('server-name.domain', true, '120s', '120s', 1000000, '3600s');
ERROR: 42703: column "min_wait_dur" of relation "server_subsample" does not exist
СТРОКА 8: min_wait_dur
^
ЗАПРОС: INSERT INTO server_subsample(
server_id,
subsample_enabled,
min_query_dur,
min_xact_dur,
min_xact_age,
min_idle_xact_dur,
min_wait_dur
)
SELECT
s.server_id,
set_server_subsampling.subsample_enabled,
set_server_subsampling.min_query_duration,
set_server_subsampling.min_xact_duration,
set_server_subsampling.min_xact_age,
set_server_subsampling.min_idle_xact_dur,
NULL
FROM servers s
WHERE server_name = set_server_subsampling.server
ON CONFLICT (server_id) DO
UPDATE SET
(subsample_enabled, min_query_dur, min_xact_dur, min_xact_age,
min_idle_xact_dur, min_wait_dur) =
(
COALESCE(EXCLUDED.subsample_enabled,server_subsample.subsample_enabled),
COALESCE(EXCLUDED.min_query_dur,server_subsample.min_query_dur),
COALESCE(EXCLUDED.min_xact_dur,server_subsample.min_xact_dur),
COALESCE(EXCLUDED.min_xact_age,server_subsample.min_xact_age),
COALESCE(EXCLUDED.min_idle_xact_dur,server_subsample.min_idle_xact_dur),
COALESCE(EXCLUDED.min_lock_dur,server_subsample.min_wait_dur)
)
КОНТЕКСТ: PL/pgSQL function set_server_subsampling(name,boolean,interval,interval,integer,interval) line 5 at SQL statement
ПОЛОЖЕНИЕ: checkInsertTargets, parse_target.c:1066
Время: 1,988 мс
Прошу прощения за долгий ответ. Причиной проблемы является ошибка в скрипте обновления. Сегодня я заменю пакет в релизе. Для восстановления работоспособнеости существующие сервера должны быть упомянуты в server_subsample, починиться должно запросом:
INSERT INTO server_subsample(server_id) SELECT server_id FROM servers;
Спасибо! Будем ждать. Мы когда проблему обнаружили, на бекап откатились, пока 4.5 версию используем.
@xinferum, большое спасибо за обнаруженную ошибку. Я перевыпустил релиз, прошу вас проверить работоспособность после обновления еще раз. На этот раз должно работать. В документацию тоже внёс исправления, там, конечно, должен быть интервал - речь идёт о продолжительности во времени.
Добрый день.
Извиняюсь за долгое отсутствие ответа - откатили обновление и на время отложили этот вопрос. Сегодня обновил заново - на версии 4.6 все заработало, семплы снимаются, спасибо! Так же в прошлый раз у нас вся pg_profile лопатилась несколько часов, а в этот раз менее секунды ушло на обновления расширения.
Так же обновил следом версию на 4.7, на ней тоже все работает, семплы и отчеты снимаются, будем наблюдать.
Закрываю issue.
Добрый день.
У нас был установлен pg_profile версии 4.5 на централизованном сервере сбора семплов (собираем данные раз в час с примерно 50-ти серверов PostgreSQL), сегодня выполнил обновление версии на 4.6 как описано в документации. После обновления, уже на версии 4.6 пытаюсь снять семпл и получаю следующую ошибку:
Так же не работает снятие сабсемплов:
От сервера с которого пытаюсь снять семплы ничего не зависит - ошибки те же. Централизованный сервер pg_profile у нас на ванильной версии PostgreSQL 15.6.
Похоже что вот этот запрос ничего не возвращает:
Так как у нас еще не настроены для всех серверов subsample.