微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于 1 个数据库的锁定问题,具有多个数据库的 Postgres 实例是否会在多个/所有数据库中被阻塞?

如何解决由于 1 个数据库的锁定问题,具有多个数据库的 Postgres 实例是否会在多个/所有数据库中被阻塞?

我还没有看到任何关于此的文档;高级问题是,鉴于我们有一个包含许多数据库的 Postgres 实例(作为 AWS RDS 托管),查询执行和锁定数据库之一的问题是否会导致整个实例出现问题?

我专门寻找有关查询执行/锁定的信息 - 我很欣赏可以共享有关内存/cpu 使用率的问题,因为这是一个共享资源。

今天早些时候,我们的一个数据库出现了一个问题,即所有查询执行都停止了;进一步调查后发现,我们在内部有 8 个“阻塞”查询,它们循环阻塞(即相互依赖执行)。

出于某种原因,不仅受影响的数据库卡住了,实例上的其他数据库也卡住了 - 甚至那些不在锁定周期内的数据库

数据库之间共享 RDS 实例时,我们应该注意哪些参数/约束?

我们使用的是 AWS Postgres 11

解决方法

您所描述的听起来不像数据库中的锁。如果多个进程相互阻塞,这称为 死锁,PostgreSQL 通过取消其中一个涉及的事务来自动解决它。

因此,可能涉及到数据库之外的一些锁,或者您只是忘记提交事务,而您在数据库中有一个活锁

现在通常这只会影响单个数据库,因为您无法访问与您连接的数据库不同的数据库中的对象。唯一的例外是如果您锁定了共享表之一:pg_databasepg_authidpg_tablespacepg_shdepend。但是您必须做一些非常不寻常的事情,通常需要超级用户权限才能做到这一点。您在托管数据库上没有这些权限。

结果是:没有什么可考虑的,你描述的应该不会发生。您应该更仔细地调查究竟是什么导致了这种挂起。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。