Android 9 giới thiệu một chế độ đặc biệt của SQLiteDatabase có tên là Ghi nhật ký tương thích trước khi ghi (WAL) 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 tương thích sẽ được bật cho cơ sở dữ liệu của ứng dụng, trừ phi ứng dụng có một trong hai trường hợp sau:
- Chọn sử dụng hoặc không sử dụng tính năng ghi nhật ký trước bằng cách gọi
SQLiteDatabase.enableWriteAheadLogging
hoặcdisableWriteAheadLogging
- 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.
WAL tương thích được bật theo mặc định và không yêu cầu bất kỳ hoạt động triển khai bổ sung nào.
Tắt WAL tương thích
Để tắt chế độ WAL 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 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 thao tác ghi nguyên tử và hiệu suất nhật ký DELETE tương tự như WAL, nhưng WAL có thể tăng số lượng thao tác ghi từ 10% đến 15%.
Xác nhận kết quả
Để xác thực chế độ WAL tương thích, hãy chạy các kiểm thử CTS từ mô-đun CtsDatabaseTestCases. Các bài kiểm thử CTS sẽ xác minh hành vi dự kiến khi bạn bật WAL tương thích.