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