Compatibilità WAL (Write-Ahead Logging) per le app

Android 9 introduce una modalità speciale di SQLiteDatabase chiamata Compatibility WAL (write-ahead logging) che consente a un database di utilizzare journal_mode=WAL preservando il comportamento di mantenere un massimo di una connessione per database.

Compatibilità WAL è abilitato per il database di un'applicazione per impostazione predefinita, a meno che l'applicazione non abbia:

  1. Attivazione o disattivazione della registrazione write-ahead chiamando SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. Modalità journal richiesta esplicitamente chiamando SQLiteDatabase.OpenParams.setJournalMode(String mode)

L'abilitazione della modalità journal WAL può portare a un miglioramento significativo delle prestazioni e a una riduzione della quantità di scritture. Ad esempio, su un filesystem ext4, WAL può portare a un miglioramento 4x della velocità di scrittura.

Compatibilità WAL è abilitato per impostazione predefinita e non richiede alcuna implementazione aggiuntiva.

Disattivazione compatibilità WAL

Per disabilitare la modalità WAL di compatibilità, sovrapponi la risorsa di configurazione db_compatibility_wal_supported .

Per esempio:

<bool name="db_compatibility_wal_supported">false</bool>

Potresti voler disabilitare la compatibilità WAL per le configurazioni in cui la modalità journal WAL non fornisce un vantaggio in termini di prestazioni rispetto alle tradizionali modalità journal di rollback. Ad esempio, su un filesystem F2FS, sebbene SQLite supporti le scritture atomiche e le prestazioni del journal DELETE siano simili a WAL, WAL può aumentare la quantità di scritture dal 10% al 15%.

Validazione

Per convalidare la modalità WAL di compatibilità, eseguire i test CTS dal modulo CtsDatabaseTestCases. I test CTS verificheranno il comportamento previsto quando la compatibilità WAL è abilitata.