我正在尝试学习 PostgreSQL MVCC 架构。它说 MVCC 为每个并发查询创建一个单独的快照。这种方法内存不是效率低下吗?
例如,如果有 1000 个并发查询并且表大小很大。这将创建表的多个实例。
我的理解正确吗?
我正在尝试学习 PostgreSQL MVCC 架构。它说 MVCC 为每个并发查询创建一个单独的快照。这种方法内存不是效率低下吗?
例如,如果有 1000 个并发查询并且表大小很大。这将创建表的多个实例。
我的理解正确吗?
它说 MVCC 为每个并发查询创建一个单独的快照。这种方法内存不是效率低下吗?
您可能会说这是内存效率低下。在实践中这通常不是一个大问题。
例如,如果有 1000 个并发查询并且表大小很大。
为什么你会有/想要 1000 个并发查询?你有1000个CPU吗?如果存在尝试建立 1000 个并发查询的风险,那么您应该部署一些入口控制机制(如连接池)来防止这种情况发生,并回退到 max_connections。
这将创建表的多个实例。
快照不是表的副本。只是一组动态应用于基表行以决定哪些行在该快照中可见的信息。快照的大小与并发事务的数量成正比(一个原因没有 1000 个),而不是表的大小。