Registro prévio de escrita de compatibilidade para apps

O Android 9 apresenta um modo especial de SQLiteDatabase (em inglês) chamado Registro prévio de escrita (WAL) de compatibilidade, que permite que um banco de dados use journal_mode=WAL preservando o comportamento de manter no máximo um 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 um dos seguintes:

  1. Ativar ou desativar o registro de gravação antecipada chamando SQLiteDatabase.enableWriteAheadLogging ou disableWriteAheadLogging
  2. Modo de diário 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 db_compatibility_wal_supported config.

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 gravações atômicas e o desempenho do diário DELETE é semelhante ao do WAL, ele 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 quando o WAL de compatibilidade estiver ativado.