【发布时间】:2020-02-23 11:32:28
【问题描述】:
我正在尝试学习 PostgreSQL MVCC 架构。它说 MVCC 为每个并发查询创建一个单独的快照。这种方式是不是内存效率低?
例如,如果有 1000 个并发查询并且表大小很大。这将创建表的多个实例。
我的理解正确吗?
【问题讨论】:
标签: postgresql concurrency locking rdbms mvcc
我正在尝试学习 PostgreSQL MVCC 架构。它说 MVCC 为每个并发查询创建一个单独的快照。这种方式是不是内存效率低?
例如,如果有 1000 个并发查询并且表大小很大。这将创建表的多个实例。
我的理解正确吗?
【问题讨论】:
标签: postgresql concurrency locking rdbms mvcc
它说 MVCC 为每个并发查询创建一个单独的快照。这种方式是不是内存效率低?
您可能会说这是内存效率低下。在实践中这通常不是什么大问题。
例如,如果有 1000 个并发查询并且表大小很大。
为什么你会有/想要 1000 个并发查询?你有1000个CPU吗?如果存在尝试建立 1000 个并发查询的风险,那么您应该部署一些入口控制机制(如连接池)来防止这种情况发生,并回退到 max_connections。
这将创建表的多个实例。
快照不是表的副本。只是一个set of information,它动态地应用于基表行以决定哪些行在该快照中可见。快照的大小与并发事务的数量成正比(一个原因不是 1000 个),而不是表的大小。
【讨论】: