应用程序的兼容性WAL(预写日志记录)

原文:https://source.android.com/devices/tech/perf/compatibility-wal

Android 9引入一种 名为Compatibility WAL(预写日志记录)的 SQLite数据库的特殊模式,它允许数据库使用journal_mode=WAL,同时保留每个数据库最多保持一个连接的行为。

应用程序的数据库默认启用兼容性WAL,除非应用程序具有:

  1. 通过调用SQLiteDatabase.enableWriteAheadLoggingdisableWriteAheadLogging选择加入或禁止预写日志记录
  2. 通过调用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测试通过。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,498评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,100评论 2 89
  • 随着app信息量越来越大,每次从网络获取数据已经不是很可取的方案了,本地数据库的运用已经越来越普遍了。而说道移动端...
    taosiyu阅读 4,732评论 12 13
  • 原子提交 原子提交(Atomic Commits)是SQLite这种事务型数据库的一个重要特性。原子提交意味着单个...
    PerTerbin阅读 7,739评论 1 8