0

我有数十年的 MSSQL 经验,但没有使用 Postgres 及其 MVCC 并发控制风格。

在 MSSQL 中,如果我有一个非常大的只读数据集,我会将数据库设置为只读(为了安全起见)并使用未提交的事务隔离级别,这样可以避免数据集不需要的锁争用反正。

在 Postgres 中,有没有等价的?将数据库设置为只读并确保完全安全的 PG 不使用 MVCC 的某种方式,只需读取而不制作行副本?因为 MVCC 似乎有一些相当大的开销,对于非常大的被动数据集的多个读取器来说,这似乎可能是昂贵的。

编辑:评论说我误解了只有在写作发生时才制作副本,而不是像我想象的那样阅读。

4

2 回答 2

2

“MVCC”代表“多版本并发控制”。同一表行的多个版本仅由写入活动产生(主要是UPDATE)。

如果您的数据库是只读的- 强制或自愿,对于这个问题的目的都是一样的 - 那么永远不可能有多个版本的行。这个问题没有实际意义。

于 2021-12-17T18:00:03.780 回答
0

不,没有办法这样做,也没有理由这样做。

从 PostgreSQL 开始,作者永远不会阻塞读者,反之亦然,正是因为您想要禁用它的 MVCC 实现。所以没有必要阅读未提交的数据这种令人讨厌的拐杖。

于 2021-12-15T16:24:56.377 回答