Size: a a a

pgsql – PostgreSQL

2021 March 18

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
Поставлю, да. Потому что если не поставить, система ввода-вывода "перегрузится до неюзабельности" от кое-чего другого.
Проблема-то в том, что это всё происходит... не в вакууме. ;)
А я за контролируемое постепенное доведение до нуля, главное чтобы хлам быстрее очищался чем копился в принципе.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Gonchik Tsymzhitov
Привет!
подскажите, в таблице jiraissue, примерно 700к записей,
а fileattachment - 870к.

следующий запрос выполняется более получаса
select count(*) from fileattachment where issueid not in (select id from jiraissue);


подскажите, какой параметр отвечает на подзапросы. Хочется именно ускорить подзапросы
Никакой. Не используйте NOT IN, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_NOT_IN
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
sexst
А я за контролируемое постепенное доведение до нуля, главное чтобы хлам быстрее очищался чем копился в принципе.
Это, конечно, прекрасно... в теории.
Но на практике, как мне кажется, сделать это не так просто, и отнимает у выполняющего куда больше времени.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Yaroslav Schekin
Просто мне это не кажется таким уж жёстким (особенно, если иметь в виду альтернативу).
А что Вы делаете вместо этого, если подробнее?
проблема не только в задержках, но и в том, что вакуум не считает нужным что-то делать. поэтому:
- понижаем на порядок scale_factor
- понижаем до 10 или до 5 cost_delay (зависит от дисков)
- руками вакуумируем самые проблемные (большие) таблицы
- проверяем “возраст” таблиц, вакуумируем те, что близки к anti-wraparround
- после стабилизации, ставим cost_delay в районе 2-5
- мониторим “наполненность” воркеров вакуума (если заняты все какое-то время — повод смотреть настройки)
источник

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
Это, конечно, прекрасно... в теории.
Но на практике, как мне кажется, сделать это не так просто, и отнимает у выполняющего куда больше времени.
Главное чтобы прод гладко работал =)
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Gonchik Tsymzhitov
Привет!
подскажите, в таблице jiraissue, примерно 700к записей,
а fileattachment - 870к.

следующий запрос выполняется более получаса
select count(*) from fileattachment where issueid not in (select id from jiraissue);


подскажите, какой параметр отвечает на подзапросы. Хочется именно ускорить подзапросы
from fileattachment left join jiraissue дальше думать головой и соображать мозгами.
источник

GT

Gonchik Tsymzhitov in pgsql – PostgreSQL
Михаил Шурутов
from fileattachment left join jiraissue дальше думать головой и соображать мозгами.
ok, 🙂 пойду создам задачу на переписку ORM
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
sexst
Главное чтобы прод гладко работал =)
Тогда легче купить адекватное "железо", чем выбрасывать тратить деньги на зарплату DBA, чтобы он дни и ночи проводил в обнимку с сервером. ;)
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Нормальные ОРМ умеют в raw-SQL.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Gonchik Tsymzhitov
ok, 🙂 пойду создам задачу на переписку ORM
Just FYI, позиция проекта PostgreSQL по поводу бездарно написанных ORM сводится к тому, что это их проблемы.
И её изменений, к счастью, не предвидится. ;)
источник

D

Denis in pgsql – PostgreSQL
Yaroslav Schekin
> Если есть но данные "грязные" - все тоже самое, но отнять 30

Да нет же!
20 отнимается как раз тогда, когда страница чистая! Вы понимаете, почему?
Я Вас уже в третий раз спрашиваю (кажется) — что vacuum делает со страницами с точки зрения терминологии clean/dirty?
Тут зависит от ситуации, как я понимаю

Если страница которую мы хотим обработать в shared_memory отсутствует, то ее надо прочитать это - cllean, нужно создать новую страницу, испачкать ее и засинкать на диск

Если это данные которые все еще есть, и они в shared_memory и на диске одинаковые, то автовакуум должен испачкать страницу и засинкать это на диск

Если данные в shared_memory и на диске не одинаковые - страница уже испачкана до нас - нужно засинкать, снова испачкать и засинкать

Так же все?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Victor Yegorov
проблема не только в задержках, но и в том, что вакуум не считает нужным что-то делать. поэтому:
- понижаем на порядок scale_factor
- понижаем до 10 или до 5 cost_delay (зависит от дисков)
- руками вакуумируем самые проблемные (большие) таблицы
- проверяем “возраст” таблиц, вакуумируем те, что близки к anti-wraparround
- после стабилизации, ставим cost_delay в районе 2-5
- мониторим “наполненность” воркеров вакуума (если заняты все какое-то время — повод смотреть настройки)
Я сильно не думал, но разве это не другая проблема?
Я имел в виду ситуацию, когда autovacuum "вовсю" (согласно текущим настройкам) работает, но не справляется.
источник

D

Denis in pgsql – PostgreSQL
и тогда получается первый случай это miss
второй - hit
третий - durty
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
Тут зависит от ситуации, как я понимаю

Если страница которую мы хотим обработать в shared_memory отсутствует, то ее надо прочитать это - cllean, нужно создать новую страницу, испачкать ее и засинкать на диск

Если это данные которые все еще есть, и они в shared_memory и на диске одинаковые, то автовакуум должен испачкать страницу и засинкать это на диск

Если данные в shared_memory и на диске не одинаковые - страница уже испачкана до нас - нужно засинкать, снова испачкать и засинкать

Так же все?
Почти, но нет. Короче:
1. После работы vacuum страница всегда грязная (но она могла быть такой и до).
2. "Синкать" что-то куда-то — это не задача vacuum, и он этим не занимается.

> нужно создать новую страницу, испачкать ее и засинкать на диск

Просто считать. По sync — выше.

> нужно засинкать, снова испачкать и засинкать

Как раз и нет, это самый дешёвый случай — была грязная и такой и останется, sync чего-то — не проблема vacuum.
источник

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
Тогда легче купить адекватное "железо", чем выбрасывать тратить деньги на зарплату DBA, чтобы он дни и ночи проводил в обнимку с сервером. ;)
<Шутка про то, что один ssd заменяет двух dba>
источник

AT

Andrey Tatarnikov in pgsql – PostgreSQL
А есть ли вообще смысл так глубоко закапываться в тюнинг автовакуума "просто штоб было"? То есть пока проблем не видно. Кажется, нету.
источник

AG

Alex Grigorev in pgsql – PostgreSQL
Добрый день! кто-нибудь сталкивался с таким?: постгрес нагружается по CPU (делит ресурсы с другими тачками в vmware), после освобождения ресурсов продолжает тупить.. решается рестартом сервиса.. мб планировщик как-то запоминает что CPU "плохой" и продолжает в том же режиме работать? что можно дернуть без рестарта?
источник

D

Denis in pgsql – PostgreSQL
Yaroslav Schekin
Почти, но нет. Короче:
1. После работы vacuum страница всегда грязная (но она могла быть такой и до).
2. "Синкать" что-то куда-то — это не задача vacuum, и он этим не занимается.

> нужно создать новую страницу, испачкать ее и засинкать на диск

Просто считать. По sync — выше.

> нужно засинкать, снова испачкать и засинкать

Как раз и нет, это самый дешёвый случай — была грязная и такой и останется, sync чего-то — не проблема vacuum.
тогда, если случай когда страница уже грязная, самый дешевый, почему в дефолтных параметрах он стоит как самый дорогой?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
тогда, если случай когда страница уже грязная, самый дешевый, почему в дефолтных параметрах он стоит как самый дорогой?
Не стоит! Процитируйте мне это (мне уже начинает казаться, что Вы где-то не то и не там читаете, честное слово).
источник

D

Denis in pgsql – PostgreSQL
что процитировать?
Я сейчас смотрю на конфиг постгреса в который эти параметры приехали с пакетом
источник