【问题标题】:WAL buffers fills before the transaction commitsWAL 缓冲区在事务提交之前填充
【发布时间】:2017-02-14 05:45:53
【问题描述】:

我一直在研究 Postgresql 中的崩溃恢复机制,这让我很受打击。在 WAL 日志记录中,在事务开始时,根据查询,WAL 缓冲区被 XLOG 记录填充。在事务提交时,WAL 缓冲区被刷新。现在,假设我使用一系列插入开始事务。当现有的 WAL 段被填满时,它会创建新的段。但是,当我批量插入或复制大量数据或其他东西(比如 4-5GB),并且 WAL 缓冲区(1-2GB)在事务提交之前被填满时,会发生什么?在这种情况下,WAL 会发生什么?

【问题讨论】:

    标签: postgresql logging recovery


    【解决方案1】:

    当 WAL 缓冲区已满时,它们会被刷新到磁盘。没有什么说 WAL 缓冲区只能在事务提交时刷新。重要的是与事务有关的所有 WAL 记录在事务被报告为已提交之前被刷新(假设同步提交)。但反之则不然:可以在提交事务之前刷新 WAL 记录。

    【讨论】:

    • 如果 WAL 缓冲区刷新到磁盘然后事务回滚怎么办?在这种情况下,如何删除与回滚事务相关的日志?
    • 它们不会被删除。但是 WAL 还包含事务是否提交(clog)的信息,这些信息将在接收端重放。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 2018-02-07
    • 2012-02-04
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多