1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_innodb.inc
--source include/have_perfschema.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
# Presence of the query cache changes query stages,
# causing noise in the test output
#--source include/have_query_cache_disabled.inc
# Setup
connect (con1, localhost, root, , );
let $con1_THREAD_ID=`select thread_id from performance_schema.threads
where PROCESSLIST_ID = connection_id()`;
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1(a int) engine = myisam;
insert into t1 values (1), (2), (3), (4), (5);
--connection default
update performance_schema.threads
set instrumented = 'NO'
where processlist_id = connection_id();
truncate table performance_schema.events_statements_history_long;
truncate table performance_schema.events_stages_history_long;
--disable_cursor_protocol
--disable_query_log
eval select $con1_THREAD_ID into @con1_thread_id;
--enable_query_log
--enable_cursor_protocol
--connection con1
# ALTER TABLE statement to inspect,
# execution should instrument progress
SET DEBUG_SYNC='RESET';
SET DEBUG_SYNC='copy_data_between_tables_before SIGNAL found_row WAIT_FOR wait_row EXECUTE 5';
--send ALTER TABLE t1 engine = innodb;
--connection default
SET DEBUG_SYNC='now WAIT_FOR found_row';
# Find the statement id of the ALTER TABLE
--disable_cursor_protocol
--enable_prepare_warnings
select event_id from performance_schema.events_statements_current
where thread_id = @con1_thread_id into @con1_stmt_id;
--disable_prepare_warnings
--enable_cursor_protocol
# completed 0
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 1
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 2
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 3
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 4
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
--connection con1
# Complete the ALTER TABLE statement.
--reap
# Make sure the ALTER TABLE cleanup is executed,
# as the last stages are after writing back to the client,
# and done asynchronously from the last 'reap'.
select "After payload";
--connection default
--echo # Dumping ALTER TABLE stages
# Print all stages for this ALTER TABLE statement
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_history_long
where (thread_id = @con1_thread_id)
and (nesting_event_id = @con1_stmt_id)
order by thread_id, event_id;
SET DEBUG_SYNC='RESET';
--connection con1
drop table t1;
--disconnect con1
--connection default
update performance_schema.threads
set instrumented = 'YES'
where processlist_id = connection_id();
|