Android 9 推出了 SQLiteDatabase 的特殊模式,稱為相容性預先寫入記錄 (WAL),可讓資料庫使用 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 測試。啟用相容性 WAL 時,CTS 測試會驗證預期的行為。