-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Conversation
|
There was a problem hiding this 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.
There was a problem hiding this 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.
1094fc9
to
21dc06f
Compare
There was a problem hiding this 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.
…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
Description
trx_t::autoinc_locks
: Usesmall_vector<lock_t*,4>
in order to avoid any dynamic memory allocation in the most common case (a statement is holdingAUTO_INCREMENT
locks on at most 4 tables or partitions).lock_cancel_waiting_and_release()
: Instead of removing elements from the middle, simply assignnullptr
, likelock_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
main
branch.PR quality check