【问题标题】:postgresql db table locking or row locking multi query executionpostgresql db 表锁定或行锁定多查询执行
【发布时间】:2018-09-21 08:27:58
【问题描述】:

我想了解 postgreSQL 是如何执行多查询的,例如我有一个数据库,其中有很多插入查询在运行,例如每分钟 20-40 次,还有很多选择查询,例如每分钟 200-300 次(简单查询通过主键选择)。

这种类型的查询在同一张表上运行,我很好奇 postgreSQL 是如何处理这些的。是不是当插入查询运行时表被锁定,我们必须等待选择查询,或者它是行锁定,以便在插入查询正在进行时选择查询可以继续并忽略锁定的行?

我猜在 mysql 数据库中有执行表锁定的 MyISAM 引擎和执行行锁定的 innoDB...

【问题讨论】:

    标签: database postgresql rowlocking table-locking


    【解决方案1】:

    Postgres 实现了multiv version concurrency control (MVCC),这意味着读取器永远不会阻塞写入器,写入器永远不会阻塞读取器。

    对于普通的 DML 语句,Postgres 也从不使用表锁,因此 SELECT 查询永远不会被您同时运行的任何 INSERT 语句阻塞。

    Postgres Wiki 包含有关 MVCC 如何在 Postgres 中实现和工作的更详细描述的链接。

    如今,基本上每个现代 DBMS 都使用某种 MVCC。 Oracle、Firebird 和 DB2 “一直”在使用它。 SQL Server 在 SQL Server 2005 中引入了它(尽管它仍然不是默认行为),在 MySQL 中,InnoDB 引擎使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多