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=WALverwenden, während das Verhalten beibehalten wird, maximal eine Verbindung pro Datenbank zu verwenden.

Compatibility WAL ist standardmäßig für die Datenbank einer App aktiviert, es sei denn, die App hat eine der folgenden Optionen:

  1. Write-Ahead Logging aktiviert oder deaktiviert, indem SQLiteDatabase.enableWriteAheadLogging oder disableWriteAheadLogging
  2. Den Journalmodus explizit angefordert, indem SQLiteDatabase.OpenParams.setJournalMode(String mode) aufgerufen wurde

Das Aktivieren des WAL-Journalmodus kann zu einer erheblichen Leistungssteigerung und einer Reduzierung der Anzahl der Schreibvorgänge führen. Auf einem ext4-Dateisystem kann WAL beispielsweise die Schreibgeschwindigkeit um das Vierfache verbessern.

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

Compatibility WAL deaktivieren

Wenn Sie den Compatibility WAL-Modus deaktivieren möchten, überschreiben Sie die db_compatibility_wal_supported Konfigurationsressource.

Beispiel:

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

Sie können Compatibility WAL für Konfigurationen deaktivieren, bei denen der WAL-Journalmodus keinen Leistungsvorteil gegenüber herkömmlichen Rollback-Journalmodi bietet. Auf einem F2FS-Dateisystem unterstützt SQLite beispielsweise 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

Wenn Sie den Compatibility WAL-Modus validieren möchten, führen Sie CTS-Tests aus dem Modul CtsDatabaseTestCases aus. Bei den CTS-Tests wird das erwartete Verhalten überprüft, wenn Compatibility WAL aktiviert ist.