Postgresql Pg locks-具有空transactionid和pid的数千行
我的一个内部工具正在处理postgresql数据库,它开始抛出异常:共享内存不足。有一个提示“您可能需要增加每个事务的最大锁数”,我试图将其设置为128,但没有帮助。我发现在工具运行一段时间后,pg_锁表中有数千条记录。即使在停止工具后,行仍保留在那里。对我来说奇怪的是pid和transactionid是空的。大多数行的列virtualtransaction设置为'-1/0',模式为'siredlock',被授予'True',锁类型为'Page',或“元组”。这意味着,我应该从哪里开始寻找问题?需要提到的是,该工具正在使用准备好的事务。从pg_prepared_xacts查询选择*;只返回一行。Postgres 9.6版。您使用的是可序列化的隔离级别,它需要大量内存来存储SI锁,即使在事务提交后也必须保留SI锁Postgresql Pg locks-具有空transactionid和pid的数千行,postgresql,Postgresql,我的一个内部工具正在处理postgresql数据库,它开始抛出异常:共享内存不足。有一个提示“您可能需要增加每个事务的最大锁数”,我试图将其设置为128,但没有帮助。我发现在工具运行一段时间后,pg_锁表中有数千条记录。即使在停止工具后,行仍保留在那里。对我来说奇怪的是pid和transactionid是空的。大多数行的列virtualtransaction设置为'-1/0',模式为'siredlock',被授予'True',锁类型为'Page',或“元组”。这意味着,我应该从哪里开始寻找问题?
增加每笔交易的最大锁数。甚至更多。谢谢!即使在关闭该工具后,pg locks表中仍有这么多行是正常的吗?另外,如果read committed足够,那么更改隔离级别是否是一个好主意?如果您不需要可序列化的
,您不应该使用它,因为它不是免费的(如您所见)。过一会儿锁就应该打开了。