mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
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().
57 lines
2.4 KiB
Plaintext
57 lines
2.4 KiB
Plaintext
UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
|
|
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
|
WHERE name like 'wait/synch/sxlock/%';
|
|
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
|
WHERE name like 'wait/synch/rwlock/innodb/%';
|
|
SELECT DISTINCT name FROM performance_schema.setup_instruments
|
|
WHERE name LIKE 'wait/synch/rwlock/innodb/%'
|
|
AND name!='wait/synch/rwlock/innodb/btr_search_latch' ORDER BY name;
|
|
name
|
|
wait/synch/rwlock/innodb/dict_operation_lock
|
|
wait/synch/rwlock/innodb/fil_space_latch
|
|
wait/synch/rwlock/innodb/lock_latch
|
|
wait/synch/rwlock/innodb/log_latch
|
|
wait/synch/rwlock/innodb/trx_i_s_cache_lock
|
|
wait/synch/rwlock/innodb/trx_purge_latch
|
|
TRUNCATE TABLE performance_schema.events_waits_history_long;
|
|
TRUNCATE TABLE performance_schema.events_waits_history;
|
|
TRUNCATE TABLE performance_schema.events_waits_current;
|
|
select name from performance_schema.setup_instruments
|
|
where name like "wait/synch/sxlock/%" order by name;
|
|
name
|
|
wait/synch/sxlock/innodb/index_tree_rw_lock
|
|
SELECT DISTINCT name FROM performance_schema.rwlock_instances
|
|
WHERE name LIKE 'wait/synch/sxlock/innodb/%'
|
|
ORDER BY name;
|
|
name
|
|
wait/synch/sxlock/innodb/index_tree_rw_lock
|
|
create table t1(a int) engine=innodb;
|
|
begin;
|
|
insert into t1 values (1), (2), (3);
|
|
insert into t1 values (1), (2), (3);
|
|
insert into t1 values (1), (2), (3);
|
|
commit;
|
|
drop table t1;
|
|
SELECT DISTINCT event_name FROM performance_schema.events_waits_history_long
|
|
WHERE event_name LIKE 'wait/synch/rwlock/innodb/%'
|
|
AND event_name NOT IN
|
|
('wait/synch/rwlock/innodb/btr_search_latch',
|
|
'wait/synch/rwlock/innodb/dict_operation_lock',
|
|
'wait/synch/rwlock/innodb/trx_purge_latch')
|
|
ORDER BY event_name;
|
|
event_name
|
|
wait/synch/rwlock/innodb/fil_space_latch
|
|
wait/synch/rwlock/innodb/lock_latch
|
|
wait/synch/rwlock/innodb/log_latch
|
|
SELECT event_name FROM performance_schema.events_waits_history_long
|
|
WHERE event_name = 'wait/synch/sxlock/innodb/index_tree_rw_lock'
|
|
AND operation IN ('try_shared_lock','shared_lock') LIMIT 1;
|
|
event_name
|
|
wait/synch/sxlock/innodb/index_tree_rw_lock
|
|
SELECT event_name from performance_schema.events_waits_history_long
|
|
WHERE event_name = 'wait/synch/sxlock/innodb/index_tree_rw_lock'
|
|
AND operation IN ('try_exclusive_lock','exclusive_lock') LIMIT 1;
|
|
event_name
|
|
wait/synch/sxlock/innodb/index_tree_rw_lock
|
|
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
|