Estou usando o PostgreSQL 13.3 em x86_64-pc-linux-gnu e estou tentando encontrar a causa raiz de:
ERROR: out of shared memory
HINT: You might need to increase max_pred_locks_per_transaction.
Então eu testei usando BEGIN ISOLATION LEVEL SERIALIZABLE; então consulte com condições, o problema é que mesmo o número de SIReadLock é maior que max_pred_locks_per_transaction*max_connections, ainda posso consultar, não há 'falta de memória compartilhada':
smart=*# show max_pred_locks_per_transaction;
max_pred_locks_per_transaction
--------------------------------
10
(1 row)
smart=*# show max_connections;
max_connections
-----------------
3
(1 row)
smart=*# SELECT count(*) FROM pg_locks WHERE mode = 'SIReadLock';
count
-------
250
(1 row)
Então, por favor, ajude-me a indicar que SIReadLock é limitado por qual configuração? e qual configuração e bloqueio estão relacionados a 'Você pode precisar aumentar max_pred_locks_per_transaction'?
Obrigado.
Se você observar o código, descobrirá que o número máximo de bloqueios de predicado é calculado como