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 está habilitado para o banco de dados de um aplicativo por padrão, a menos que o aplicativo tenha:
- Ative ou desativou o log de gravação antecipada chamando
SQLiteDatabase.enableWriteAheadLogging
oudisableWriteAheadLogging
- Modo de diário explicitamente solicitado chamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
A ativação do modo de diário 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 está habilitado por padrão e não requer nenhuma implementação adicional.
Desativando a Compatibilidade WAL
Para desabilitar o modo WAL de compatibilidade, sobreponha o recurso de configuração db_compatibility_wal_supported
.
Por exemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Convém desabilitar a Compatibilidade WAL para configurações em que o modo de diário WAL não oferece 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 WAL de compatibilidade, execute testes CTS a partir do módulo CtsDatabaseTestCases. Os testes CTS verificarão o comportamento esperado quando a Compatibilidade WAL estiver habilitada.