我在MSSQL方面有几十年的经验,但没有使用Postgres及其MVCC风格的并发控制。
在MSSQL中,如果我有一个非常大的数据集是只读的,我会将数据库设置为只读(为安全起见),并使用事务隔离级别读未提交,这应该避免锁定争用,数据集无论如何都不需要锁争用。
在Postgres,有类似的吗?某种将数据库设置为只读并确保PG完全安全而不使用MVCC的方法,只需读取而不复制行?因为MVCC似乎有一些相当大的开销,因此对于非常大的被动数据集的多个读者来说,这似乎是很昂贵的。
编辑:评论说,我误解了,只有在写作时才会复制,而不是像我想象的那样阅读。
发布于 2021-12-17 18:00:03
"MVCC“代表“多版本并发控制”。同一表行的多个版本仅由写活动(主要是UPDATE)生成。
如果您的数据库是只读的--强制的或自愿的,出于这个问题的目的--那么就不可能有一个行的多个版本。这个问题是没有意义的。
发布于 2021-12-15 16:24:56
不,没有办法这样做,也没有理由这样做。
因为PostgreSQL,作者永远不会阻止读取器,反之亦然,这正是因为您想要禁用它的MVCC实现。因此,没有必要用令人讨厌的拐杖来读取未提交的数据。
https://stackoverflow.com/questions/70365906
复制相似问题