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

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

ความเข้ากันได้ 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 จะรองรับการเขียนแบบอะตอมมิกและประสิทธิภาพของเจอร์นัล DELETE จะคล้ายกับ WAL แต่ WAL ก็สามารถเพิ่มจำนวนการเขียนได้ 10% ถึง 15%

การตรวจสอบ

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