應用程序的兼容性 WAL(預寫日誌記錄)

Android 9 引入了一種名為 Compatibility WAL(預寫日誌記錄)的SQLiteDatabase特殊模式,該模式允許數據庫使用journal_mode=WAL ,同時保留每個數據庫最多保持一個連接的行為。

兼容性 WAL 默認情況下為應用程序的數據庫啟用,除非應用程序具有:

  1. 通過調用SQLiteDatabase.enableWriteAheadLoggingdisableWriteAheadLogging選擇加入或退出預寫日誌記錄
  2. 通過調用SQLiteDatabase.OpenParams.setJournalMode(String mode)顯式請求日誌模式

啟用 WAL 日誌模式可以顯著提高性能並減少寫入量。例如,在 ext4 文件系統上,WAL 可以使寫入速度提高 4 倍。

兼容性 WAL 默認啟用,不需要任何額外的實現。

禁用兼容性 WAL

要禁用 Compatibility 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 測試。 CTS 測試將驗證啟用兼容性 WAL 時的預期行為。