Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
-
10.2.13
Description
Take snapshot of registered read-write transaction identifiers directly
from rw_trx_hash. It immediately saves one trx_sys.mutex lock, reduces
size of another critical section protected by this mutex, and makes
further optimisations like removing trx_sys_t::serialisation_list
possible.
Downside of this approach is bigger overhead for view opening, because
iterating LF_HASH is more expensive compared to taking snapshot of an
array. However for low concurrency overhead difference is negligible,
while for high concurrency mutex is much bigger evil.
Currently we still take trx_sys.mutex to serialise ReadView creation.
This is required to keep serialisation_list ordered by trx->no as well
as not to let purge thread to create more recent snapshot while another
thread gets suspended during creation of older snapshot. This will
become completely mutex free along with serialisation_list removal.
Compared to previous implementation removing element from rw_trx_hash
and serialisation_list is not atomic. We disregard all possible bad
consequences (if there're any) since it will be solved along with
serialisation_list removal.
serialisation_list was supposed to instantly give minimum registered
transaction serialisation number. However maintaining and accessing
this list requires global mutex protection.
Since we already take MVCC snapshot by iterating trx_sys_t::rw_trx_hash,
it is cheap to integrate minimum registered transaction lookup into this
iteration.
Attachments
Issue Links
- causes
-
MDEV-15155 [Draft] Assertion failed: m_state == 3 || m_state == 0 || m_state == 1, file d:\qa-win-debug\build\storage\innobase\include\read0types.h, line 156
-
- Closed
-
-
MDEV-15246 InnoDB: Unknown error code 20: Required history data has been deleted
-
- Closed
-
-
MDEV-22680 InnoDB trx_sys improvements
-
- Open
-
- is blocked by
-
MDEV-15132 Avoid accessing the TRX_SYS page
-
- Closed
-
- relates to
-
MDEV-29612 ReadViewBase::snapshot() misses an optimization
-
- Closed
-
-
MDEV-33067 SCN(Sequence Commit Number) based MVCC
-
- Open
-
Activity
Field | Original Value | New Value |
---|---|---|
Epic Link | MDEV-14442 [ 64369 ] |
Description |
Take snapshot of registered read-write transaction identifiers directly
from rw_trx_hash. It immediately saves one trx_sys.mutex lock, reduces size of another critical section protected by this mutex, and makes further optimisations like removing trx_sys_t::serialisation_list possible. Downside of this approach is bigger overhead for view opening, because iterating LF_HASH is more expensive compared to taking snapshot of an array. However for low concurrency overhead difference is negligible, while for high concurrency mutex is much bigger evil. Currently we still take trx_sys.mutex to serialise ReadView creation. This is required to keep serialisation_list ordered by trx->no as well as not to let purge thread to create more recent snapshot while another thread gets suspended during creation of older snapshot. This will become completely mutex free along with serialisation_list removal. Compared to previous implementation removing element from rw_trx_hash and serialisation_list is not atomic. We disregard all possible bad consequences (if there're any) since it will be solved along with serialisation_list removal. serialisation_list was supposed to instantly give minimum registered transaction serialisation number. However maintaining and accessing this list requires global mutex protection. Since we already take MVCC snapshot by iterating trx_sys_t::rw_trx_hash, it is cheap to integrate minimum registered transaction lookup into this iteration. |
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Assignee | Sergey Vojtovich [ svoj ] | Marko Mäkelä [ marko ] |
Status | Confirmed [ 10101 ] | In Review [ 10002 ] |
Assignee | Marko Mäkelä [ marko ] | Sergey Vojtovich [ svoj ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Link |
This issue is blocked by |
Assignee | Sergey Vojtovich [ svoj ] | Marko Mäkelä [ marko ] |
Status | Stalled [ 10000 ] | In Review [ 10002 ] |
Assignee | Marko Mäkelä [ marko ] | Sergey Vojtovich [ svoj ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Fix Version/s | 10.3.5 [ 22905 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Resolution | Fixed [ 1 ] | |
Status | Stalled [ 10000 ] | Closed [ 6 ] |
Sprint | 10.2.13 [ 228 ] |
Link |
This issue causes |
Link |
This issue causes |
Link | This issue causes MDEV-22680 [ MDEV-22680 ] |
Workflow | MariaDB v3 [ 85183 ] | MariaDB v4 [ 133456 ] |
Link |
This issue relates to |
Link | This issue relates to MDEV-33067 [ MDEV-33067 ] |
marko, please review patches for this task: https://github.com/MariaDB/server/commits/bb-10.3-arm