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