يقدّم نظام التشغيل Android 9 وضعًا خاصًا لمحاولة تسجيل SQLiteDatabase
يُعرف باسم "تسجيل الكتابة المسبقة للتوافق" (WAL) الذي يسمح لقاعدة بيانات باستخدام
journal_mode=WAL
مع الحفاظ على سلوك الاحتفاظ بحد أقصى بمحاولة تسجيل
اتصال واحد لكل قاعدة بيانات.
يكون "السجلّ الإداري للتوافق" مفعَّلاً تلقائيًا لقاعدة بيانات التطبيق ما لم يكن التطبيق يتضمّن أيًا مما يلي:
- تفعيل ميزة "التسجيل المُسبَق للكتابة" أو إيقافها من خلال الطلب
SQLiteDatabase.enableWriteAheadLogging
أوdisableWriteAheadLogging
- تم طلب وضع السجلّ صراحةً من خلال الاتصال
SQLiteDatabase.OpenParams.setJournalMode(String mode)
يمكن أن يؤدي تفعيل وضع دفتر يوميات WAL إلى تحسين ملف إنجاز هائل في الأداء وتقليل كمية عمليات الكتابة. على سبيل المثال، في نظام الملفات ext4 ، يمكن أن يؤدي WAL إلى تحسين سرعة الكتابة بمقدار 4 مرات.
يكون "ملف أرشيف النسخ الاحتياطي المتوافق" مفعَّلاً تلقائيًا ولا يتطلّب أي تنفيذ إضافي.
إيقاف ملف السجلّ الإداري للتوافق
لإيقاف وضع WAL للتوافق، يمكنك تراكب مورد الإعدادات
db_compatibility_wal_supported
.
مثلاً:
<bool name="db_compatibility_wal_supported">false</bool>
قد تحتاج إلى إيقاف "ملف أرشيف السجلّات للتوافق" للإعدادات التي لا يقدّم فيها وضع ملف أرشيف السجلّات أداءً أفضل من أوضاع ملف أرشيف السجلّات التقليدية للرجوع. على سبيل المثال، في نظام ملفات F2FS، على الرغم من أنّ SQLite يتيح الكتابة الذرّية وأداء دفتر يوميات DELETE مشابه لأداء WAL، يمكن أن يؤدي WAL إلى زيادة مقدار عمليات الكتابة بنسبة تتراوح بين% 10 و%15.
التحقُّق
للتحقّق من صحة وضع WAL للتوافق، يمكنك تنفيذ اختبارات CTS من وحدة CtsDatabaseTestCases. ستحدّد اختبارات CTS السلوك المتوقع عند تفعيل "ملف السجلّ الإداري للتوافق".