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:
- Włączono lub wyłączono rejestrowanie z wyprzedzeniem, wywołując metodę
SQLiteDatabase.enableWriteAheadLogging
lubdisableWriteAheadLogging
- 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.