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

В 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>

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

Проверка

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