原文:https://source.android.com/devices/tech/perf/compatibility-wal
Android 9引入一種 名為Compatibility WAL(預(yù)寫日志記錄)的 SQLite數(shù)據(jù)庫(kù)的特殊模式轮蜕,它允許數(shù)據(jù)庫(kù)使用journal_mode=WAL
,同時(shí)保留每個(gè)數(shù)據(jù)庫(kù)最多保持一個(gè)連接的行為桩蓉。
應(yīng)用程序的數(shù)據(jù)庫(kù)默認(rèn)啟用兼容性WAL,除非應(yīng)用程序具有:
- 通過(guò)調(diào)用SQLiteDatabase.enableWriteAheadLogging 或disableWriteAheadLogging選擇加入或禁止預(yù)寫日志記錄
- 通過(guò)調(diào)用
SQLiteDatabase.OpenParams.setJournalMode(String mode)
顯式請(qǐng)求日志模式
啟用WAL日志模式可以顯著提高性能并減少寫入量。例如,在ext4文件系統(tǒng)上变汪,WAL可以使寫入速度提高4倍。
兼容性WAL默認(rèn)啟用蚁趁,不需要任何其他實(shí)現(xiàn)裙盾。
注:對(duì)于使用Room的應(yīng)用程序 ,默認(rèn)情況下啟用完全預(yù)寫日志記錄模式(不是兼容性WAL)荣德。這適用于運(yùn)行API 16及更高版本的設(shè)備闷煤,并且未歸類為 低內(nèi)存設(shè)備童芹。有關(guān)更多信息涮瞻,請(qǐng)參閱
RoomDatabase.JournalMode AUTOMATIC
。
禁用兼容性WAL
要禁用兼容性WAL模式假褪,請(qǐng)復(fù)寫 db_compatibility_wal_supported
配置資源署咽。
例如:
<bool name="db_compatibility_wal_supported">false</bool>
對(duì)于WAL日志模式不提供優(yōu)于傳統(tǒng)回滾日志模式的性能優(yōu)勢(shì)的配置,您可能需要禁用兼容性WAL。例如宁否,在F2FS文件系統(tǒng)上窒升,雖然SQLite支持原子寫入并且DELETE日志性能類似于WAL,但WAL可以將寫入量增加10%到15%慕匠。
驗(yàn)證
要驗(yàn)證兼容性WAL模式饱须,請(qǐng)從CtsDatabaseTestCases模塊運(yùn)行 CTS測(cè)試咱筛。啟用兼容性WAL時(shí)猾瘸,CTS測(cè)試將驗(yàn)證預(yù)期的行為。
注:禁用兼容性WAL模式時(shí)空民,CTS測(cè)試通過(guò)锅铅。