Server-side batch execution for prepared statements#3997
Merged
katzyn merged 2 commits intoh2database:masterfrom Feb 5, 2024
Merged
Server-side batch execution for prepared statements#3997katzyn merged 2 commits intoh2database:masterfrom
katzyn merged 2 commits intoh2database:masterfrom
Conversation
turbanoff
reviewed
Feb 4, 2024
| } | ||
| } | ||
|
|
||
| private ResultWithGeneratedKeys executeUpdate(Object generatedKeysRequest, boolean commitIfAutoCommit) { |
Contributor
There was a problem hiding this comment.
Parameter commitIfAutoCommit is unused
Contributor
Author
There was a problem hiding this comment.
Good catch, I changed it temporarily and forgot to revert that change back. I've updated results of benchmark, insertions with many elements in the batch are now faster.
turbanoff
reviewed
Feb 5, 2024
| checkClosed(); | ||
| if (batchCommands == null) { | ||
| batchCommands = new ArrayList<>(); | ||
| closeOldResultSet(); |
Contributor
There was a problem hiding this comment.
Are you sure closeOldResultSet(); this shouldn't be called always? As we do in other methods.
Contributor
Author
There was a problem hiding this comment.
In other cases batchCommands has at least one element and old results will be cleared by executeUpdateInternal() anyway.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.StatementandPreparedStatementdon't allocate an emptySQLExceptionto 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: