原文:https://source.android.com/devices/tech/perf/compatibility-wal
Android 9引入一种 名为Compatibility WAL(预写日志记录)的 SQLite数据库的特殊模式,它允许数据库使用journal_mode=WAL
,同时保留每个数据库最多保持一个连接的行为。
应用程序的数据库默认启用兼容性WAL,除非应用程序具有:
- 通过调用SQLiteDatabase.enableWriteAheadLogging 或disableWriteAheadLogging选择加入或禁止预写日志记录
- 通过调用
SQLiteDatabase.OpenParams.setJournalMode(String mode)
显式请求日志模式
启用WAL日志模式可以显著提高性能并减少写入量。例如,在ext4文件系统上,WAL可以使写入速度提高4倍。
兼容性WAL默认启用,不需要任何其他实现。
注:对于使用Room的应用程序 ,默认情况下启用完全预写日志记录模式(不是兼容性WAL)。这适用于运行API 16及更高版本的设备,并且未归类为 低内存设备。有关更多信息,请参阅
RoomDatabase.JournalMode AUTOMATIC
。
禁用兼容性WAL
要禁用兼容性WAL模式,请复写 db_compatibility_wal_supported
配置资源。
例如:
<bool name="db_compatibility_wal_supported">false</bool>
对于WAL日志模式不提供优于传统回滚日志模式的性能优势的配置,您可能需要禁用兼容性WAL。例如,在F2FS文件系统上,虽然SQLite支持原子写入并且DELETE日志性能类似于WAL,但WAL可以将写入量增加10%到15%。
验证
要验证兼容性WAL模式,请从CtsDatabaseTestCases模块运行 CTS测试。启用兼容性WAL时,CTS测试将验证预期的行为。
注:禁用兼容性WAL模式时,CTS测试通过。