数据库基准测试中的持久性衡量的是系统在发生诸如崩溃、断电或硬件问题等故障后,仍能保证已提交事务保持完整的能力。这至关重要,因为数据库通常负责存储关键任务数据,丢失已提交的更改是不可接受的。基准测试通过模拟真实的故障场景来验证数据库能否正确恢复并保留数据,从而测试持久性。例如,如果一个银行应用处理资金转账,持久性可确保即使服务器在确认后立即崩溃,该事务也不会丢失。
为了评估持久性,基准测试通常包含压力测试,结合高写入负载和强制中断。一种常见的方法是在系统活动高峰期突然重启数据库,并检查恢复后所有已确认写入的数据是否仍然存在。像 fsync 操作(强制数据写入磁盘)和预写日志(WAL)这样的工具是其中的关键因素。例如,PostgreSQL 使用 WAL 在将更改应用到主数据库之前先记录下来,即使在事务进行中发生崩溃也能确保持久性。基准测试可能会衡量数据库调用 fsync 的频率,或者它如何平衡性能与安全写入策略。如果一个系统为了提高速度而跳过这些安全措施,它将面临数据丢失的风险——基准测试有助于量化这种权衡。
对于开发者而言,持久性基准测试提供了可操作的洞察。它们揭示了不同的配置(例如,调整提交间隔或复制设置)如何影响数据安全性。例如,MongoDB 的 日志(journaling) 功能可以调整以延迟磁盘写入从而提高性能,但这增加了在崩溃中丢失近期事务的风险。基准测试显示了这些选择如何影响恢复结果。类似地,像 AWS Aurora 这样的云数据库使用具有冗余的分布式存储来增强持久性,但这会增加延迟。通过测试这些场景,开发者可以选择与其应用程序风险承受能力相符的系统。持久性不仅仅是理论上的概念——它直接影响系统在压力下的行为以及用户对它们的信任程度。