Practical maximum max_locks_per_transaction?

Started by Ronover 3 years ago3 messagesgeneral
Jump to latest
#1Ron
ronljohnsonjr@gmail.com

v9.6.24 (being retired next year)

https://www.postgresql.org/docs/9.6/runtime-config-locks.html

"The default, 64, has historically proven sufficient, but you might need to
raise this value if you have queries that touch many different tables in a
single transaction, e.g., query of a parent table with many children."

How "raised" is too raised?  I just had to increase
max_locks_per_transaction from 640 to 1024 on an instance with many child
tables and against which is run many large reports.  Another instance has
zero children, but had to increase the value to 1280 to prevent reports from
failing.

--
Angular momentum makes the world go 'round.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ron (#1)
Re: Practical maximum max_locks_per_transaction?

Ron <ronljohnsonjr@gmail.com> writes:

How "raised" is too raised?  I just had to increase
max_locks_per_transaction from 640 to 1024 on an instance with many child
tables and against which is run many large reports.  Another instance has
zero children, but had to increase the value to 1280 to prevent reports from
failing.

max_locks_per_transaction in isolation means nothing. What counts
is the product max_locks_per_transaction * max_connections, which is
(more or less) the number of slots allocated in the shared lock table.

Having said that, you can probably make it as big as you want
on any reasonably modern machine. I wouldn't blink at a few
million locktable entries, at least not on 64-bit hardware.

regards, tom lane

#3Ron
ronljohnsonjr@gmail.com
In reply to: Tom Lane (#2)
Re: Practical maximum max_locks_per_transaction?

On 11/25/22 17:56, Tom Lane wrote:

Ron <ronljohnsonjr@gmail.com> writes:

How "raised" is too raised?  I just had to increase
max_locks_per_transaction from 640 to 1024 on an instance with many child
tables and against which is run many large reports.  Another instance has
zero children, but had to increase the value to 1280 to prevent reports from
failing.

max_locks_per_transaction in isolation means nothing. What counts
is the product max_locks_per_transaction * max_connections, which is
(more or less) the number of slots allocated in the shared lock table.

Having said that, you can probably make it as big as you want
on any reasonably modern machine. I wouldn't blink at a few
million locktable entries, at least not on 64-bit hardware.

Really good to know.  I wonder how that can be worded in the documentation.

--
Angular momentum makes the world go 'round.