wrap SqliteCodebase.syncInternal in an immediate transaction #1966
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I was thinking that sqlite could keep more work in RAM if it knows that it's expected to be an atomic operation, and it seems it can. Syncing base was 39% faster with this.
Loose ends
I wondered if
PRAGMA read_only
would help too, and I stop trying when I got an error about not being able to "prepare" the statementPRAGMA read_only = ?
for some reason. You could just have constant statements for= TRUE" and
= FALSE"` but I stopped trying. One could also just ask the sqlite mailing list if this would speed things up, they seem to be very knowledgeable.Timing data
Using this transcript, where
base_v2
is a local clone of unisonweb/base@de5f04d and not in the ucm git cache, andrepo
is an empty repo.Pre-PR (avg of 3 runs)
With transaction on dest DB (avg of 3)
With transaction on src and dest DBs (avg of 7)