Log write-ahead di compatibilità per le app

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:

  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'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.