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

Android 9 引入了一種稱為相容性預寫日誌記錄 (WAL) 的特殊SQLiteDatabase模式,該模式允許資料庫使用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 測試。 CTS 測試將驗證啟用相容性 WAL 時的預期行為。