O Android 9 introduz um modo especial de SQLiteDatabase chamado Compatibility WAL (write-ahead logging) que permite que um banco de dados use journal_mode=WAL
enquanto preserva o comportamento de manter no máximo uma conexão por banco de dados.
Compatibilidade O WAL é habilitado para o banco de dados de um aplicativo por padrão, a menos que o aplicativo tenha:
- Ativar ou desativar o log write-ahead chamando
SQLiteDatabase.enableWriteAheadLogging
oudisableWriteAheadLogging
- Modo de diário solicitado explicitamente chamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
Habilitar o modo de diário do WAL pode levar a uma melhoria significativa no desempenho e redução na quantidade de gravações. Por exemplo, em um sistema de arquivos ext4, o WAL pode levar a uma melhoria de 4x na velocidade de gravação.
Compatibilidade O WAL é ativado por padrão e não requer nenhuma implementação adicional.
Desabilitando a Compatibilidade WAL
Para desabilitar o modo Compatibility WAL, sobreponha o recurso de configuração db_compatibility_wal_supported
.
Por exemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Você pode querer desabilitar a Compatibilidade WAL para configurações onde o modo de diário WAL não fornece uma vantagem de desempenho sobre os modos tradicionais de diário de reversão. Por exemplo, em um sistema de arquivos F2FS, embora o SQLite suporte gravações atômicas e o desempenho do diário DELETE seja semelhante ao WAL, o WAL pode aumentar a quantidade de gravações em 10% a 15%.
Validação
Para validar o modo Compatibilidade WAL, execute os testes CTS do módulo CtsDatabaseTestCases. Os testes CTS verificarão o comportamento esperado quando a Compatibilidade WAL estiver habilitada.