В Android 9 появился специальный режим SQLiteDatabase, который называется "Совместимость с упреждающей записью" (WAL). Он позволяет базе данных использовать journal_mode=WAL, сохраняя при этом поведение, при котором поддерживается максимум одно подключение на базу данных.
Режим совместимости WAL включен для базы данных приложения по умолчанию, если только приложение не:
- Включить или отключить упреждающую запись в журнал, вызвав метод
SQLiteDatabase.enableWriteAheadLoggingилиdisableWriteAheadLogging. - Режим дневника был явно запрошен с помощью вызова функции
SQLiteDatabase.OpenParams.setJournalMode(String mode).
Включение режима журнала WAL может значительно повысить производительность и сократить количество операций записи. Например, в файловой системе ext4 использование WAL может привести к четырехкратному увеличению скорости записи.
Режим совместимости WAL включен по умолчанию и не требует дополнительной реализации.
Как отключить Compatibility WAL
Чтобы отключить режим Compatibility WAL, переопределите ресурс конфигурации db_compatibility_wal_supported.
Пример:
<bool name="db_compatibility_wal_supported">false</bool>
Вы можете отключить режим совместимости WAL для конфигураций, в которых режим журнала WAL не обеспечивает преимущества в производительности по сравнению с традиционными режимами журнала отката. Например, в файловой системе F2FS, хотя SQLite поддерживает атомарные записи и производительность журнала DELETE аналогична WAL, WAL может увеличить количество записей на 10–15 %.
Проверка
Чтобы проверить режим совместимости WAL, запустите тесты CTS из модуля CtsDatabaseTestCases. Тесты CTS проверяют ожидаемое поведение при включенном режиме совместимости WAL.