Android 9 führt einen speziellen Modus von SQLiteDatabase namens Compatibility Write-Ahead Logging (WAL) ein, der es einer Datenbank ermöglicht journal_mode=WAL
zu verwenden und gleichzeitig das Verhalten beizubehalten, maximal eine Verbindung pro Datenbank aufrechtzuerhalten.
Kompatibilität WAL ist standardmäßig für die Datenbank einer App aktiviert, es sei denn, die App verfügt über Folgendes:
- Durch Aufrufen von
SQLiteDatabase.enableWriteAheadLogging
disableWriteAheadLogging
haben Sie sich für die Write-Ahead-Protokollierung entschieden oder diese deaktiviert - Explizit angeforderter Journalmodus durch Aufruf von
SQLiteDatabase.OpenParams.setJournalMode(String mode)
Die Aktivierung des WAL-Journalmodus kann zu einer erheblichen Leistungsverbesserung und einer Reduzierung der Schreibvorgänge führen. Beispielsweise kann WAL auf einem ext4-Dateisystem zu einer vierfachen Verbesserung der Schreibgeschwindigkeit führen.
Kompatibilität WAL ist standardmäßig aktiviert und erfordert keine zusätzliche Implementierung.
Deaktivieren Sie die WAL-Kompatibilität
Um den Kompatibilitäts-WAL-Modus zu deaktivieren, überlagern Sie die Konfigurationsressource db_compatibility_wal_supported
.
Zum Beispiel:
<bool name="db_compatibility_wal_supported">false</bool>
Möglicherweise möchten Sie die WAL-Kompatibilität für Konfigurationen deaktivieren, bei denen der WAL-Journalmodus keinen Leistungsvorteil gegenüber herkömmlichen Rollback-Journalmodi bietet. Beispielsweise unterstützt SQLite auf einem F2FS-Dateisystem atomare Schreibvorgänge und die Leistung des DELETE-Journals ähnelt der von WAL, WAL kann jedoch die Anzahl der Schreibvorgänge um 10 bis 15 % erhöhen.
Validierung
Um den Kompatibilitäts-WAL-Modus zu validieren, führen Sie CTS-Tests über das CtsDatabaseTestCases-Modul aus. CTS-Tests überprüfen das erwartete Verhalten, wenn Kompatibilitäts-WAL aktiviert ist.