В Android 9 представлен специальный режим SQLiteDatabase , называемый журналированием упреждающей записи совместимости (WAL), который позволяет базе данных использовать journal_mode=WAL
, сохраняя при этом поведение, сохраняющее максимум одно соединение на базу данных.
Совместимость WAL включена для базы данных приложения по умолчанию, если только приложение не имеет:
- Включите или отключите ведение журнала упреждающей записи, вызвав
SQLiteDatabase.enableWriteAheadLogging
илиdisableWriteAheadLogging
- Явно запрошенный режим журнала путем вызова
SQLiteDatabase.OpenParams.setJournalMode(String mode)
Включение режима журнала WAL может привести к значительному повышению производительности и уменьшению количества операций записи. Например, в файловой системе ext4 WAL может привести к увеличению скорости записи в 4 раза.
Совместимость WAL включена по умолчанию и не требует дополнительной реализации.
Отключить совместимость WAL
Чтобы отключить режим совместимости 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.