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