Compatibilidad WAL (registro de escritura anticipada) para aplicaciones

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 WAL de compatibilidad está habilitada para la base de datos de una aplicación de forma predeterminada, a menos que la aplicación tenga:

  1. Activar o desactivar el registro de escritura anticipada llamando a SQLiteDatabase.enableWriteAheadLogging o disableWriteAheadLogging
  2. Modo de diario solicitado explícitamente llamando a 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.