Android 9 introduce una modalità speciale di
SQLiteDatabase
chiamata Compatibility write-ahead logging (WAL) che consente a un database di utilizzare
journal_mode=WAL
mantenendo il comportamento di mantenere al massimo una
connessione per database.
Per impostazione predefinita, la WAL di compatibilità è attivata per il database di un'app, a meno che l'app non abbia:
- Attivazione o disattivazione della registrazione anticipata chiamando
SQLiteDatabase.enableWriteAheadLogging
odisableWriteAheadLogging
- Modalità di diario richiesta esplicitamente chiamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
L'attivazione della modalità di log WAL può portare a un miglioramento significativo delle prestazioni e alla riduzione della quantità di scritture. Ad esempio, su un file system ext4, WAL può portare a un miglioramento della velocità di scrittura di quattro volte.
La WAL di compatibilità è abilitata per impostazione predefinita e non richiede alcuna implementazione aggiuntiva.
Disattiva WAL di compatibilità
Per disabilitare la modalità WAL di compatibilità, sovrapponi la risorsa di configurazione db_compatibility_wal_supported
.
Ad esempio:
<bool name="db_compatibility_wal_supported">false</bool>
Ti consigliamo di disattivare la modalità WAL di compatibilità per le configurazioni in cui la modalità di log WAL non offre un vantaggio in termini di prestazioni rispetto alle modalità di log di rollback tradizionali. Ad esempio, su un file system F2FS, anche se SQLite supporta le scritture atomiche e le prestazioni del log DELETE sono simili a quelle di WAL, WAL può aumentare la quantità di scritture dal 10% al 15%.
Convalida
Per convalidare la modalità WAL di compatibilità, esegui test CTS dal modulo CtsDatabaseTestCases. I test CTS verificheranno il comportamento previsto quando è abilitato il WAL di compatibilità.