Uygulamalar için uyumluluk ön yazma günlük kaydı

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:

  1. SQLiteDatabase.enableWriteAheadLogging veya disableWriteAheadLogging numaralarını arayarak yazma öncesi günlük kaydını etkinleştirme veya devre dışı bırakma
  2. SQLiteDatabase.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.