Android 9, SQLiteDatabase için özel bir mod olan uyumluluk için yazma öncesi günlük kaydı (WAL) özelliğini sunar. Bu özellik, veritabanının journal_mode=WAL
kullanmasına olanak tanırken veritabanı başına en fazla bir bağlantı tutma davranışını korur.
Uygulama aşağıdakilerden birine sahip olmadığı sürece, uyumluluk WAL'ı uygulamanın veritabanı için varsayılan olarak etkindir:
SQLiteDatabase.enableWriteAheadLogging
veyadisableWriteAheadLogging
numaralarını arayarak yazma öncesi günlük kaydını etkinleştirme veya devre dışı bırakmaSQLiteDatabase.OpenParams.setJournalMode(String mode)
işlevi çağrılarak günlük modu açıkça istendiğinde
WAL günlük modunun etkinleştirilmesi, performansta önemli bir iyileşmeye ve yazma miktarında azalmaya yol açabilir. Örneğin, ext4 dosya sisteminde WAL, yazma hızında 4 kat iyileşme sağlayabilir.
Uyumluluk WAL'ı varsayılan olarak etkindir ve ek uygulama gerektirmez.
Uyumluluk WAL'ını devre dışı bırakma
Uyumluluk WAL modunu devre dışı bırakmak için db_compatibility_wal_supported
yapılandırma kaynağını yerleştirin.
Örneğin:
<bool name="db_compatibility_wal_supported">false</bool>
WAL günlük modu, geleneksel geri alma günlük modlarına göre performans avantajı sağlamayan yapılandırmalar için uyumluluk WAL'ını devre dışı bırakmak isteyebilirsiniz. Örneğin, SQLite atomik yazma işlemlerini desteklese ve DELETE günlüğü performansı WAL'a benzer olsa da F2FS dosya sisteminde WAL, yazma işlemlerinin miktarını% 10 ila %15 oranında artırabilir.
Doğrulama
Uyumluluk WAL modunu doğrulamak için CtsDatabaseTestCases modülünden CTS testlerini çalıştırın. CTS testleri, Compatibility WAL etkinleştirildiğinde beklenen davranışı doğrular.