Android 9 presenta un modo especial de SQLiteDatabase llamado Compatibilidad WAL (registro de escritura anticipada) que permite que una base de datos use journal_mode=WAL
mientras conserva el comportamiento de mantener un máximo de una conexión por base de datos.
La compatibilidad WAL está habilitada para la base de datos de una aplicación de forma predeterminada a menos que la aplicación tenga:
- Activar o desactivar el registro de escritura anticipada llamando a
SQLiteDatabase.enableWriteAheadLogging
odisableWriteAheadLogging
- Modo de diario solicitado explícitamente llamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
Habilitar el modo de diario WAL puede generar una mejora significativa en el rendimiento y una reducción en la cantidad de escrituras. Por ejemplo, en un sistema de archivos ext4, WAL puede llevar a una mejora de 4x en la velocidad de escritura.
La compatibilidad WAL está habilitada de forma predeterminada y no requiere ninguna implementación adicional.
Deshabilitar WAL de compatibilidad
Para deshabilitar el modo WAL de compatibilidad, superponga el recurso de configuración db_compatibility_wal_supported
.
Por ejemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Es posible que desee deshabilitar Compatibilidad WAL para configuraciones en las que el modo de diario WAL no proporciona una ventaja de rendimiento sobre los modos de diario de reversión tradicionales. Por ejemplo, en un sistema de archivos F2FS, aunque SQLite admite escrituras atómicas y el rendimiento del diario DELETE es similar a WAL, WAL puede aumentar la cantidad de escrituras entre un 10 % y un 15 %.
Validación
Para validar el modo WAL de compatibilidad, ejecute pruebas CTS desde el módulo CtsDatabaseTestCases. Las pruebas de CTS verificarán el comportamiento esperado cuando la Compatibilidad WAL esté habilitada.