mariadb/mysql-test/suite
Marko Mäkelä acd071f599 MDEV-21923: LSN allocation is a bottleneck
The parameter innodb_log_spin_wait_delay will be deprecated and
ignored, because there is no spin loop anymore.

Thanks to commit 685d958e38
and commit a635c40648
multiple mtr_t::commit() can concurrently copy their slice of
mtr_t::m_log to the shared log_sys.buf.  Each writer would allocate
their own log sequence number by invoking log_t::append_prepare()
while holding a shared log_sys.latch.  This function was too heavy,
because it would invoke a minimum of 4 atomic read-modify-write
operations as well as system calls in the supposedly fast code path.

It turns out that with a simpler data structure, instead of having
several data fields that needed to be kept consistent with each other,
we only need one Atomic_relaxed<uint64_t> write_lsn_offset, on which
we can operate using fetch_add(), fetch_sub() as well as a single-bit
fetch_or(), which reasonably modern compilers (GCC 7, Clang 15 or later)
can translate into loop-free code on AMD64.

Before anything can be written to the log, log_sys.clear_mmap()
must be invoked.

log_t::base_lsn: The LSN of the last write_buf() or persist().
This is a rough approximation of log_sys.lsn, which will be removed.

log_t::write_lsn_offset: An Atomic_relaxed<uint64_t> that buffers
updates of write_to_buf and base_lsn.

log_t::buf_free, log_t::max_buf_free, log_t::lsn. Remove.
Replaced by base_lsn and write_lsn_offset.

log_t::buf_size: Always reflects the usable size in append_prepare().

log_t::lsn_lock: Remove.  For the memory-mapped log in resize_write(),
there will be a resize_wrap_mutex.

log_t::get_lsn_approx(): Return a lower bound of get_lsn().
This should be exact unless append_prepare_wait() is pending.

log_get_lsn(): A wrapper for log_sys.get_lsn(), which must be invoked
while holding an exclusive log_sys.latch.

recv_recovery_from_checkpoint_start(): Do not invoke fil_names_clear();
it would seem to be unnecessary.

In many places, references to log_sys.get_lsn() are replaced with
log_sys.get_flushed_lsn(), which remains a simple std::atomic::load().

Reviewed by: Debarun Banerjee
2025-04-10 13:02:17 +03:00
..
archive Merge branch '10.5' into 10.6 2024-12-17 11:06:09 +11:00
atomic Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
binlog MDEV-35506 commit policy of one-phase-commit even at errored-out binlogging leads to assert 2025-04-03 20:13:10 +03:00
binlog_encryption Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
client
compat Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
csv Backporting bugs fixes fixed by MDEV-31340 from 11.5 2024-05-21 14:58:01 +04:00
encryption Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
engines MDEV-29344: engines/iuds.insert_time cannot run with PS protocol (syntax error) 2025-03-17 18:11:51 +07:00
federated Allow 'mariadb' as a connection wrapper name for FederatedX. 2025-02-25 16:04:56 +02:00
funcs_1 MDEV-35810 fix test results 2025-01-14 14:01:28 +01:00
funcs_2 Merge 10.5 into 10.6 2025-03-26 17:09:57 +02:00
galera Merge branch '10.6' into '10.11' 2025-04-02 06:33:39 +02:00
galera_3nodes Merge branch '10.6' into '10.11' 2025-04-02 06:33:39 +02:00
galera_3nodes_sr galera mtr tests: synchronization between branches and editions 2025-04-02 04:50:11 +02:00
galera_sr Merge branch '10.6' into '10.11' 2025-04-02 06:33:39 +02:00
gcol MDEV-35000: dict_table_close() breaks STATS_AUTO_RECALC 2025-02-28 09:00:16 +02:00
handler Merge branch '10.5' into 10.6 2024-12-17 11:06:09 +11:00
heap Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
innodb MDEV-36489 10.11 crashes during bootstrap on macOS 2025-04-07 11:01:17 +03:00
innodb_fts Merge 10.6 into 10.11 2025-03-28 10:55:40 +02:00
innodb_gis Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
innodb_i_s
innodb_zip Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
jp
json Merge branch '10.6' into 10.11 2024-10-29 15:24:38 +01:00
large_tests fix failing large_tests.maria_recover_encrypted 2024-04-22 18:38:39 +02:00
maria Merge 10.6 into 10.11 2025-01-08 12:51:26 +02:00
mariabackup MDEV-36437 mariabackup - confusing error message when running out of file handles with partitioned MyISAM 2025-03-31 17:57:35 +02:00
mtr/t Remove dates from all rdiff files 2025-01-05 16:40:11 +02:00
mtr2
multi_source MDEV-36238 Functional Tests for --master-info-file and --show-slave-auth-info 2025-03-18 18:17:02 -06:00
optimizer_unfixed_bugs
parts Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
perfschema Merge 10.6 into 10.11 2025-02-10 14:45:18 +02:00
perfschema_stress
period Merge 10.6 into 10.11 2025-01-08 12:51:26 +02:00
plugins Merge 10.6 into 10.11 2024-12-19 15:38:53 +02:00
roles Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
rpl MDEV-35207 ignored error at binlogging by CREATE-TABLE-SELECT leads to assert 2025-04-03 19:00:02 +03:00
s3 Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
sql_sequence Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
storage_engine
stress MDEV-34453 Trying to read 16384 bytes at 70368744161280 outside the bounds of the file: ./ibdata1 2024-09-20 20:26:43 +05:30
sys_vars MDEV-21923: LSN allocation is a bottleneck 2025-04-10 13:02:17 +03:00
sysschema Merge 10.6 into 10.11 2024-03-28 09:16:57 +02:00
unit
vcol Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
versioning Merge branch '10.6' into '10.11' 2025-04-02 06:33:39 +02:00
wsrep Merge branch '10.5' into '10.6' 2025-04-02 04:43:24 +02:00