應用程式的相容性預寫記錄

Android 9 推出了 SQLiteDatabase 的特殊模式,稱為相容性預先寫入記錄 (WAL),可讓資料庫使用 journal_mode=WAL,同時保留每個資料庫最多保留一個連線的行為。

除非應用程式具備下列任一條件,否則系統會預設為啟用應用程式資料庫的相容性 WAL:

  1. 透過呼叫 SQLiteDatabase.enableWriteAheadLoggingdisableWriteAheadLogging 啟用或停用預先寫入記錄功能
  2. 呼叫 SQLiteDatabase.OpenParams.setJournalMode(String mode) 可明確要求的日誌模式

啟用 WAL 日誌模式可以大幅提升效能,並減少寫入量。舉例來說,在 ext4 檔案系統上,WAL 可將寫入速度提升 4 倍。

系統預設會啟用相容性 WAL,且不需要任何額外實作。

停用相容性 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 測試會驗證預期的行為。