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

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

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

  1. Включить или отключить упреждающую запись в журнал, вызвав метод SQLiteDatabase.enableWriteAheadLogging или disableWriteAheadLogging.
  2. Режим дневника был явно запрошен с помощью вызова функции 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.