Android 9 引入了一種稱為相容性預寫日誌記錄 (WAL) 的特殊SQLiteDatabase模式,該模式允許資料庫使用journal_mode=WAL
,同時保留每個資料庫最多保留一個連接的行為。
預設情況下,應用程式的資料庫會啟用相容性 WAL,除非應用程式具有以下任一功能:
- 透過呼叫
SQLiteDatabase.enableWriteAheadLogging
或disableWriteAheadLogging
選擇加入或退出預寫日誌記錄 - 透過呼叫
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 時的預期行為。