Android 9 เปิดตัวโหมดพิเศษของ SQLiteDatabase ที่เรียกว่าการบันทึกการเขียนล่วงหน้าเพื่อใช้งานร่วมกัน (WAL) ซึ่งช่วยให้ฐานข้อมูลใช้ journal_mode=WAL
ได้ขณะที่ยังคงรักษาลักษณะการคงการเชื่อมต่อไว้สูงสุด 1 รายการต่อฐานข้อมูล
ระบบจะเปิดใช้ WAL ที่เข้ากันได้สำหรับฐานข้อมูลของแอปโดยค่าเริ่มต้น เว้นแต่แอปจะมีสิ่งต่อไปนี้
- เลือกใช้หรือไม่ใช้การบันทึกการเขียนล่วงหน้าโดยเรียกใช้
SQLiteDatabase.enableWriteAheadLogging
หรือdisableWriteAheadLogging
- โหมดบันทึกที่ขออย่างชัดเจนโดยการเรียกใช้
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 ที่เข้ากันได้