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

В Android 9 представлен специальный режим SQLiteDatabase , называемый Compatibility write-ahead logging (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.