Server-side batch execution for prepared statements #3997
Merged
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.
PreparedStatement.execute[Large]Batch()
methods now send all rows with parameters in a single request to a remote server instead of execution of every element in a separate request. This significantly reduces execution time of fast commands in large batches with real remote servers. Note:Statement.execute[Large]Batch()
methods still execute every command in a separate request, I think these methods are rarely used.Statement
andPreparedStatement
don't allocate an emptySQLException
to hold other exceptions in it any more. As it was pointed out by @turbanoff, this allocation significantly increases execution time of single-command batches in embedded in-memory mode.These changes are mostly intended for remote connections, but they work well for embedded in-memory database too:
Reduced benchmark for corner cases (based on benchmark from another PR)
Mainline H2:
This PR:
Code proposed for the problem (2) in the mentioned PR: