Eu preciso de alguns insights sobre o bloqueio de nível de linha no Postgres .
- Quantos bloqueios compartilhados (FOR SHARE) podem estar simultaneamente em uma tupla específica em uma relação.
- Terá muitos bloqueios compartilhados na mesma tupla, causando qualquer desempenho/ou qualquer problema no banco de dados.
- Caso existam tais limitações, como configurá-las e limites aconselháveis.
Citação do manual
(ênfase minha)
Portanto, o único problema de desempenho que você pode obter é o número de gravações de disco que o bloqueio pesado pode causar.
Embora haja um número "ilimitado" de bloqueios de linha no sistema, há um limite no número de objetos (por exemplo, tabelas) que podem participar do bloqueio de uma única transação, que é controlado por max_locks_per_transaction
Essa propriedade controla o número de objetos para os quais uma transação pode conter bloqueios, não o número de bloqueios. Uma transação pode bloquear um milhão de linhas em uma única tabela. No entanto, o valor padrão de 64
max_locks_per_transaction
significa que uma transação pode conter bloqueios para no máximo 64 tabelas (mas, por exemplo, um milhão de linhas em cada tabela). Portanto, se suas transações nunca atingirem mais de 64 mesas, não há com o que se preocupar.Um motivo comum para aumentar esse valor é se você estiver descartando muitas tabelas em uma única transação, por exemplo, por meio de uma
drop owned by current_user
instrução para limpar um banco de dados.