Zapisywanie logów z wyprzedzeniem w przypadku aplikacji

Android 9 wprowadza specjalny tryb o nazwie Compatibility write-ahead logging (WAL), który umożliwia bazie danych używanie journal_mode=WAL przy zachowaniu maksymalnie jednego połączenia z bazą danych.

Tryb Compatibility WAL jest domyślnie włączony w przypadku bazy danych aplikacji, chyba że aplikacja:

  1. włączyła lub wyłączyła tryb write-ahead logging, wywołując SQLiteDatabase.enableWriteAheadLogging lub disableWriteAheadLogging
  2. wyraźnie zażądała trybu dziennika, wywołując SQLiteDatabase.OpenParams.setJournalMode(String mode)

Włączenie trybu dziennika WAL może znacznie zwiększyć wydajność i zmniejszyć liczbę zapisów. Na przykład w systemie plików ext4 tryb WAL może 4-krotnie zwiększyć szybkość zapisu.

Tryb Compatibility WAL jest domyślnie włączony i nie wymaga dodatkowej implementacji.

Wyłączanie trybu Compatibility WAL

Aby wyłączyć tryb Compatibility WAL, nałóż db_compatibility_wal_supported zasób konfiguracyjny.

Przykład:

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

Możesz wyłączyć tryb Compatibility WAL w konfiguracjach, w których tryb dziennika WAL nie zapewnia przewagi wydajnościowej nad tradycyjnymi trybami dziennika wycofywania. Na przykład w systemie plików F2FS, chociaż SQLite obsługuje zapisy atomowe, a wydajność dziennika DELETE jest podobna do WAL, tryb WAL może zwiększyć liczbę zapisów o 10–15%.

Weryfikacja

Aby zweryfikować tryb Compatibility WAL, uruchom testy CTS z modułu CtsDatabaseTestCases. Testy CTS sprawdzą oczekiwane działanie, gdy tryb Compatibility WAL jest włączony.