172 похожих чатов

Я тут нарвался на LWLock:LockManager после переезда на partitioned table

(32 HASH партиции) он же fastpath в pg_locks и у меня вопрос:

Insert on conflict update в partitioned таблицу сколько локов возьмёт если был конфликт и update HOT? Один на таблицу, один на индекс для on conflict минимум, но эти локи на партицию куда пишет или на все партиции просто потому что они есть в плане? PostgreSQL 15.2

4 ответов

22 просмотра

Если не ошибаюсь, то на все объекты, которые есть в плане будет наложен как минимум access share, т.е. на каждую партицию таблицы и на каждую партицию индекса. Сегодня как раз читал доку по Авроре на aws, в ней говорится, что при превышении лимита FP_LOCK_SLOTS_PER_BACKEND аврора переходит на небыстрые блокировки. Думаю в ванильном пг примерно похожая ситуация, надеюсь более опытные коллеги поправят. Сама дока: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/apg-waits.lw-lock-manager.html

Mike-Wazowski Автор вопроса
Максим Логвиненко
Если не ошибаюсь, то на все объекты, которые есть ...

Тоже читал эту доку и просто шикарный summary от gitlab https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/2301 (у них PG12 многое могло поменяться). Но вот не понятно с execution time partition prunning: если заход в индекс есть в плане, во время выполнения он туда не факт что зайдет , значит , наверное, никаких локов брать не будет, но как оно на самом деле я хз.

Mike Wazowski
Тоже читал эту доку и просто шикарный summary от ...

а pg_locks что показывает? сделал простой запрос к партиционированной таблице по дате с обращением к последней партиции и посмотрел блокировки: блокировка на саму таблицу, на каждую партицию таблицы и на каждую партицию индекса, в сумме 1к+ блокировок, все AccessShareLock, первые 16 из них - fastpath

Mike-Wazowski Автор вопроса
Максим Логвиненко
а pg_locks что показывает? сделал простой запрос к...

Спасибо за подсказку, поэксперементировал, всё оказалось ещё интереснее. В реальном приложении используются prepared statements и тут начинает играть plan_cache_mode: - generic: lock на каждую партицию и на 1 индекс в этой партиции нужный для запроса - custom: все партиции и все индексы. Это потому что они нужны для планирования, которое случается при каждом execute

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта