我在考虑下面的场景。
BEGIN TRANSACTION;
INSERT SOMETHING;
INSERT SOMETHING;
##CLIENT COMPUTER EXPLODES
如果我理解正确,在每个 INSERT 语句之后,都会将一个日志条目写入数据库服务器的 WAL。
在这种情况下,WAL 中现在有 2 行新行,但由于客户端计算机爆炸,COMMIT 语句将永远不会执行。那么写入 WAL 的 2 行会发生什么?连接断开后它们会被删除吗?它们会作为不完整交易的残余物永久保存吗?客户端断开连接后,ABORT 语句是否会插入到 WAL 中?
WAL 记录仍然存在;WAL 永远不会被追溯修改。它们将在恢复期间重放,但由于
COMMIT
WAL 中没有该事务的记录,它们将保持不可见。