اندروید 9 حالت خاصی از SQLiteDatabase به نام Compatibility write-ahead logging (WAL) را معرفی می کند که به پایگاه داده اجازه می دهد تا journal_mode=WAL
استفاده کند و در عین حال رفتار حفظ حداکثر یک اتصال در هر پایگاه داده را حفظ کند.
سازگاری WAL به طور پیش فرض برای پایگاه داده برنامه فعال است، مگر اینکه برنامه یکی از موارد زیر را داشته باشد:
- با فراخوانی
SQLiteDatabase.enableWriteAheadLogging
یاdisableWriteAheadLogging
از ورود یا عدم ورود به سیستم پیش از نوشتن - با فراخوانی
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 اجرا کنید. هنگامی که Compatibility WAL فعال باشد، تستهای CTS رفتار مورد انتظار را تأیید میکنند.