Android 9 introduit un mode spécial de SQLiteDatabase appelé journalisation WAL (Write-Ahead Logging) de compatibilité, qui permet à une base de données d'utiliser journal_mode=WAL
tout en conservant le comportement de maintien d'une connexion maximale par base de données.
Le mode WAL de compatibilité est activé par défaut pour la base de données d'une application, sauf si l'application :
- Activation ou désactivation de la journalisation préalable en appelant
SQLiteDatabase.enableWriteAheadLogging
oudisableWriteAheadLogging
- Mode journal explicitement demandé en appelant
SQLiteDatabase.OpenParams.setJournalMode(String mode)
L'activation du mode journal WAL peut entraîner une amélioration significative des performances et une réduction du nombre d'écritures. Par exemple, sur un système de fichiers ext4, WAL peut multiplier la vitesse d'écriture par quatre.
La compatibilité WAL est activée par défaut et ne nécessite aucune implémentation supplémentaire.
Désactiver le WAL de compatibilité
Pour désactiver le mode WAL de compatibilité, superposez la ressource de configuration db_compatibility_wal_supported
.
Exemple :
<bool name="db_compatibility_wal_supported">false</bool>
Vous pouvez désactiver le WAL de compatibilité pour les configurations dans lesquelles le mode journal WAL n'offre pas d'avantage en termes de performances par rapport aux modes journal de restauration traditionnels. Par exemple, sur un système de fichiers F2FS, bien que SQLite soit compatible avec les écritures atomiques et que les performances du journal DELETE soient similaires à celles de WAL, WAL peut augmenter le nombre d'écritures de 10 à 15 %.
Validation
Pour valider le mode WAL de compatibilité, exécutez les tests CTS à partir du module CtsDatabaseTestCases. Les tests CTS vérifieront le comportement attendu lorsque Compatibility WAL est activé.