Write-Ahead-Logging für die Kompatibilität von Apps

In Android 9 wird ein spezieller Modus von SQLiteDatabase eingeführt, der als Compatibility Write-Ahead Logging (WAL) bezeichnet wird. Damit kann eine Datenbank journal_mode=WAL verwenden, während das Verhalten beibehalten wird, dass maximal eine Verbindung pro Datenbank besteht.

Das Compatibility-WAL ist für die Datenbank einer App standardmäßig aktiviert, es sei denn, die App hat:

  1. Write-Ahead-Logging durch Aufrufen von SQLiteDatabase.enableWriteAheadLogging oder disableWriteAheadLogging aktiviert oder deaktiviert
  2. Der Journalmodus wurde explizit durch Aufrufen von SQLiteDatabase.OpenParams.setJournalMode(String mode) angefordert.

Das Aktivieren des WAL-Journalmodus kann zu einer erheblichen Leistungssteigerung und einer Reduzierung der Anzahl der Schreibvorgänge führen. Bei einem ext4-Dateisystem kann WAL beispielsweise zu einer viermal schnelleren Schreibgeschwindigkeit führen.

Das Compatibility-WAL ist standardmäßig aktiviert und erfordert keine zusätzliche Implementierung.

Kompatibilitäts-WAL deaktivieren

Wenn Sie den WAL-Kompatibilitätsmodus deaktivieren möchten, überschreiben Sie die Konfigurationsressource db_compatibility_wal_supported.

Beispiel:

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

Möglicherweise möchten Sie den Kompatibilitäts-WAL für Konfigurationen deaktivieren, in denen der WAL-Journalmodus keinen Leistungsvorteil gegenüber herkömmlichen Rollback-Journalmodi bietet. Auf einem F2FS-Dateisystem unterstützt SQLite beispielsweise zwar atomare Schreibvorgänge und die Leistung des DELETE-Journals ist ähnlich wie bei WAL, aber WAL kann die Anzahl der Schreibvorgänge um 10% bis 15 % erhöhen.

Zertifizierungsstufe

Um den WAL-Modus für die Kompatibilität zu validieren, führen Sie CTS-Tests aus dem Modul „CtsDatabaseTestCases“ aus. CTS-Tests prüfen das erwartete Verhalten, wenn Compatibility WAL aktiviert ist.