diff options
Diffstat (limited to 'mysql-test/suite/perfschema/t/threads_mysql.test')
-rw-r--r-- | mysql-test/suite/perfschema/t/threads_mysql.test | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/t/threads_mysql.test b/mysql-test/suite/perfschema/t/threads_mysql.test new file mode 100644 index 00000000..c33f4218 --- /dev/null +++ b/mysql-test/suite/perfschema/t/threads_mysql.test @@ -0,0 +1,116 @@ + +# Tests for special content of performance_schema.threads +# +# Show MySQL server related content in performance_schema.threads + +--source include/not_windows.inc +--source include/not_embedded.inc +--source include/have_perfschema.inc + +# Ensure that the event scheduler (started via threads_mysql-master.opt) +# is really running. +--source include/pfs_running_event_scheduler.inc + +SET GLOBAL event_scheduler = OFF; +--source include/pfs_no_running_event_scheduler.inc + +--vertical_results + +# Show all "system" threads except the event scheduler +# --------------------------------------------------- +# 0. The values within the columns "thread_id" and "processlist_id" depend +# on server history. Therefore they are unstable and need to be omitted. +# 1. The columns "time" and "state" are omitted because it is thinkable that +# they contain slightly unstable though correct values. +# 2. The unification of the column "parent_thread_id" is in the moment most +# probably not required because I observed all time that the parent is +# "thread/sql/main" with the thread_id = 1. +# But there might be more kinds of parents with most probably unstable +# "thread_id" values in future. +# 3. In case the test is started with the option "--ps-protocol" we will +# find a correcet row for our current thread but the content will differ. +# Therefore we have to disable this protocol for the next statement. +--disable_ps_protocol +SELECT name, type, processlist_user, processlist_host, processlist_db, + processlist_command, processlist_info, + IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') + AS unified_parent_thread_id, + role, instrumented +FROM performance_schema.threads +WHERE name LIKE 'thread/sql%' +ORDER BY name; +--enable_ps_protocol + +CREATE TEMPORARY TABLE t1 AS +SELECT thread_id FROM performance_schema.threads +WHERE name LIKE 'thread/sql%'; + + +SET GLOBAL event_scheduler = ON; +--source include/pfs_running_event_scheduler.inc + +# Show entries belonging to the just started event scheduler +SELECT name, type, processlist_user, processlist_host, processlist_db, + processlist_command, processlist_info, + IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') + AS unified_parent_thread_id, + role, instrumented +FROM performance_schema.threads +WHERE name LIKE 'thread/sql%' + AND thread_id NOT IN (SELECT thread_id FROM t1) +ORDER BY name; + +TRUNCATE t1; +INSERT INTO t1 +SELECT thread_id FROM performance_schema.threads +WHERE name LIKE 'thread/sql%'; +SELECT COUNT(*) INTO @aux FROM t1; + +# Attention: +# Just waiting for some new thread showing up is not sufficient because +# because the successing SELECT showing the thread might catch this thread +# in a very early and short phase. +# process_info si quite often +# CREATE PROCEDURE `t_ps_event`() SQL SECURITY INVOKER SELECT SLEEP(3) +# +let $wait_condition= +SELECT COUNT(*) = 1 FROM information_schema.processlist +WHERE info = 'SELECT SLEEP(3)'; + +--disable_warnings +DROP EVENT IF EXISTS t_ps_event; +--enable_warnings +CREATE EVENT t_ps_event +ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 SECOND +DO SELECT SLEEP(3); + +# Wait till one more thread comes up. +# This must be the event worker thread. +let $wait_timeout= 20; +--source include/wait_condition.inc + +# Show entries belonging to the just started event worker +SELECT name, type, processlist_user, processlist_host, processlist_db, + processlist_command, processlist_info, + IF(parent_thread_id IS NULL, parent_thread_id, 'unified parent_thread_id') + AS unified_parent_thread_id, + role, instrumented +FROM performance_schema.threads +WHERE name LIKE 'thread/sql%' + AND thread_id NOT IN (SELECT thread_id FROM t1) +ORDER BY name; + +# Show parent - child relations between "system" threads +# ------------------------------------------------------ +--horizontal_results +SELECT t2.name AS parent_thread_name, t1.name AS child_thread_name +FROM performance_schema.threads t1 INNER JOIN performance_schema.threads t2 +ON t1.parent_thread_id = t2.thread_id +WHERE t1.name LIKE 'thread/sql%' + AND t1.parent_thread_id IS NOT NULL +ORDER BY parent_thread_name, child_thread_name; + +# Cleanup +# Wait till the event worker disappeared +--source include/no_running_events.inc + |