ב-Android 9 נוסף מצב מיוחד של SQLiteDatabase שנקרא Compatibility write-ahead logging (WAL), שמאפשר למסד נתונים להשתמש ב-journal_mode=WAL
תוך שמירה על ההתנהגות של שמירת חיבור אחד לכל היותר לכל מסד נתונים.
כברירת מחדל, WAL לתאימות מופעל במסד הנתונים של האפליקציה, אלא אם האפליקציה כוללת:
- הבעת הסכמה או ביטול הסכמה לתיעוד ביומן מראש באמצעות קריאה ל-
SQLiteDatabase.enableWriteAheadLogging
או ל-disableWriteAheadLogging
- בקשה מפורשת למצב יומן על ידי קריאה ל-
SQLiteDatabase.OpenParams.setJournalMode(String mode)
הפעלת מצב היומן של WAL יכולה להוביל לשיפור משמעותי בביצועים ולצמצום כמות הכתיבה. לדוגמה, במערכת קבצים מסוג ext4, השימוש ב-WAL יכול להוביל לשיפור של פי 4 במהירות הכתיבה.
תאימות WAL מופעלת כברירת מחדל ולא נדרשת הטמעה נוספת.
השבתת Compatibility WAL
כדי להשבית את מצב WAL של התאימות, צריך להוסיף שכבה על משאב התצורה db_compatibility_wal_supported
.
לדוגמה:
<bool name="db_compatibility_wal_supported">false</bool>
מומלץ להשבית את Compatibility WAL בהגדרות שבהן מצב היומן של WAL לא מספק יתרון בביצועים על פני מצבי יומן רגילים של ביטול טרנזקציות. לדוגמה, במערכת קבצים מסוג F2FS, אמנם SQLite תומכת בכתיבה אטומית וביצועי יומן המחיקה דומים ל-WAL, אבל WAL יכול להגדיל את כמות הכתיבה ב-10% עד 15%.
אימות
כדי לאמת את מצב WAL של תאימות, מריצים בדיקות CTS מהמודול CtsDatabaseTestCases. בדיקות CTS יאשרו את ההתנהגות הצפויה כש-Compatibility WAL מופעל.