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 đó:
- Đã 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.enableWriteAheadLogginghoặ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.
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.