iOS CoreData - are there any disadvantages to enabling sqlite WAL / Write-Ahead Logging iOS CoreData - are there any disadvantages to enabling sqlite WAL / Write-Ahead Logging ios ios

iOS CoreData - are there any disadvantages to enabling sqlite WAL / Write-Ahead Logging


http://pablin.org/2013/05/24/problems-with-core-data-migration-manager-and-journal-mode-wal/ suggests that their could be issues with migrations, in particular:

When you use a Migration Manager, Core Data will create a new database for you, and start copying the entities one by one from the old DB to the new one.

As we are using journal_mode = WAL, there’s an additional file besides DB.sqlite called DB.sqlite-wal.

From what I can tell, the problem seems to be that Core Data creates a temporary DB, inserts everything there, and when it renames it to the original name, the -wal file is kept as a leftover from the old version. The problem is that you end up with an inconsistent DB.

(also mentioned on https://github.com/magicalpanda/MagicalRecord/issues/490 - which suggests that if you use magical record then it is already defaulting to WAL )


Regarding the bug that occurs with non-lightweight migrations that involve subclassing NSMigrationManager, which I've re-reported to Apple as Bug 16038419.

I've also made a different, method-swizzling workaround which patches the bug in cases where you always want to use legacy delete/rollback journaling. As I understand it, Pablin's fix is for cases when you want to use WAL except during migrations. Also, you can see that bug occur in this video.