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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
# Test for prepared statement instrumentation
--source include/not_embedded.inc
--source include/have_perfschema.inc
--source include/no_protocol.inc
CREATE DATABASE db;
USE db;
--let $psi_select = SELECT STATEMENT_NAME, SQL_TEXT, COUNT_REPREPARE, COUNT_EXECUTE, SUM_ROWS_SENT, SUM_SELECT_SCAN, SUM_NO_INDEX_USED FROM performance_schema.prepared_statements_instances ORDER BY STATEMENT_NAME, SQL_TEXT
--let $psi_truncate = TRUNCATE TABLE performance_schema.prepared_statements_instances
--let $eshl_select = SELECT EVENT_NAME, SQL_TEXT, OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME FROM performance_schema.events_statements_history_long WHERE CURRENT_SCHEMA='db'
--let $eshl_truncate = TRUNCATE TABLE performance_schema.events_statements_history_long
--eval $psi_truncate
--eval $eshl_truncate
--source suite/perfschema/include/prepared_stmts_setup.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_execution.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
# Truncate to reset the statistics
--eval $psi_truncate
# check whether the statistics are reset
--vertical_results
--eval $psi_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_deallocation.inc
--vertical_results
# select query on prepared_statements_instances table must return empty set
--eval $psi_select
--eval $eshl_select
--horizontal_results
# truncate
--eval $eshl_truncate
#
# Test to check the instrumentation of prepared statements
# when all consumers in setup_consumers are disabled.
#
# Disable all consumers
UPDATE performance_schema.setup_consumers SET ENABLED = 'NO';
--source suite/perfschema/include/prepared_stmts_setup.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_execution.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
--source suite/perfschema/include/prepared_stmts_deallocation.inc
--vertical_results
--eval $psi_select
--eval $eshl_select
--horizontal_results
# truncate
--eval $eshl_truncate
# restore the initial set-up of consumers table
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
#
# Aggregation
#
PREPARE st FROM 'SELECT SUM(1000 + ?) AS total';
--vertical_results
--eval $psi_select
--horizontal_results
SET @d=100;
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
let $i=5;
while($i)
{
SET @d = @d + 100;
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
dec $i;
}
# truncate
--eval $psi_truncate
--vertical_results
--eval $psi_select
--horizontal_results
#
# check whether the instrumented prepared statement is removed from the
# prepared_statement_instances table after de allocation of the prepared
# statement even if instrumentation is disabled
#
# Disable prepared statement instrumentation
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
WHERE NAME like "statement/sql/execute%";
SET @d=3274;
# COUNT_EXECUTE should remain 0. No increment must be seen.
EXECUTE st USING @d;
--vertical_results
--eval $psi_select
--horizontal_results
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO'
WHERE NAME like "statement/sql/prepare%";
DEALLOCATE PREPARE st;
# should return empty set.
--vertical_results
--eval $psi_select
--horizontal_results
# Restore back teh initial set-up of setup_instruments table
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
WHERE NAME like "statement/sql/prepare%";
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'
WHERE NAME like "statement/sql/execute%";
# Reprepare
CREATE TABLE tab(
Id INT,
name CHAR(10),
age INT
);
INSERT INTO tab VALUES(1,"Nakshatr",25),(2,"chanda",24),(3,"tejas",78);
PREPARE st FROM 'SELECT * FROM tab';
--vertical_results
--eval $psi_select
--horizontal_results
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
ALTER TABLE tab DROP COLUMN age;
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
ALTER TABLE tab ADD COLUMN age INT NULL;
EXECUTE st;
--vertical_results
--eval $psi_select
--horizontal_results
# check if the statistics are reset
--eval $psi_truncate
--vertical_results
--eval $psi_select
--horizontal_results
DEALLOCATE PREPARE st;
--vertical_results
--eval $psi_select
--horizontal_results
# clean up
# truncate
--eval $psi_truncate
--eval $eshl_truncate
DROP TABLE tab;
DROP DATABASE db;
|