Zgodność z logowaniem z wyprzedzeniem w przypadku aplikacji

W Androidzie 9 wprowadzamy specjalny tryb Baza danych SQLite zgodnego z zasadami rejestrowania z wyprzedzeniem (WAL). Pozwala ono journal_mode=WAL z zachowaniem maksymalnie jednego na bazę danych.

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

  1. Włączenie lub wyłączenie logowania z wyprzedzeniem przez wywołanie SQLiteDatabase.enableWriteAheadLogging lub disableWriteAheadLogging
  2. Wyraźnie zażądano trybu dziennika przez wywołanie SQLiteDatabase.OpenParams.setJournalMode(String mode)

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

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

Wyłącz Zgodność WAL

Aby wyłączyć tryb zgodności WAL, nałóż nakładkę db_compatibility_wal_supported config.

Na przykład:

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

Warto wyłączyć zapisywanie WAL zgodności w przypadku konfiguracji, w których tryb dziennika nie zapewnia większej wydajności w porównaniu z tradycyjnym cofnięciem zmian. trybami dziennika. Na przykład w systemie plików F2FS, chociaż SQLite obsługuje niepodzielne zapisy, a wydajność dziennika DELETE jest podobna do WAL, zwiększ liczbę zapisów o 10% do 15%.

Weryfikacja

Aby sprawdzić tryb zgodności WAL, uruchom Testy CTS w module CtsDatabaseTestCases. Testy CTS pozwolą sprawdzić oczekiwaną w sytuacji, gdy włączona jest zgodność WAL.