การบันทึกการเขียนล่วงหน้าเพื่อตรวจสอบความเข้ากันได้สำหรับแอป

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

ระบบจะเปิดใช้ WAL ที่เข้ากันได้กับฐานข้อมูลของแอปโดยค่าเริ่มต้น เว้นแต่แอปจะมีสิ่งต่อไปนี้

  1. เลือกใช้หรือไม่ใช้การบันทึกการเขียนล่วงหน้าโดยการเรียก SQLiteDatabase.enableWriteAheadLogging หรือ disableWriteAheadLogging
  2. โหมดบันทึกที่ขออย่างชัดเจนโดยการเรียกใช้ 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 จะรองรับการเขียนแบบอะตอมมิกและประสิทธิภาพของบันทึกการลบจะคล้ายกับ WAL แต่ WAL ก็สามารถเพิ่มจำนวนการเขียนได้ 10% ถึง 15%

การตรวจสอบ

หากต้องการตรวจสอบโหมด WAL ที่เข้ากันได้ ให้เรียกใช้ การทดสอบ CTS จากโมดูล CtsDatabaseTestCases การทดสอบ CTS จะยืนยันลักษณะการทำงานที่คาดไว้เมื่อเปิดใช้ WAL ความเข้ากันได้