רישום ביומן מראש של תאימות לאפליקציות

ב-Android 9 נוסף מצב מיוחד של SQLiteDatabase שנקרא Compatibility write-ahead logging‏ (WAL), שמאפשר למסד נתונים להשתמש ב-journal_mode=WAL תוך שמירה על ההתנהגות של שמירת חיבור אחד לכל היותר לכל מסד נתונים.

WAL של התאימות מופעל כברירת מחדל למסד הנתונים של האפליקציה, אלא אם באפליקציה יש:

  1. הבעת הסכמה או ביטול הסכמה לתיעוד ביומן לפני הכתיבה באמצעות קריאה ל-SQLiteDatabase.enableWriteAheadLogging או ל-disableWriteAheadLogging
  2. בקשה מפורשת למצב יומן על ידי קריאה ל-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 מופעל.