Compatibilidade WAL (Write-Ahead Logging) para aplicativos

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:

  1. Ative ou desativou o log de gravação antecipada chamando SQLiteDatabase.enableWriteAheadLogging ou disableWriteAheadLogging
  2. 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.