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:
- Write-Ahead-Logging durch Aufrufen von
SQLiteDatabase.enableWriteAheadLogging
oderdisableWriteAheadLogging
aktiviert oder deaktiviert - 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.