Zapisywanie logów z wyprzedzeniem w przypadku aplikacji

Android 9 wprowadza specjalny tryb SQLiteDatabase o nazwie Zgodne logowanie wyprzedzające (WAL), który umożliwia bazie danych korzystanie z journal_mode=WAL przy zachowaniu maksymalnie jednego połączenia na bazę danych.

Tryb WAL zgodności jest domyślnie włączony w bazie danych aplikacji, chyba że:

  1. Włączanie i wyłączanie logowania z wyprzedzeniem przez wywołanie funkcji SQLiteDatabase.enableWriteAheadLogging lub disableWriteAheadLogging.
  2. Tryb dziennika został wyraźnie zażądany przez wywołanie SQLiteDatabase.OpenParams.setJournalMode(String mode)

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

Dziennik WAL zgodności jest domyślnie włączony i nie wymaga dodatkowej implementacji.

Wyłącz zgodny WAL

Aby wyłączyć tryb zgodności WAL, nałóż zasób konfiguracji db_compatibility_wal_supported.

Na przykład:

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

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

Weryfikacja

Aby sprawdzić tryb WAL zgodności, uruchom testy CTS z modułu CtsDatabaseTestCases. Testy CTS sprawdzą oczekiwane działanie, gdy włączona jest zgodność WAL.