Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

アプリ用の互換性 WAL(ログ先行書き込み)

Android 9 には、互換性 WAL(ログ先行書き込み)という SQLiteDatabase の特別なモードが導入されています。これにより、データベースあたり最大 1 つの接続を維持する動作を保ちながら、データベースで 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 設定リソースをオーバーレイします。

例:

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

WAL ジャーナル モードを使用しても従来のロールバック ジャーナル モードよりパフォーマンスが向上しない構成では、互換性 WAL を無効にすることをおすすめします。たとえば F2FS ファイルシステムでは、SQLite でアトミック書き込みがサポートされ、DELETE ジャーナルのパフォーマンスが WAL と似ていますが、WAL によって書き込み量が 10~15% 増加する可能性があります。

検証

互換性 WAL モードを検証するには、CtsDatabaseTestCases モジュールから CTS テストを実施します。互換性 WAL が有効になっている場合、想定される動作が CTS テストで検証されます。