系統允許的總鎖數
SELECT
(SELECT setting::int FROM pg_settings WHERE name = 'max_locks_per_transaction') *
(SELECT setting::int FROM pg_settings WHERE name = 'max_connections') +
(SELECT setting::int FROM pg_settings WHERE name = 'max_prepared_transactions');
當鎖大于上述數據
dynadot=# SELECT
count( pid)
FROM pg_locks ;count
-------563
(1 row)
就會出現
ERROR: out of shared memory
一般是調大max_locks_per_transaction
參考下方的官方文檔。
20.12.?鎖管理
大多數會出現在“查詢一個有很多子表的父表”這種情況,會有大量的鎖。所以此時會報錯。