ב-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 בנושא תאימות מופעל כברירת מחדל ולא דורש פעולות נוספות יישום בפועל.
השבתת WAL של תאימות
כדי להשבית את מצב WAL של התאימות, מוסיפים שכבת-על
db_compatibility_wal_supported
משאב config.
לדוגמה:
<bool name="db_compatibility_wal_supported">false</bool>
מומלץ להשבית את WAL התאימות להגדרות שבהן WAL מצב יומן לא מספק יתרון בביצועים על פני החזרה לגרסה קודמת במצבי יומן. לדוגמה, במערכת קבצים מסוג F2FS, למרות ש-SQLite תומך כתיבה אטומית והביצועים של יומן DELETE דומים ל-WAL, WAL יכול להגדיל את כמות הכתיבה ב-10% ל-15%.
אימות
כדי לאמת את מצב WAL של תאימות, מריצים בדיקות CTS מהמודול CtsDatabaseTestCases. בדיקות CTS יבדקו את ההתנהגות הצפויה כש-Compatibility WAL מופעל.