اندروید ۹ حالت خاصی از SQLiteDatabase به نام Compatibility write-ahead logging (WAL) را معرفی میکند که به یک پایگاه داده اجازه میدهد journal_mode=WAL استفاده کند و در عین حال رفتار حفظ حداکثر یک اتصال برای هر پایگاه داده را حفظ کند.
سازگاری WAL به طور پیشفرض برای پایگاه داده یک برنامه فعال است، مگر اینکه برنامه یکی از موارد زیر را داشته باشد:
- با فراخوانی
SQLiteDatabase.enableWriteAheadLoggingیاdisableWriteAheadLoggingثبت وقایع از پیش نوشته شده را فعال یا غیرفعال کنید. - با فراخوانی
SQLiteDatabase.OpenParams.setJournalMode(String mode)به طور صریح حالت ژورنال درخواست شد.
فعال کردن حالت ژورنال WAL میتواند منجر به بهبود قابل توجه عملکرد و کاهش میزان نوشتن شود. به عنوان مثال، در یک سیستم فایل ext4، WAL میتواند منجر به بهبود ۴ برابری سرعت نوشتن شود.
سازگاری WAL به طور پیشفرض فعال است و نیازی به پیادهسازی اضافی ندارد.
غیرفعال کردن سازگاری WAL
برای غیرفعال کردن حالت Compatibility WAL، منبع پیکربندی db_compatibility_wal_supported را overlay کنید.
برای مثال:
<bool name="db_compatibility_wal_supported">false</bool>
ممکن است بخواهید Compatibility WAL را برای پیکربندیهایی که حالت ژورنال WAL مزیت عملکردی نسبت به حالتهای ژورنال rollback سنتی ارائه نمیدهد، غیرفعال کنید. برای مثال، در یک سیستم فایل F2FS، اگرچه SQLite از نوشتنهای اتمی پشتیبانی میکند و عملکرد ژورنال DELETE مشابه WAL است، WAL میتواند میزان نوشتنها را 10 تا 15 درصد افزایش دهد.
اعتبارسنجی
برای اعتبارسنجی حالت Compatibility WAL، تستهای CTS را از ماژول CtsDatabaseTestCases اجرا کنید. تستهای CTS رفتار مورد انتظار را هنگام فعال بودن Compatibility WAL تأیید میکنند.