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
|
# 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_query_log
eval select $con1_THREAD_ID into @con1_thread_id;
--enable_query_log
--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
--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
# 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();
|