database - 由于 1 个数据库上的锁定问题,具有多个数据库的 Postgres 实例是否会在多个/所有数据库之间被阻止?

标签 database postgresql amazon-rds postgresql-11

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

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

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

由于某种原因,不仅受影响的数据库被卡住了,实例上的其他数据库也被卡住了 - 即使那些不在锁定周期内的数据库也是如此。

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

我们正在使用 AWS Postgres 11

最佳答案

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

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

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

结果是:没有什么需要考虑的,你所描述的情况不应该发生。您应该更仔细地调查到底是什么导致了这种挂起。

关于database - 由于 1 个数据库上的锁定问题,具有多个数据库的 Postgres 实例是否会在多个/所有数据库之间被阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67213362/

相关文章:

php - 从现有的数据库结构 Laravel 生成迁移文件

mysql - 当我无法创建新的 MySQL 用户时,如何让某人只能访问某些 MySQL 表?

mysql - 使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法

带有 RDS 和 Elastic Beanstalk 的 phpMyAdmin

c# - 如何将azure数据库导出到blob存储

php - 在 Mysql 数据库中的新数据行之前插入空白行

ruby - 我有一个用于 Rhoconnect :Module error when running rake exec db:restart 的 Rails 未定义方法 `configure'

postgresql - 是否可以使用 Hibernate 注释定义 INITIALLY DEFERRED 约束?

ruby-on-rails - 突然在 UsersController#create 中得到 Errno::ECONNREFUSED

mysql - 无法从 php 连接到 AWS RDS MySQL