Uygulamalar için WAL (Yazma Öncesi Günlüğü) Uyumluluğu

Android 9 , SQLiteDatabase'in Uyumluluk WAL (yazma öncesi günlük kaydı) adı verilen özel bir modunu sunar; bu mod, bir veritabanının, veritabanı başına maksimum bir bağlantı tutma davranışını korurken, journal_mode=WAL kullanmasına olanak tanır.

Uyumluluk WAL, uygulama aşağıdakilerden birine sahip olmadığı sürece, uygulamanın veritabanı için varsayılan olarak etkinleştirilir:

  1. SQLiteDatabase.enableWriteAheadLogging veya disableWriteAheadLogging çağrılarak yazma öncesi günlük kaydının etkinleştirilmesi veya devre dışı bırakılması
  2. SQLiteDatabase.OpenParams.setJournalMode(String mode) çağrılarak açıkça talep edilen günlük modu

WAL günlük modunun etkinleştirilmesi, performansta önemli bir iyileşmeye ve yazma miktarında azalmaya yol açabilir. Örneğin, bir ext4 dosya sisteminde WAL, yazma hızında 4 kat artışa yol açabilir.

Uyumluluk WAL varsayılan olarak etkindir ve herhangi bir ek uygulama gerektirmez.

WAL Uyumluluğunu Devre Dışı Bırakma

Uyumluluk WAL modunu devre dışı bırakmak için db_compatibility_wal_supported yapılandırma kaynağını kaplayın.

Örneğin:

<bool name="db_compatibility_wal_supported">false</bool>

WAL günlük modunun geleneksel geri alma günlük modlarına göre performans avantajı sağlamadığı yapılandırmalar için Uyumluluk WAL'yi devre dışı bırakmak isteyebilirsiniz. Örneğin, bir F2FS dosya sisteminde, SQLite atomik yazmaları desteklese ve DELETE günlük performansı WAL'a benzer olsa da, WAL yazma 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, WAL Uyumluluğu etkinleştirildiğinde beklenen davranışı doğrulayacaktır.