Logging write-ahead della compatibilità per le app

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

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

  1. Attivazione o disattivazione della registrazione anticipata 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 WAL di compatibilità

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

Ad esempio:

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

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

Convalida

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