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

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

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

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

4 ответов

21 просмотр

Если не ошибаюсь, то на все объекты, которые есть в плане будет наложен как минимум 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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта