Thread
-
Guidance on Calculating max_locks_per_transaction for a Highly Partitioned Environment
Vivek Gadge <vvkgadge56@gmail.com> — 2026-06-29T17:55:59Z
Hello Team, I am looking for guidance on determining an appropriate value for the max_locks_per_transaction parameter in our PostgreSQL 17.6 production environment. Environment has the following characteristics: PostgreSQL Version: 17.6 max_connections = 1500 Daily partitioning strategy Large OLTP workload with transactions that may access multiple partitions Occasionally, we encounter the following error: ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. We understand that the shared lock table is sized based on max_locks_per_transaction, max_connections, and max_prepared_transactions. However, we have not found any guidance on how to estimate an appropriate value for environments with a large number of partitions and indexes. We would appreciate guidance on the following: Is there a recommended methodology or formula for estimating max_locks_per_transaction. Our objective is to determine an appropriate value based on workload characteristics rather than increasing the parameter through trial and error. Thanks Vivek Gadge. -
Re: Guidance on Calculating max_locks_per_transaction for a Highly Partitioned Environment
Ron Johnson <ronljohnsonjr@gmail.com> — 2026-06-30T16:47:11Z
On Tue, Jun 30, 2026 at 9:26 AM Vivek Gadge <vvkgadge56@gmail.com> wrote: > Hello Team, > > I am looking for guidance on determining an appropriate value for the > max_locks_per_transaction parameter in our PostgreSQL 17.6 production > environment. > > Environment has the following characteristics: > > PostgreSQL Version: 17.6 > max_connections = 1500 > That's HIGH. If you have that many concurrent connections, then you really need a connection pooler. > Is there a recommended methodology or formula for estimating > max_locks_per_transaction. > > Our objective is to determine an appropriate value based on workload > characteristics rather than increasing the parameter through trial and > error. > The memory structures handling locks per transaction are really light. I set the value to 15000 (where average connection count is around 30) and then worry about something else. -- Death to <Redacted>, and butter sauce. Don't boil me, I'm still alive. <Redacted> lobster!