Kompatibilitäts-Write-Ahead-Protokollierung für Apps

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:

  1. Durch Aufrufen von SQLiteDatabase.enableWriteAheadLogging disableWriteAheadLogging haben Sie sich für die Write-Ahead-Protokollierung entschieden oder diese deaktiviert
  2. 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.