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