O Android 9 apresenta um modo especial de
SQLiteDatabase
chamado Registro de gravação antecipada (WAL, na sigla em inglês) 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.
O WAL de compatibilidade é ativado por padrão para o banco de dados de um app, a menos que o app tenha:
- Aceitado ou recusado o registro de gravação antecipada chamando
SQLiteDatabase.enableWriteAheadLoggingoudisableWriteAheadLogging - Solicitado explicitamente o modo de registro chamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
A ativação do modo de registro WAL pode levar a uma melhoria significativa no desempenho e na redução da quantidade de gravações. Por exemplo, em um sistema de arquivos ext4, o WAL pode levar a uma melhoria de 4 vezes na velocidade de gravação.
O WAL de compatibilidade é ativado por padrão e não exige implementação adicional.
Desativar o WAL de compatibilidade
Para desativar o modo WAL de compatibilidade, sobreponha o
db_compatibility_wal_supported
recurso de configuração.
Exemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Talvez você queira desativar o WAL de compatibilidade para configurações em que o modo de registro WAL não oferece uma vantagem de desempenho em relação aos modos de registro de reversão tradicionais. Por exemplo, em um sistema de arquivos F2FS, embora o SQLite ofereça suporte a gravações atômicas e o desempenho do registro 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 do módulo CtsDatabaseTestCases. Os testes CTS vão verificar o comportamento esperado quando o WAL de compatibilidade estiver ativado.