O Android 9 apresenta um modo especial de
SQLiteDatabase
chamado registro prévio de escrita (WAL) de compatibilidade 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.
O WAL de compatibilidade é ativado por padrão para o banco de dados de um app, a menos que o app tem uma das seguintes opções:
- Ativar ou desativar o registro de gravação antecipada chamando
SQLiteDatabase.enableWriteAheadLogging
oudisableWriteAheadLogging
- Modo de registro solicitado explicitamente chamando
SQLiteDatabase.OpenParams.setJournalMode(String mode)
.
Ativar o modo de registro do WAL pode melhorar bastante a desempenho e redução na quantidade de gravações. Por exemplo, em um ext4 o WAL pode melhorar em quatro vezes a velocidade de gravação.
O WAL de compatibilidade é ativado por padrão e não requer implementação.
Desativar WAL de compatibilidade
Para desativar o modo WAL de compatibilidade, sobreponha o
recurso de configuração
db_compatibility_wal_supported
.
Exemplo:
<bool name="db_compatibility_wal_supported">false</bool>
Desative o WAL de compatibilidade para configurações em que o WAL não tem uma vantagem de desempenho em relação à reversão tradicional modos de diário. Por exemplo, em um sistema de arquivos F2FS, embora o SQLite ofereça suporte a 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 do módulo CtsDatabaseTestCases. Os testes do CTS vão verificar o comportamento esperado quando o WAL de compatibilidade estiver ativado.