O Android 9 apresenta um modo especial de
SQLiteDatabase
chamado de registro de gravação antecipada (WAL) de compatibilidade, que permite que um banco de dados use
journal_mode=WAL
e preserve o comportamento de manter no máximo uma
conexão por banco de dados.
A WAL de compatibilidade é ativada por padrão para o banco de dados de um app, a menos que ele tenha:
- Ativou ou desativou a geração de registros de gravação antecipada chamando
SQLiteDatabase.enableWriteAheadLogging
oudisableWriteAheadLogging
- O modo de diário foi solicitado explicitamente chamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
Ativar o 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 melhorar a velocidade de gravação em quatro vezes.
O WAL de compatibilidade é ativado por padrão e não requer nenhuma implementação adicional.
Desativar o WAL de compatibilidade
Para desativar o modo WAL de compatibilidade, faça uma sobreposição do recurso de configuração db_compatibility_wal_supported
.
Exemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Talvez seja necessário desativar o WAL de compatibilidade em configurações em que o modo de diário do WAL não oferece uma vantagem de desempenho em relação aos modos de diário de rollback tradicionais. Por exemplo, em um sistema de arquivos F2FS, embora o SQLite ofereça suporte a gravações atômicas e o desempenho do journal 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 do CTS no módulo CtsDatabaseTestCases. Os testes do CTS vão verificar o comportamento esperado quando o WAL de compatibilidade estiver ativado.