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

MDEV-35701 trx_t::autoinc_locks causes unnecessary dynamic memory allocation #3720

Merged
merged 2 commits into from
Jan 15, 2025

Conversation

dr-m
Copy link
Contributor

@dr-m dr-m commented Dec 20, 2024

  • The Jira issue number for this PR is: MDEV-35701

Description

trx_t::autoinc_locks: Use small_vector<lock_t*,4> in order to avoid any dynamic memory allocation in the most common case (a statement is holding AUTO_INCREMENT locks on at most 4 tables or partitions).

lock_cancel_waiting_and_release(): Instead of removing elements from the middle, simply assign nullptr, like lock_table_remove_autoinc_lock().

Release Notes

This is a minor performance improvement.

How can this PR be tested?

A simple Sysbench is expected to show some impact. I did not test this yet.

Basing the PR against the correct MariaDB version

  • This is a new feature or a refactoring, and the PR is based against the main branch.
  • This is a bug fix, and the PR is based against the earliest maintained branch in which the bug can be reproduced.

PR quality check

  • I checked the CODING_STANDARDS.md file and my PR conforms to this where appropriate.
  • For any trivial modifications to the PR, I am ok with the reviewer making the changes themselves.

@dr-m dr-m self-assigned this Dec 20, 2024
@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@dr-m dr-m marked this pull request as draft December 20, 2024 13:43
@dr-m dr-m force-pushed the 10.6-MDEV-35701 branch from 006ada1 to 1acd785 Compare January 2, 2025 12:00
@dr-m dr-m marked this pull request as ready for review January 2, 2025 12:01
Copy link
Contributor

@mariadb-DebarunBanerjee mariadb-DebarunBanerjee left a comment

Choose a reason for hiding this comment

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

Mainly we are replacing ib_vector_t* autoinc_locks; with small_vector. So, the possible impact mainly would depend on the stability of small_vector implementation. I think we need to test it well.

I added one comment on passing R value while adding the lock entry which doesn't seem completely right. I need a little more time to complete the review.

storage/innobase/lock/lock0lock.cc Outdated Show resolved Hide resolved
Copy link
Contributor

@mariadb-DebarunBanerjee mariadb-DebarunBanerjee left a comment

Choose a reason for hiding this comment

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

A am done with the review. Please see the comments.

storage/innobase/include/small_vector.h Outdated Show resolved Hide resolved
storage/innobase/lock/lock0lock.cc Outdated Show resolved Hide resolved
storage/innobase/lock/lock0lock.cc Outdated Show resolved Hide resolved
@dr-m dr-m force-pushed the 10.6-MDEV-35701 branch 2 times, most recently from 1094fc9 to 21dc06f Compare January 14, 2025 11:03
Copy link
Contributor

@mariadb-DebarunBanerjee mariadb-DebarunBanerjee left a comment

Choose a reason for hiding this comment

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

All good. Thanks for the changes.
Please check one related comment.

storage/innobase/lock/lock0lock.cc Outdated Show resolved Hide resolved
dr-m added 2 commits January 15, 2025 16:55
…ocation

trx_t::autoinc_locks: Use small_vector<lock_t*,4> in order to avoid any
dynamic memory allocation in the most common case (a statement is
holding AUTO_INCREMENT locks on at most 4 tables or partitions).

lock_cancel_waiting_and_release(): Instead of removing elements from
the middle, simply assign nullptr, like lock_table_remove_autoinc_lock().

The added test innodb.auto_increment_lock_mode covers the dynamic memory
allocation as well as nondeterministically (occasionally) covers
the out-of-order lock release in lock_table_remove_autoinc_lock().

Reviewed by: Debarun Banerjee
Let us make some member functions of lock_sys_t non-static
to avoid some shuffling of function parameter registers.

lock_cancel_waiting_and_release(): Declare static, because there
are no external callers.

Reviewed by: Debarun Banerjee
@dr-m dr-m merged commit 0abef37 into 10.6 Jan 15, 2025
7 of 9 checks passed
@dr-m dr-m deleted the 10.6-MDEV-35701 branch January 15, 2025 15:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

4 participants