Log write-ahead di compatibilità per le app

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

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

  1. Attivato o disattivato il write-ahead logging chiamando SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. Richiesto esplicitamente la modalità journal chiamando SQLiteDatabase.OpenParams.setJournalMode(String mode)

L'abilitazione 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ò comportare un miglioramento di 4 volte della velocità di scrittura.

Il WAL di compatibilità è abilitato per impostazione predefinita e non richiede implementazioni aggiuntive.

Disattivare il WAL di compatibilità

Per disattivare la modalità WAL di compatibilità, esegui l'overlay della db_compatibility_wal_supported risorsa di configurazione.

Ad esempio:

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

Potresti voler disattivare il WAL di compatibilità per le configurazioni in cui la modalità journal WAL non offre un vantaggio in termini di prestazioni rispetto alle modalità journal 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 il WAL di compatibilità è abilitato.