我在 x86_64-pc-linux-gnu 上使用 PostgreSQL 13.3,我试图找到以下问题的根本原因:
ERROR: out of shared memory
HINT: You might need to increase max_pred_locks_per_transaction.
所以我使用 BEGIN ISOLATION LEVEL SERIALIZABLE; 进行测试 然后带条件查询,问题是即使SIReadLock的数量大于max_pred_locks_per_transaction*max_connections,我仍然可以查询,根本不存在“共享内存不足”:
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)
那么请帮我指出 SIReadLock 受哪个配置的限制?并且,哪些配置和锁与“您可能需要增加 max_pred_locks_per_transaction”相关?
谢谢。
如果你看代码,你会发现谓词锁的最大数量计算为