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

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

Протокол Wi-Fi совместимости (Compatibility WAL) включен для базы данных приложения по умолчанию, если только приложение не имеет одного из следующих условий:

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

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

Функция Compatibility 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.