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.0) #5409

Conversation

percona-ysorokin
Copy link
Collaborator

@percona-ysorokin percona-ysorokin commented Sep 6, 2024

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.

Copy link
Contributor

@dlenev dlenev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello Yura!

I think it is worth mentioning in commit comment that even though in 8.0 WRITESET dependency tracking is not default, it still makes sense to backport the patch from 8.4,
as many people might be using this non default dependency tracking and the patch is really straightforward.

Otherwise, LGTM.

@percona-ysorokin percona-ysorokin force-pushed the dev/PS-9378-8.0-writeset_perf_backport branch from d87bd64 to 196f688 Compare September 9, 2024 14:10
Copy link
Contributor

@dlenev dlenev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want to fix typos in commit message like:

backpot -> backport
Cherry-piked -> Cherry-picked

Otherwise LGTM.

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 force-pushed the dev/PS-9378-8.0-writeset_perf_backport branch from 196f688 to 40d7e5a Compare September 9, 2024 17:16
@percona-ysorokin percona-ysorokin changed the base branch from 8.0 to release-8.0.39-30 September 9, 2024 17:19
@percona-ysorokin percona-ysorokin merged commit c51d625 into percona:release-8.0.39-30 Sep 9, 2024
28 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.

3 participants