mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
a635c40648
A prominent bottleneck in mtr_t::commit() is log_sys.mutex between log_sys.append_prepare() and log_close(). User-visible change: The minimum innodb_log_file_size will be increased from 1MiB to 4MiB so that some conditions can be trivially satisfied. log_sys.latch (log_latch): Replaces log_sys.mutex and log_sys.flush_order_mutex. Copying mtr_t::m_log to log_sys.buf is protected by a shared log_sys.latch. Writes from log_sys.buf to the file system will be protected by an exclusive log_sys.latch. log_sys.lsn_lock: Protects the allocation of log buffer in log_sys.append_prepare(). sspin_lock: A simple spin lock, for log_sys.lsn_lock. Thanks to Vladislav Vaintroub for suggesting this idea, and for reviewing these changes. mariadb-backup: Replace some use of log_sys.mutex with recv_sys.mutex. buf_pool_t::insert_into_flush_list(): Implement sorting of flush_list because ordering is otherwise no longer guaranteed. Ordering by LSN is needed for the proper operation of redo log checkpoints. log_sys.append_prepare(): Advance log_sys.lsn and log_sys.buf_free by the length, and return the old values. Also increment write_to_buf, which was previously done in log_close(). mtr_t::finish_write(): Obtain the buffer pointer from log_sys.append_prepare(). log_sys.buf_free: Make the field Atomic_relaxed, to simplify log_flush_margin(). Use only loads and stores to avoid costly read-modify-write atomic operations. buf_pool.flush_list_requests: Replaces export_vars.innodb_buffer_pool_write_requests and srv_stats.buf_pool_write_requests. Protected by buf_pool.flush_list_mutex. buf_pool_t::insert_into_flush_list(): Do not invoke page_cleaner_wakeup(). Let the caller do that after a batch of calls. recv_recover_page(): Invoke a minimal part of buf_pool.insert_into_flush_list(). ReleaseBlocks::modified: A number of pages added to buf_pool.flush_list. ReleaseBlocks::operator(): Merge buf_flush_note_modification() here. log_t::set_capacity(): Renamed from log_set_capacity().
40 lines
1.3 KiB
Text
40 lines
1.3 KiB
Text
--source include/have_innodb.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_sequence.inc
|
|
|
|
CREATE TABLE t ENGINE=INNODB SELECT seq%10 i FROM seq_0_to_204796;
|
|
|
|
--echo # xtrabackup backup
|
|
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
|
--let $backuplog=$MYSQLTEST_VARDIR/tmp/backup.log
|
|
|
|
--let before_innodb_log_copy_thread_started=INSERT INTO test.t SELECT * FROM test.t
|
|
|
|
--disable_result_log
|
|
--error 1
|
|
--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events > $backuplog
|
|
--enable_result_log
|
|
|
|
--let SEARCH_PATTERN=Was only able to copy log from \\d+ to \\d+, not \\d+; try increasing innodb_log_file_size\\b
|
|
--let SEARCH_FILE=$backuplog
|
|
--source include/search_pattern_in_file.inc
|
|
--remove_file $backuplog
|
|
--rmdir $targetdir
|
|
|
|
--let before_innodb_log_copy_thread_started=INSERT INTO test.t SELECT seq FROM seq_0_to_9
|
|
|
|
--disable_result_log
|
|
--error 1
|
|
--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events,log_checksum_mismatch > $backuplog
|
|
--enable_result_log
|
|
|
|
--let SEARCH_PATTERN=failed: redo log block checksum does not match
|
|
--let SEARCH_FILE=$backuplog
|
|
--source include/search_pattern_in_file.inc
|
|
--remove_file $backuplog
|
|
--rmdir $targetdir
|
|
|
|
--let before_innodb_log_copy_thread_started=
|
|
|
|
DROP TABLE t;
|