12

根據reference documentation READ ONLY事務標誌除了允許DEFERRABLE事務之外是有用的嗎?PostgreSQL對只讀事務運行一些性能優化

SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY; 

可延遲交易屬性沒有任何影響,除非 交易也是SERIALIZABLE和只讀。當這些屬性的所有三個 被選擇用於交易時,交易可以在第一次獲取其快照時阻塞,之後它能夠運行 而沒有SERIALIZABLE交易的正常開銷並且沒有任何促成或正在進行的風險取消序列號 失敗。此模式非常適合長時間運行的報告或備份。

數據庫引擎是否爲只讀事務運行其他優化?

+1

我的理解是讀寫事務會帶來一些開銷,但是在實際寫入內容之前您不會承擔這種開銷。換句話說,就性能而言,「READ ONLY」事務應該與僅包含讀取的「READ WRITE」事務相同。這源於Postgres處理XID分配的方式(有關此處的一些信息(https://wiki.postgresql.org/wiki/Hint_Bits))。 –

+0

@NickBarnes也符合我的理解。 「只讀」實際上更加安全。 –

+0

謝謝。因此,可延期交易是唯一實質性的優化。 –

回答

5

綜上所述尼克·巴恩斯和克雷格·林格在評論中問題的評論:

  1. 的READ_ONLY標誌,並不一定提供任何優化
  2. 設置READ_ONLY標誌的主要好處是保證沒有元組將被修改