Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PS-9378: Backport PS-9302 (WRITESET perf improvements) to 8.0 (8.4) #5411

Conversation

percona-ysorokin
Copy link
Collaborator

This is a null merge as the patch is already in 8.4 branch.

kamil-holubicki and others added 2 commits September 9, 2024 19:13
https://perconadev.atlassian.net/browse/PS-9378

This patch was originally created for the 8.4 branch where the only
available binlog transaction dependency tracking mode is 'WRITESET'.
However, it also makes sense to backport this to 8.0 as the same
code paths are used when user explicitly set the
'binlog_transaction_dependency_tracking' system variable to 'WRITESET'
(by default in 8.0 series, this variable is set to 'COMMIT_ORDER').

Cherry-picked PS-9302
"Improve performance for binlog_transaction_dependency_tracking=WRITESET"
(https://perconadev.atlassian.net/browse/PS-9302) from 8.4.

Problem:
Comparing to 8.0 where the default value of
binlog_transaction_dependency_tracking was COMMIT_ORDER, 8.4 introduces
a visible write performance drop.

Cause:
8.4 uses WRITESET dependency tracking. For this tracking we maintain
a map of binlog_transaction_dependency_history_size for row_id to newest
transaction sequence_number which modified a given row. Every new
transaction needs to check its dependency by examining the map (find),
which is done with logarithmic complexity.

Solution:
Change std::map to std::unordered_map. This allows us to find a row
dependency in constant on average complexity.
@percona-ysorokin percona-ysorokin merged commit cfb69a3 into percona:release-8.4.2-2 Sep 9, 2024
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants