编辑:我错误地假设所有 COW 文件系统都有 WAL。它似乎 BTRFS 没有,所以这个问题基本上只适用于 ZFS。
典型的 COW 文件系统,如 ZFS,有自己的 WAL 形式(ZIL,在 ZFS 的情况下)。
在非 COW 文件系统上,DB WAL 对性能(因为它是顺序的)和完整性原因(因为缺乏写完整性保证)都是有意义的;在 COW 文件系统上,这些角色由 FS (WAL) 完成。
正因为如此,在 COW 文件系统上存储 DB 数据不会使 DB WAL 变得多余吗?
编辑:我错误地假设所有 COW 文件系统都有 WAL。它似乎 BTRFS 没有,所以这个问题基本上只适用于 ZFS。
典型的 COW 文件系统,如 ZFS,有自己的 WAL 形式(ZIL,在 ZFS 的情况下)。
在非 COW 文件系统上,DB WAL 对性能(因为它是顺序的)和完整性原因(因为缺乏写完整性保证)都是有意义的;在 COW 文件系统上,这些角色由 FS (WAL) 完成。
正因为如此,在 COW 文件系统上存储 DB 数据不会使 DB WAL 变得多余吗?
不,因为 WAL 也用于从备份恢复——例如,在用户错误的情况下。结合之前的完整备份,它允许恢复到任何时间点——大概是在用户做坏事之前。
也不会,因为事务可能需要更改文件中的数百个不同位置,而写时复制并没有使这更快。但是预写日志记录允许将所有更改以最少的数量写入 IO,并稍后应用于数据文件。后面的写入是异步的,并且受益于写入合并,因此被许多事务修改的文件位置可能只写入一次。