Registro de gravação antecipada de compatibilidade para aplicativos

O Android 9 introduz um modo especial de SQLiteDatabase chamado Compatibility write-ahead logging (WAL), 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. Optou ou não pelo log write-ahead chamando SQLiteDatabase.enableWriteAheadLogging ou disableWriteAheadLogging
  2. Modo de diário solicitado explicitamente chamando SQLiteDatabase.OpenParams.setJournalMode(String mode)

Ativar o 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.

Desativar compatibilidade WAL

Para desativar o modo Compatibilidade WAL, sobreponha o recurso de configuração db_compatibility_wal_supported .

Por exemplo:

<bool name="db_compatibility_wal_supported">false</bool>

Talvez você queira desabilitar o WAL de compatibilidade para configurações em que o modo de diário do WAL não oferece uma vantagem de desempenho em relação aos modos de diário de reversão tradicionais. 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 Compatibilidade WAL, execute testes CTS do módulo CtsDatabaseTestCases. Os testes CTS verificarão o comportamento esperado quando o Compatibility WAL estiver habilitado.