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:
- Write-Ahead Logging aktiviert oder deaktiviert, indem
SQLiteDatabase.enableWriteAheadLoggingoderdisableWriteAheadLogging - 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.