diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
commit | a175314c3e5827eb193872241446f2f8f5c9d33c (patch) | |
tree | cd3d60ca99ae00829c52a6ca79150a5b6e62528b /mysql-test/suite/perfschema/t/func_mutex.test | |
parent | Initial commit. (diff) | |
download | mariadb-10.5-a175314c3e5827eb193872241446f2f8f5c9d33c.tar.xz mariadb-10.5-a175314c3e5827eb193872241446f2f8f5c9d33c.zip |
Adding upstream version 1:10.5.12.upstream/1%10.5.12upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/suite/perfschema/t/func_mutex.test')
-rw-r--r-- | mysql-test/suite/perfschema/t/func_mutex.test | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/t/func_mutex.test b/mysql-test/suite/perfschema/t/func_mutex.test new file mode 100644 index 00000000..19648521 --- /dev/null +++ b/mysql-test/suite/perfschema/t/func_mutex.test @@ -0,0 +1,134 @@ +## +## WL#4818, 4.1.3 MUTEXES, RW-LOCKS, ... +## +## Functional testing of mutexes and RW-locks +## + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES'; + +UPDATE performance_schema.setup_instruments SET enabled = 'YES' +WHERE name LIKE 'wait/synch/mutex/%' + OR name LIKE 'wait/synch/rwlock/%'; + +# reset lost counters +truncate table performance_schema.events_statements_summary_by_digest; +flush status; + +# Make sure objects are instrumented +select NAME from performance_schema.mutex_instances + where NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex' GROUP BY NAME; +select NAME from performance_schema.rwlock_instances + where NAME = 'wait/synch/rwlock/sql/LOCK_grant' limit 1; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# +# TODO: Change to InnoDB when it gets instrumentation +# + +CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value') +ENGINE=MyISAM; + +INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8); + +# +# FM1: Count for mutex should increase with instrumentation enabled and +# FM2: Count for mutex should not increase with instrumentation disabled +# + +TRUNCATE TABLE performance_schema.events_waits_history_long; +TRUNCATE TABLE performance_schema.events_waits_history; +TRUNCATE TABLE performance_schema.events_waits_current; + +SELECT * FROM t1 WHERE id = 1; + +SET @before_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex')); + +SELECT * FROM t1; + +SET @after_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex')); + +SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_timed; + +UPDATE performance_schema.setup_instruments SET enabled = 'NO' +WHERE NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex'; + +TRUNCATE TABLE performance_schema.events_waits_history_long; +TRUNCATE TABLE performance_schema.events_waits_history; +TRUNCATE TABLE performance_schema.events_waits_current; + +SELECT * FROM t1 WHERE id = 1; + +SET @before_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex')); + +SELECT * FROM t1; + +SET @after_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/mutex/mysys/THR_LOCK::mutex')); + +SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_timed; + +# +# Repeat for RW-lock +# + +TRUNCATE TABLE performance_schema.events_waits_history_long; +TRUNCATE TABLE performance_schema.events_waits_history; +TRUNCATE TABLE performance_schema.events_waits_current; + +show variables like "%not_found%"; + +SET @before_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_system_variables_hash')); + +show variables like "%not_found%"; + +SET @after_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_system_variables_hash')); + +SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_rw_timed; + +UPDATE performance_schema.setup_instruments SET enabled = 'NO' +WHERE NAME = 'wait/synch/rwlock/sql/LOCK_system_variables_hash'; + +TRUNCATE TABLE performance_schema.events_waits_history_long; +TRUNCATE TABLE performance_schema.events_waits_history; +TRUNCATE TABLE performance_schema.events_waits_current; + +show variables like "%not_found%"; + +SET @before_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_system_variables_hash')); + +show variables like "%not_found%"; + +SET @after_count = (SELECT SUM(TIMER_WAIT) + FROM performance_schema.events_waits_history_long + WHERE (EVENT_NAME = 'LOCK_system_variables_hash')); + +SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_rw_timed; + +# Clean-up. +UPDATE performance_schema.setup_instruments SET enabled = 'YES'; +DROP TABLE t1; + +UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES'; + +# In case of failure, will indicate the root cause +show global status like "performance_schema%"; + |