0

我正在尝试学习 PostgreSQL MVCC 架构。它说 MVCC 为每个并发查询创建一个单独的快照。这种方法内存不是效率低下吗?

例如,如果有 1000 个并发查询并且表大小很大。这将创建表的多个实例。

我的理解正确吗?

4

1 回答 1

2

它说 MVCC 为每个并发查询创建一个单独的快照。这种方法内存不是效率低下吗?

您可能会说这是内存效率低下。在实践中这通常不是一个大问题。

例如,如果有 1000 个并发查询并且表大小很大。

为什么你会有/想要 1000 个并发查询?你有1000个CPU吗?如果存在尝试建立 1000 个并发查询的风险,那么您应该部署一些入口控制机制(如连接池)来防止这种情况发生,并回退到 max_connections。

这将创建表的多个实例。

快照不是表的副本。只是一动态应用于基表行以决定哪些行在该快照中可见的信息。快照的大小与并发事务的数量成正比(一个原因没有 1000 个),而不是表的大小。

于 2020-02-23T16:02:48.033 回答