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