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