Log write-ahead di compatibilità per le app

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

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

  1. Attiva o disattiva il logging write-ahead chiamando SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. 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 Compatibilità WAL

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

Ad esempio:

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

Ti consigliamo di disattivare il WAL di compatibilità per le configurazioni in cui il WAL la modalità journal non offre un vantaggio in termini di prestazioni rispetto al rollback tradizionale. modalità diario. Ad esempio, su un file system F2FS, anche se SQLite supporta le scritture atomiche e le prestazioni del log DELETE sono simili a quelle del WAL, il WAL può aumentare la quantità di scritture dal 10% al 15%.

Convalida

Per convalidare la modalità WAL di compatibilità, esegui Test CCT dal modulo CtsDatabaseTestCases. I test CTS verificheranno il comportamento previsto quando è attivata la WAL di compatibilità.