[MDEV-28313] InnoDB transactions are not aligned at cache lines Created: 2022-04-14  Updated: 2022-04-21  Resolved: 2022-04-14

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9
Fix Version/s: 10.6.8, 10.7.4, 10.8.3, 10.9.1

Type: Bug Priority: Major
Reporter: Marko Mäkelä Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: performance

Issue Links:
Relates
relates to MDEV-21423 lock-free trx_sys get performance reg... Stalled

 Description   

When the lock-free hash table trx_sys.rw_trx_hash was implemented in MariaDB Server 10.3 was implemented, the cache line alignment of transaction objects became more important when iterating the hash table. All trx_t are allocated via trx_pools, and it is easy to change that to return cache line aligned objects.

Furthermore, rw_trx_hash_element_t::mutex is unnecessarily large. Replacing it with the futex (or Microsoft Windows SRWLOCK) based srw_mutex will shrink the size of a hash table element to 64 bytes (the size of a cache line on most AMD64 implementations). There was an internal interface for PERFORMANCE_SCHEMA instrumentation for the element mutexes, but it was not exposed via all_innodb_mutexes.



 Comments   
Comment by Marko Mäkelä [ 2022-04-14 ]

I ran a quick performance comparison, similar to what I conducted in MDEV-21423 yesterday:
baseline: 10.6 f7f0bc748e88f911b957d3dbf3bc0828a33675fb
patched: 2aed566d2267a824158025c09830bc6353ec88a9

version 20 40 80 160 320 640
baseline 158316.00 184590.99 169979.02 187134.73 178012.51 168005.30
patched 158265.02 187125.55 172186.49 191218.58 182169.38 169287.10

During the test with 80 concurrent connections, the throughput dropped due to checkpoint flushing.

Unlike my attempted fix of MDEV-21423, this small cleanup never seems to hurt performance.

Generated at Thu Feb 08 09:59:44 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.