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

Android 9 เปิดตัวโหมดพิเศษ ฐานข้อมูล SQLite ที่เรียกว่า ความเข้ากันได้กับการเขียนล่วงหน้าการบันทึก (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 จะรองรับ การเขียนแบบอะตอมและประสิทธิภาพของบันทึก "DELETE" คล้ายกับ WAL แต่ WAL สามารถ จะเพิ่มปริมาณการเขียนได้ 10% ถึง 15%

การตรวจสอบความถูกต้อง

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