summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/perfschema/t/alter_table_progress.test
blob: d4933ac9006153d46e0b5ef84d7ad5a7723f95b1 (plain)
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();