diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-22 12:38:45 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-10-22 12:38:45 +0300 |
commit | 1f02280904fcfbb2bd86404d1c85c025634f8c9d (patch) | |
tree | d4a7f9ea0a2265ee629fccbcc04be92926694686 /storage/innobase/row | |
parent | c091a0bc8da87045f10bfc96618ed7194768fa2d (diff) | |
download | mariadb-git-1f02280904fcfbb2bd86404d1c85c025634f8c9d.tar.gz |
MDEV-26769 InnoDB does not support hardware lock elision
This implements memory transaction support for:
* Intel Restricted Transactional Memory (RTM), also known as TSX-NI
(Transactional Synchronization Extensions New Instructions)
* POWER v2.09 Hardware Trace Monitor (HTM) on GNU/Linux
transactional_lock_guard, transactional_shared_lock_guard:
RAII lock guards that try to elide the lock acquisition
when transactional memory is available.
buf_pool.page_hash: Try to elide latches whenever feasible.
Related to the InnoDB change buffer and ROW_FORMAT=COMPRESSED
tables, this is not always possible.
In buf_page_get_low(), memory transactions only work reasonably
well for validating a guessed block address.
TMLockGuard, TMLockTrxGuard, TMLockMutexGuard: RAII lock guards
that try to elide lock_sys.latch and related latches.
Diffstat (limited to 'storage/innobase/row')
-rw-r--r-- | storage/innobase/row/row0ins.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index b67c1212271..9b2ea9db542 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -695,6 +695,7 @@ row_ins_set_detailed( Acquires dict_foreign_err_mutex, rewinds dict_foreign_err_file and displays information about the given transaction. The caller must release dict_foreign_err_mutex. */ +TRANSACTIONAL_TARGET static void row_ins_foreign_trx_print( @@ -708,7 +709,7 @@ row_ins_foreign_trx_print( ut_ad(!srv_read_only_mode); { - LockMutexGuard g{SRW_LOCK_CALL}; + TMLockMutexGuard g{SRW_LOCK_CALL}; n_rec_locks = trx->lock.n_rec_locks; n_trx_locks = UT_LIST_GET_LEN(trx->lock.trx_locks); heap_size = mem_heap_get_size(trx->lock.lock_heap); |