Совместимость WAL (ведение журнала с опережающей записью) для приложений

В Android 9 представлен специальный режим SQLiteDatabase под названием Compatibility WAL (ведение журнала с опережающей записью), который позволяет базе данных использовать journal_mode=WAL , сохраняя при этом максимум одно соединение для каждой базы данных.

Совместимость WAL включена для базы данных приложения по умолчанию, если приложение не имеет:

  1. Включите или отключите ведение журнала с упреждающей записью, вызвав SQLiteDatabase.enableWriteAheadLogging или disableWriteAheadLogging
  2. Явно запрошенный режим журнала путем вызова SQLiteDatabase.OpenParams.setJournalMode(String mode)

Включение режима журнала WAL может привести к значительному повышению производительности и снижению количества операций записи. Например, в файловой системе ext4 WAL может привести к увеличению скорости записи в 4 раза.

Совместимость WAL включена по умолчанию и не требует дополнительной реализации.

Отключение совместимости WAL

Чтобы отключить режим совместимости WAL, наложите ресурс конфигурации db_compatibility_wal_supported .

Например:

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

Вы можете отключить Compatibility WAL для конфигураций, в которых режим журнала WAL не обеспечивает преимущества в производительности по сравнению с традиционными режимами журнала отката. Например, в файловой системе F2FS, хотя SQLite поддерживает атомарную запись, а производительность журнала DELETE аналогична WAL, WAL может увеличить количество операций записи на 10–15 %.

Проверка

Чтобы проверить режим Compatibility WAL, запустите тесты CTS из модуля CtsDatabaseTestCases. Тесты CTS проверят ожидаемое поведение при включении Compatibility WAL.