Size: a a a

pgsql – PostgreSQL

2021 February 02

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Пока непонятно. :) Жили без ручного вакуума все время, тут решили пару дней назад попробовать "а что будет", пока визуально сложно сказать есть ли профит, хуже не стало точно
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Смущает, что он молотит полчаса, то есть выходит, что автовакуум приходит как-то совсем непонятно когда и как
источник

SM

Salih Mamashev in pgsql – PostgreSQL
Yaroslav Schekin
Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFFERS) SELECT ..." и вставить результат на сайт.
Видимо когда используеш функцию из дашборда пгадмина он так криво выдает, вот вручную запрос сделал - https://explain.depesz.com/s/JXzr
источник

SG

Sergey Gr in pgsql – PostgreSQL
Andrey Tatarnikov
Пока непонятно. :) Жили без ручного вакуума все время, тут решили пару дней назад попробовать "а что будет", пока визуально сложно сказать есть ли профит, хуже не стало точно
Судя по вашему профилю нагрузки auto vacuum analyze и так приходит раз в сутки-трое
источник

SG

Sergey Gr in pgsql – PostgreSQL
Andrey Tatarnikov
Смущает, что он молотит полчаса, то есть выходит, что автовакуум приходит как-то совсем непонятно когда и как
Та настройки которые вы показали - это параметры запуска (startup triggers) для autovacuum. Агрессивность его работы настраивается параметрами autovacuum_vacuum_cost_delay и autovacuum_vacuum_cost_limit
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Sergey Gr
Судя по вашему профилю нагрузки auto vacuum analyze и так приходит раз в сутки-трое
Возможно, в списке запросов его иногда глазами видно. Сейчас хочется понять для себя стоит ли вообще что-то здесь делать или без прямого доступа к субд проще сразу плюнуть и жить так дальше. Есть варианты убрать  ручные запуски, попробовать собирать статистику по времени работы процессов, которые пишут/читают, потом вернуть ручной вакуум и посмотреть что поменяется. Но совершенно не ясно что делать, если окажется, что польза от ручного вакуума есть - пытаться его руками запускать как-то более умно, чем раз в сутки, или просить менять конфиг.
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Sergey Gr
Та настройки которые вы показали - это параметры запуска (startup triggers) для autovacuum. Агрессивность его работы настраивается параметрами autovacuum_vacuum_cost_delay и autovacuum_vacuum_cost_limit
<pg_settings name="autovacuum_vacuum_cost_delay" value="20"/>
   <pg_settings name="autovacuum_vacuum_cost_limit" value="2400"/>
источник

SG

Sergey Gr in pgsql – PostgreSQL
Andrey Tatarnikov
<pg_settings name="autovacuum_vacuum_cost_delay" value="20"/>
   <pg_settings name="autovacuum_vacuum_cost_limit" value="2400"/>
Отличаются от параметров по умолчанию.
источник

SG

Sergey Gr in pgsql – PostgreSQL
Andrey Tatarnikov
Конечная цель - попытаться получить хоть какой-то прирост скорости чтения, не угробив при этом запись.
Постараться уложить всю таблицу в память. И что гораздо более эффективно - оптимизировать доступ к ней, но в коробочном приложении это сложно.
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Плюс сейчас из чувства паранойи ручной вакуум никогда не запускается параллельно с пишущими процессами, они ждут пока вакуум закончит. Это не очень удобно, т.к. скорость появления данных во время запуска вакуума - 0. Есть ли вероятность, что запись деградирует при параллельно работющем вакууме?
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Sergey Gr
Постараться уложить всю таблицу в память. И что гораздо более эффективно - оптимизировать доступ к ней, но в коробочном приложении это сложно.
На ближайшее время не вариант, мало того что коробка, так и инфраструктура вся у вендора. Потому и приходится заниматься диагностикой через гланды.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Salih Mamashev
Видимо когда используеш функцию из дашборда пгадмина он так криво выдает, вот вручную запрос сделал - https://explain.depesz.com/s/JXzr
Да уж. Может, им bug report написать (такие планы практически бесполезны)?

Что там с autovacuum в базе? Для crmUsers_amocrm_v3 давно выполнялся, например (может, она очень часто обновляется)?

А так — тут можно попробовать два варианта, в принципе.
1. Тот, что Вы предложили:
CREATE INDEX ON contacts (accountId) WHERE unanswered > 0 AND NOT deleted;
2. Или вот так:
CREATE INDEX ON  crmUsers_amocrm_v3(integrationId, chatType, chatId); -- Порядок полей не так уж важен для *этого* запроса

Забыл написать — а что чтений так много? RAM на сервере не хватает? Или настройки "кривые"?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey Tatarnikov
Возможно, в списке запросов его иногда глазами видно. Сейчас хочется понять для себя стоит ли вообще что-то здесь делать или без прямого доступа к субд проще сразу плюнуть и жить так дальше. Есть варианты убрать  ручные запуски, попробовать собирать статистику по времени работы процессов, которые пишут/читают, потом вернуть ручной вакуум и посмотреть что поменяется. Но совершенно не ясно что делать, если окажется, что польза от ручного вакуума есть - пытаться его руками запускать как-то более умно, чем раз в сутки, или просить менять конфиг.
"Стандартный" подход — менять конфиг. В конце концов, для решения этой задачи autovacuum и предназначен, т.е. идея в том, что если он не справляется, стоит его настраивать, а не костыли городить. ;)
источник

SM

Salih Mamashev in pgsql – PostgreSQL
Yaroslav Schekin
Да уж. Может, им bug report написать (такие планы практически бесполезны)?

Что там с autovacuum в базе? Для crmUsers_amocrm_v3 давно выполнялся, например (может, она очень часто обновляется)?

А так — тут можно попробовать два варианта, в принципе.
1. Тот, что Вы предложили:
CREATE INDEX ON contacts (accountId) WHERE unanswered > 0 AND NOT deleted;
2. Или вот так:
CREATE INDEX ON  crmUsers_amocrm_v3(integrationId, chatType, chatId); -- Порядок полей не так уж важен для *этого* запроса

Забыл написать — а что чтений так много? RAM на сервере не хватает? Или настройки "кривые"?
Да, crmUsers_amocrm_v3 часто обновляется, попробую с индексами. Насчет железа должно хватать, но этот вопрос надо уточнить. В любом случае спасибо за ответ. Если получу какие-то результаты, напишу)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Salih Mamashev
Да, crmUsers_amocrm_v3 часто обновляется, попробую с индексами. Насчет железа должно хватать, но этот вопрос надо уточнить. В любом случае спасибо за ответ. Если получу какие-то результаты, напишу)
> железа должно хватать, но этот вопрос надо уточнить.

Но не хватает, как видно по плану. ;)
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Yaroslav Schekin
"Стандартный" подход — менять конфиг. В конце концов, для решения этой задачи autovacuum и предназначен, т.е. идея в том, что если он не справляется, стоит его настраивать, а не костыли городить. ;)
А на что менять? Кажется, что требовать обрабатывать таблицу после каждых, скажем, 10К записей - может оказаться убийственно в момент, когда придет суточная пачка в миллионы строк - писатель будет конфликтовать с автовакуумом. Или нет? В документации как-то не ясно что случится, когда запись пачками еще идет, а автовакуум уже решил запускаться
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
Стремно, что в какой-то момент придет одновременно запись, чтение клиентами и автовакуум и все это радостно погибнет уперевшись в IO
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey Tatarnikov
А на что менять? Кажется, что требовать обрабатывать таблицу после каждых, скажем, 10К записей - может оказаться убийственно в момент, когда придет суточная пачка в миллионы строк - писатель будет конфликтовать с автовакуумом. Или нет? В документации как-то не ясно что случится, когда запись пачками еще идет, а автовакуум уже решил запускаться
Не будет он конфликтовать. Вообще, "ужасы" vacuum сильно преувеличены. ;)
Какая это версия PostgreSQL, кстати?
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
11
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Andrey Tatarnikov
Стремно, что в какой-то момент придет одновременно запись, чтение клиентами и автовакуум и все это радостно погибнет уперевшись в IO
Проблема в том, что альтернатива — "чем меньше выполняется vacuum, тем больше нужен vacuum" (таблицы-то растут).
И ни писателей, ни читателей это может не порадовать. ;)
источник