Zgodność z logowaniem z wyprzedzeniem w przypadku aplikacji

Android 9 wprowadza specjalny tryb SQLiteDatabase o nazwie Compatibility write-ahead logging (WAL), który umożliwia bazie danych korzystanie z journal_mode=WAL przy zachowaniu zachowania polegającego na zachowywaniu maksymalnie jednego połączenia na bazę danych.

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

  1. Włączanie i wyłączanie logowania z wyprzedzeniem przez wywołanie funkcji SQLiteDatabase.enableWriteAheadLogging lub disableWriteAheadLogging
  2. Bezpośrednie żądanie trybu dziennika przez wywołanie metody 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 WAL może 4-krotnie zwiększyć szybkość zapisu.

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

Wyłączanie WAL zgodności

Aby wyłączyć tryb WAL zgodności, 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 przypadku konfiguracji, w których tryb dziennika WAL nie zapewnia przewagi pod względem wydajności w porównaniu z tradycyjnymi trybami dziennika. Na przykład w systemie plików F2FS, mimo że SQLite obsługuje operacje zapisu atomowego, a wydajność dziennika DELETE jest podobna do dziennika WAL, dziennik WAL może zwiększyć liczbę zapisów o 10–15%.

Weryfikacja

Aby sprawdzić tryb Compatibility WAL, uruchom testy CTS z modułu CtsDatabaseTestCases. Testy CTS weryfikują oczekiwane działanie po włączeniu trybu zgodności WAL.