ב-Android 9 הוצג מצב מיוחד של SQLiteDatabase שנקרא "יומן כתיבה מראש (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 יאמתו את ההתנהגות הצפויה כש-"WAL תאימות" מופעל.