mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
116 lines
4.2 KiB
Text
116 lines
4.2 KiB
Text
|
|
# 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, connection_type,
|
|
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
|
|
|