Rejestrowanie zapisu z wyprzedzeniem dla aplikacji

W systemie Android 9 wprowadzono specjalny tryb bazy danych SQLiteDatabase o nazwie Rejestrowanie z wyprzedzeniem zgodności (WAL), który umożliwia bazie danych użycie journal_mode=WAL przy jednoczesnym zachowaniu zachowania polegającego na utrzymywaniu maksymalnie jednego połączenia na bazę danych.

Zgodność WAL jest domyślnie włączona dla bazy danych aplikacji, chyba że aplikacja ma:

  1. Włączono lub wyłączono rejestrowanie z wyprzedzeniem, wywołując metodę SQLiteDatabase.enableWriteAheadLogging lub disableWriteAheadLogging
  2. Jawnie zażądano trybu dziennika, wywołując SQLiteDatabase.OpenParams.setJournalMode(String mode)

Włączenie trybu dziennika WAL może prowadzić do znacznej poprawy wydajności i zmniejszenia ilości zapisów. Na przykład w systemie plików ext4 WAL może prowadzić do 4-krotnej poprawy szybkości zapisu.

Zgodność WAL jest domyślnie włączona i nie wymaga żadnej dodatkowej implementacji.

Wyłącz kompatybilność WAL

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

Na przykład:

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

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

Walidacja

Aby sprawdzić tryb Compatibility WAL, uruchom testy CTS z modułu CtsDatabaseTestCases. Testy CTS zweryfikują oczekiwane zachowanie, gdy włączona jest zgodność WAL.