Ошибка PostgreSQL: процесс все еще ожидает AccessShareLock для отношения 2676 базы данных 0 - PullRequest
0 голосов
/ 20 февраля 2019

Мы не можем подключиться к экземпляру 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 нет.

Как устранить эту проблему?

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 20 февраля 2019

Что-то удерживает блокировку ACCESS EXCLUSIVE для индекса pg_authid_rolname_index.

Никто не может использовать этот индекс, пока эта блокировка удерживается, и поскольку это индекс в таблице пользователей (pg_authid), что вам нужно искать определенное имя пользователя, ни одна учетная запись не может быть успешной.

Вы стали жертвой атаки «отказ в обслуживании».

Если имеется активная сессия базы данных, удерживающаяблокировка, убейте ее.

Если блокировка сохраняется, даже если вы перезапустите базу данных, это должна быть подготовленная транзакция.Завершите работу базы данных и очистите подкаталог pg_twophase вашего каталога данных.

Лучше защитите свою базу данных и измените все пароли суперпользователя.

...