ב-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 תומכת בכתיבה אטומית וביצועי היומן DELETE דומים ל-WAL, אבל WAL יכול להגדיל את כמות הכתיבה ב-10% עד 15%.
אימות
כדי לאמת את מצב WAL של תאימות, מריצים בדיקות CTS מהמודול CtsDatabaseTestCases. בדיקות CTS יאשרו את ההתנהגות הצפויה כש-Compatibility WAL מופעל.