Registro prévio de escrita de compatibilidade para apps

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 para o banco de dados de um app por padrão, a menos que ele tenha:

  1. Ativar ou desativar a geração de registros 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 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 quatro vezes na velocidade de gravação.

O WAL de compatibilidade é ativado por padrão e não requer nenhuma implementação adicional.

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>

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 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 no módulo CtsDatabaseTestCases. Os testes do CTS verificam o comportamento esperado quando o WAL de compatibilidade está ativado.