Ghi trước nhật ký tương thích cho ứng dụng

Android 9 giới thiệu một chế độ đặc biệt của SQLiteDatabase có tên là Ghi nhật ký trước khi ghi (WAL) về khả năng tương thích. Chế độ này cho phép cơ sở dữ liệu sử dụng journal_mode=WAL trong khi vẫn giữ nguyên hành vi duy trì tối đa một kết nối cho mỗi cơ sở dữ liệu.

Theo mặc định, WAL về khả năng tương thích được bật cho cơ sở dữ liệu của ứng dụng, trừ phi ứng dụng đó:

  1. Đã chọn tham gia hoặc không tham gia ghi nhật ký trước khi ghi bằng cách gọi SQLiteDatabase.enableWriteAheadLogging hoặc disableWriteAheadLogging
  2. Đã yêu cầu rõ ràng chế độ nhật ký bằng cách gọi SQLiteDatabase.OpenParams.setJournalMode(String mode)

Việc bật chế độ nhật ký WAL có thể giúp cải thiện đáng kể hiệu suất và giảm số lượng lượt ghi. Ví dụ: trên hệ thống tệp ext4, WAL có thể giúp cải thiện tốc độ ghi gấp 4 lần.

Theo mặc định, WAL về khả năng tương thích được bật và không yêu cầu triển khai thêm.

Tắt WAL về khả năng tương thích

Để tắt chế độ WAL về khả năng tương thích, hãy phủ lên tài nguyên cấu hình db_compatibility_wal_supported.

Ví dụ:

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

Bạn có thể muốn tắt WAL về khả năng tương thích cho các cấu hình mà chế độ nhật ký WAL không mang lại lợi thế về hiệu suất so với các chế độ nhật ký khôi phục truyền thống. Ví dụ: trên hệ thống tệp F2FS, mặc dù SQLite hỗ trợ các lượt ghi nguyên tử và hiệu suất nhật ký XÓA tương tự như WAL, nhưng WAL có thể làm tăng số lượng lượt ghi từ 10% đến 15%.

Xác nhận kết quả

Để xác thực chế độ WAL về khả năng tương thích, hãy chạy các bài kiểm tra CTS từ mô-đun CtsDatabaseTestCases. Các bài kiểm tra CTS sẽ xác minh hành vi dự kiến khi WAL về khả năng tương thích được bật.