PostgreSQL错误:进程仍在数据库0的关系2676上等待AccessShareLock

问题描述 投票:1回答:1

我们无法连接到PostgreSQL实例,我们必须重新启动PostgreSQL服务才能连接到实例,但我们会在几天内收到相同的错误。

日志显示以下错误

2019-02-18 08:00:03.043 UTC [5053] postgres@utilitydbLOG:  process 5053 still waiting for AccessShareLock on relation 2676 of database 0 after 1000.431 ms
2019-02-18 08:04:04.486 UTC [5170] bucardo@bucardoLOG:  process 5170 still waiting for AccessShareLock on relation 2676 of database 0 after 1001.006 ms
2019-02-18 08:15:02.802 UTC [5445] postgres@utilitydbLOG:  process 5445 still waiting for AccessShareLock on relation 2676 of database 0 after 1000.425 ms
2019-02-18 08:30:02.844 UTC [5846] postgres@utilitydbLOG:  process 5846 still waiting for AccessShareLock on relation 2676 of database 0 after 1000.501 ms
2019-02-18 08:33:23.428 UTC [5940] bucardo@bucardoLOG:  process 5940 still waiting for AccessShareLock on relation 2676 of database 0 after 1001.265 ms
2019-02-18 08:45:02.869 UTC [6269] postgres@utilitydbLOG:  process 6269 still waiting for AccessShareLock on relation 2676 of database 0 after 1000.340 ms
2019-02-18 08:51:08.230 UTC [6478] dbuser@postgresLOG:  process 6478 still waiting for AccessShareLock on relation 2676 of database 0 after 1000.438 ms

当我检查服务状态时,它显示以下详细信息

postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting
postgres: postgres utilitydb [local] startup waiting

我知道我需要检查数据库中的锁,但日志中提供的信息并不那么详细。 PostgreSQL系统表中没有oid = 0的数据库。

我该如何调试此问题?

任何帮助,将不胜感激。

database postgresql postgresql-9.6 database-locking
1个回答
2
投票

有什么东西在ACCESS EXCLUSIVE指数上持有pg_authid_rolname_index锁。

在保持此锁定时,没有人可以使用该索引,并且由于这是用户表(pg_authid)上需要搜索特定用户名的索引,因此无法登录。

你已成为“拒绝服务”攻击的牺牲品。

如果存在持有锁的活动数据库会话,则将其终止。

如果即使重新启动数据库,锁仍然存在,则它必须是准备好的事务。关闭数据库并清除数据目录的pg_twophase子目录。

更好地保护数据库并更改所有超级用户密码。

© www.soinside.com 2019 - 2024. All rights reserved.