앱의 Compatibility WAL(Write-Ahead Logging)

Android 9에는 Compatibility WAL(Write-Ahead Logging)이라는 특수한 SQLiteDatabase 모드가 도입되어, 데이터베이스에서 journal_mode=WAL을 사용하면서 데이터베이스당 최대 1개의 연결 유지 동작을 유지할 수 있습니다.

애플리케이션이 다음과 같지 않은 경우 Compatibility WAL은 기본적으로 애플리케이션의 데이터베이스에 사용하도록 설정됩니다.

  1. SQLiteDatabase.enableWriteAheadLogging 또는 disableWriteAheadLogging을 호출하여 WAL(Write-Ahead Logging)을 선택 또는 선택 해제
  2. 다음을 호출하여 저널 모드를 명시적으로 요청: SQLiteDatabase.OpenParams.setJournalMode(String mode)

WAL 저널 모드를 사용 설정하면 성능이 크게 향상되고 쓰는 양이 줄어듭니다. 예를 들어, ext4 파일 시스템에서 WAL을 사용하면 쓰기 속도가 4배 향상될 수 있습니다.

Compatibility WAL은 기본적으로 사용 설정되며 추가 구현이 필요하지 않습니다.

Compatibility WAL 사용 중지

Compatibility WAL 모드를 사용 중지하려면 db_compatibility_wal_supported 구성 리소스를 오버레이합니다.

예:

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

WAL 저널 모드가 기존 롤백 저널 모드보다 더 큰 성능 이점을 제공하지 않는 구성의 경우 Compatibility WAL을 사용 중지할 수 있습니다. 예를 들어 F2FS 파일 시스템의 경우 SQLite가 원자 쓰기를 지원하고 DELETE 저널 성능이 WAL과 비슷하지만 WAL은 쓰기 양을 10%~15%까지 늘릴 수 있습니다.

유효성 검사

Compatibility WAL 모드를 확인하려면 CtsDatabaseTestCases 모듈에서 CTS 테스트를 실행합니다. Compatibility WAL이 사용 설정되면 CTS 테스트에서는 예상되는 동작을 확인합니다.