并发查询的 MVCC 快照限制

MVCC snapshot limit for concurrent queries

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

例如,如果有 1000 个并发查询并且 table 大小很大。这将创建 table.

的多个实例

我的理解正确吗?

It says that MVCC creates a separate snapshot for each concurrent query. Isn't this approach memory inefficient?

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

For example if there are 1000 concurrent queries and table size is huge.

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

This will create multiple instances of the table.

快照不是 table 的副本。只是一个 set of information 动态地应用于基础 table 行以确定哪些行在该快照中可见。快照的大小与并发事务的数量成正比(没有 1000 个的原因之一),而不是 table.

的大小