3 postgresql write-ahead-logging
如果我理解正确的话,PostgreSQL 是这样工作的:
对于这个看似奇怪的仪式,我得到的解释是,对于每个查询,写入 WAL 比直接写入数据库文件要快得多。
但这是为什么呢?我认为 PG 的 WAL 日志文件比仅仅“在文本文件末尾添加行”更复杂,因为这可能会导致两个查询同时写入它,从而丢失或损坏数据。所以它必须比这更复杂。这意味着更多的开销。此时我想知道这样做有什么真正的性能优势,因为归根结底,这两者都涉及写入速度较慢的 HDD/SSD 磁盘。
不过,我并不怀疑这一点。我只是想知道为什么它这么快。
在我看来,写入数据库文件的问题与写入 WAL 的问题相同。在这两种情况下,您都需要确保它有序且正确地完成。我唯一的猜测是,也许各种约束检查之类的查找成本很高。
显然,“WAL”的概念是 PostgreSQL 所独有的,但至少对已执行的查询保留某种“选项卡”,以解决断电和软件崩溃问题,这听起来只是常识。每次只是盲目地写入数据库文件,甚至不保留任何类型的日志,这听起来像是一场灾难,我无法想象任何数据库曾经这样做过。想象一下,如果有人在断电时进行了 100 万美元的交易,然后他们的账户损失了 100 万美元,但另一个人却没有收到任何钱!即使是 20 世纪 40 年代的数据库软件也可能不是这样工作的……
归档时间: |
|
查看次数: |
1293 次 |
最近记录: |