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.
W przypadku bazy danych aplikacji domyślnie włączona jest kompatybilna wersja WAL, chyba że aplikacja ma:
- Włączenie lub wyłączenie logowania z wyprzedzeniem przez wywołanie funkcji
SQLiteDatabase.enableWriteAheadLogging
lubdisableWriteAheadLogging
- 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 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łącz Zgodność WAL
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>
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 polecenie Testy CTS w module CtsDatabaseTestCases. Testy CTS będą sprawdzać oczekiwane działanie, gdy włączona jest opcja Compatibility WAL.