[MDEV-23382] Change DB_ROLL_PTR format to allow more than 128 concurrent START TRANSACTION Created: 2020-08-03  Updated: 2020-08-03

Status: Open
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Fix Version/s: None

Type: Task Priority: Major
Reporter: Marko Mäkelä Assignee: Marko Mäkelä
Resolution: Unresolved Votes: 0
Labels: performance

Issue Links:
Relates
relates to MDEV-12289 Keep 128 persistent rollback segments... Closed
relates to MDEV-14425 Change the InnoDB redo log format to ... Closed
relates to MDEV-14462 Confusing error message: ib_logfiles ... Closed
relates to MDEV-23379 Deprecate and ignore options for Inno... Closed

 Description   

As noted in MDEV-12289, the InnoDB system column DB_ROLL_PTR currently includes a 7-bit pointer to a ‘rollback segment’. The trx_rseg_t::mutex will be acquired at the start of each write transaction, to allocate an undo log header.

This should limit the number of concurrent single-statement transactions close to 128. Note: a multi-statement transaction should not be limited by this. Also, if there are secondary indexes defined on an InnoDB table, those would be modified in separate mini-transactions, without holding trx_rseg_t::mutex. This would allow the concurrent execution of a transaction that is using the same rollback segment.

We might also consider making DB_ROLL_PTR a pointer to the redo log file. That is, do not write undo log pages at all, but instead write the data to the redo log. This idea has been floated around in MDEV-14425. This could remove the concept of rollback segments altogether, and it could make rollback and MVCC much faster on PMEM, but we would have to solve a problem: How to preserve undo logs across a redo log checkpoint?


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