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 zachowaniu maksymalnie 1 połączenia na bazę danych.
W domyślnych ustawieniach aplikacji baza danych jest zgodna z formatem WAL, chyba że aplikacja ma:
- Włączenie lub wyłączenie logowania z wyprzedzeniem przez wywołanie funkcji
SQLiteDatabase.enableWriteAheadLogging
lubdisableWriteAheadLogging
- Tryb dziennika został wyraźnie wywołany przez funkcję
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.
Kompatybilny WAL jest włączony domyślnie 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 WAL zgodności 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ć ilość zapisów o 10–15%.
Weryfikacja
Aby sprawdzić tryb Compatibility WAL, uruchom testy CTS z modułu CtsDatabaseTestCases. Testy CTS sprawdzają, czy zachowanie jest zgodne z oczekiwanym, gdy włączona jest opcja Compatibility WAL.