Kompatibilitäts-Write-Ahead-Logging für Anwendungen

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 weiterhin maximal eine Verbindung pro Datenbank beibehalten wird.

Kompatibilitäts-WAL ist standardmäßig für die Datenbank einer Anwendung aktiviert, es sei denn, die Anwendung hat:

  1. Sie haben das Write-Ahead-Logging aktiviert oder deaktiviert, indem Sie SQLiteDatabase.enableWriteAheadLogging oder disableWriteAheadLogging aufgerufen haben.
  2. Durch expliziten Aufruf von SQLiteDatabase.OpenParams.setJournalMode(String mode) wurde der Journalmodus angefordert.

Das Aktivieren des WAL-Journal-Modus kann zu einer deutlichen Leistungssteigerung und einer Verringerung der Anzahl der Schreibvorgänge führen. Bei einem ext4-Dateisystem kann WAL beispielsweise zu einer 4-fachen Verbesserung der Schreibgeschwindigkeit führen.

Die WAL für die Kompatibilität ist standardmäßig aktiviert und erfordert keine zusätzliche Implementierung.

Kompatibilitäts-WAL deaktivieren

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

Beispiel:

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

Sie können den WAL-Kompatibilitätsmodus für Konfigurationen deaktivieren, in denen der WAL-Journalmodus keinen Leistungsvorteil gegenüber herkömmlichen Rollback-Journalmodi bietet. Beispielsweise kann WAL die Anzahl der Schreibvorgänge in einem F2FS-Dateisystem um 10 bis 15 % erhöhen, obwohl SQLite atomare Schreibvorgänge unterstützt und die Leistung des DELETE-Journals der von WAL ähnelt.

Zertifizierungsstufe

Führen Sie zum Validieren des WAL-Modus für die Kompatibilität CTS-Tests aus dem Modul „CtsDatabaseTestCases“ aus. Mit CTS-Tests wird das erwartete Verhalten überprüft, wenn die WAL-Kompatibilität aktiviert ist.