應用程式相容性預寫記錄

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 測試會驗證預期行為。