database - postgresql db 表锁定或行锁定多查询执行

标签 database postgresql rowlocking table-locking

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

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

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

最佳答案

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 引擎使用它。

关于database - postgresql db 表锁定或行锁定多查询执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52439638/

相关文章:

postgresql - 在 postgres 中提取 xpath

performance - select * from foo (100 000 rows) 需要 4 秒,这正常吗?

php - 相同 PHP 脚本的多个实例使用行锁定处理不同的 MySQL 行

sql-server - 是否可以在 SQL Server 中强制行级锁定?

mysql - 两个游标在mysql中不起作用

php - 单个 php 网站页面内的多个数据库

mysql - 如何发现 RDBMS 中的关系?

MySQL:查找 "same"数据

database - 如果要存储的数据多于集群中的 RAM,Hazelcast 和 Scalris 等分布式内存云数据库会发生什么情况?