Merge lp:~vlad-lesin/percona-server/5.6-query_response_time-rw-commands into lp:percona-server/5.6
- 5.6-query_response_time-rw-commands
- Merge into 5.6
Status: | Merged |
---|---|
Approved by: | Laurynas Biveinis |
Approved revision: | no longer in the source branch. |
Merged at revision: | 735 |
Proposed branch: | lp:~vlad-lesin/percona-server/5.6-query_response_time-rw-commands |
Merge into: | lp:percona-server/5.6 |
Diff against target: |
1349 lines (+1130/-30) 10 files modified
mysql-test/include/plugin.defs (+1/-1) plugin/query_response_time/plugin.cc (+60/-2) plugin/query_response_time/query_response_time.cc (+45/-24) plugin/query_response_time/query_response_time.h (+8/-1) plugin/query_response_time/tests/mtr/basic.result (+12/-0) plugin/query_response_time/tests/mtr/query_response_time-rw-begin.inc (+16/-0) plugin/query_response_time/tests/mtr/query_response_time-rw-end.inc (+10/-0) plugin/query_response_time/tests/mtr/query_response_time-rw.result (+765/-0) plugin/query_response_time/tests/mtr/query_response_time-rw.test (+201/-0) sql/sp_instr.cc (+12/-2) |
To merge this branch: | bzr merge lp:~vlad-lesin/percona-server/5.6-query_response_time-rw-commands |
Related bugs: | |
Related blueprints: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Approve | ||
Review via email: mp+243247@code.launchpad.net |
Commit message
Description of the change
This is one more implementation of https:/
The previous implementation was based on MDL(https:/
- LOCK TABLES t1 WRITE would be blocked by an active FTWRL and thus, would be considered a "write"
- moreover, an INSERT/
- EXPLAIN INSERT/
- updates to temporary tables will not be considered writes.
The current implementation is based on checking sql command flags. The downside is that queries which are supposed to change data but does not change it are treated as 'write'(for example 'UPDATE ... WHERE condition' when condition is false).
http://
Laurynas Biveinis (laurynas-biveinis) wrote : | # |
Vlad Lesin (vlad-lesin) wrote : | # |
> - IMHO the testcase needs not bother with MyISAM testing, even
> more so as the current implementation is above the SE
> level. That would shorten .result three times
I do not think so because this is regression test and it can be that test results depend on db engine for some implementations, if we change this implementation I want be sure we don't break the functionality for both MyISAM and InnoDB.
http://
Laurynas Biveinis (laurynas-biveinis) wrote : | # |
As discussed yesterday on IRC:
- THD::update_
do you know whether updating the field might cause the change of behavior somewhere else?
-
64 - query_response_
65 + query_response_
before: utime after lock
after: start utime
why?
Vlad Lesin (vlad-lesin) wrote : | # |
> As discussed yesterday on IRC:
>
> - THD::update_
> do you know whether updating the field might cause the change of behavior
> somewhere else?
I have checked the code and did not find side effects now. Moreover I ran tests and everything seems ok: http://
> -
> 64 - query_response_
> thd->utime_
> 65 + query_response_
> thd->start_utime);
> before: utime after lock
> after: start utime
> why?
I have changed it for some reason, but unfortunately I don't remember the reason. I tested "utime_after_lock" variant both with regression test and manually with different test cases and it works well so I decided to revert this line.
Laurynas Biveinis (laurynas-biveinis) : | # |
Preview Diff
1 | === modified file 'mysql-test/include/plugin.defs' | |||
2 | --- mysql-test/include/plugin.defs 2014-12-01 15:25:32 +0000 | |||
3 | +++ mysql-test/include/plugin.defs 2015-02-04 16:22:40 +0000 | |||
4 | @@ -49,5 +49,5 @@ | |||
5 | 49 | scalability_metrics plugin/scalability_metrics SCALABILITY_METRICS | 49 | scalability_metrics plugin/scalability_metrics SCALABILITY_METRICS |
6 | 50 | adt_null plugin/audit_null AUDIT_NULL | 50 | adt_null plugin/audit_null AUDIT_NULL |
7 | 51 | audit_log plugin/audit_log AUDIT_LOG audit_log | 51 | audit_log plugin/audit_log AUDIT_LOG audit_log |
9 | 52 | query_response_time plugin/query_response_time PLUGIN_QUERY_RESPONSE_TIME QUERY_RESPONSE_TIME_AUDIT,QUERY_RESPONSE_TIME | 52 | query_response_time plugin/query_response_time PLUGIN_QUERY_RESPONSE_TIME QUERY_RESPONSE_TIME_AUDIT,QUERY_RESPONSE_TIME,QUERY_RESPONSE_TIME_READ,QUERY_RESPONSE_TIME_WRITE |
10 | 53 | handlersocket plugin/HandlerSocket-Plugin-for-MySQL HANDLER_SOCKET | 53 | handlersocket plugin/HandlerSocket-Plugin-for-MySQL HANDLER_SOCKET |
11 | 54 | 54 | ||
12 | === modified file 'plugin/query_response_time/plugin.cc' | |||
13 | --- plugin/query_response_time/plugin.cc 2014-09-25 06:33:00 +0000 | |||
14 | +++ plugin/query_response_time/plugin.cc 2015-02-04 16:22:40 +0000 | |||
15 | @@ -19,6 +19,7 @@ | |||
16 | 19 | #include <sql_show.h> | 19 | #include <sql_show.h> |
17 | 20 | #include <mysql/plugin_audit.h> | 20 | #include <mysql/plugin_audit.h> |
18 | 21 | #include <sp_instr.h> | 21 | #include <sp_instr.h> |
19 | 22 | #include <sql_parse.h> | ||
20 | 22 | #include "query_response_time.h" | 23 | #include "query_response_time.h" |
21 | 23 | 24 | ||
22 | 24 | 25 | ||
23 | @@ -130,6 +131,31 @@ | |||
24 | 130 | if (event_general->event_subclass == MYSQL_AUDIT_GENERAL_STATUS && | 131 | if (event_general->event_subclass == MYSQL_AUDIT_GENERAL_STATUS && |
25 | 131 | opt_query_response_time_stats) | 132 | opt_query_response_time_stats) |
26 | 132 | { | 133 | { |
27 | 134 | /* | ||
28 | 135 | Get sql command id of currently executed statement | ||
29 | 136 | inside of stored function or procedure. If the command is "PREPARE" | ||
30 | 137 | don't get the statement inside of "PREPARE". If the statement | ||
31 | 138 | is not inside of stored function or procedure get sql command id | ||
32 | 139 | of the statement itself. | ||
33 | 140 | */ | ||
34 | 141 | enum_sql_command sql_command= | ||
35 | 142 | ( | ||
36 | 143 | thd->lex->sql_command != SQLCOM_PREPARE && | ||
37 | 144 | thd->sp_runtime_ctx && | ||
38 | 145 | thd->stmt_arena && | ||
39 | 146 | ((sp_lex_instr *)thd->stmt_arena)->get_command() >= 0 | ||
40 | 147 | ) ? | ||
41 | 148 | (enum_sql_command)((sp_lex_instr *)thd->stmt_arena)->get_command() : | ||
42 | 149 | thd->lex->sql_command; | ||
43 | 150 | if (sql_command == SQLCOM_EXECUTE) | ||
44 | 151 | { | ||
45 | 152 | LEX_STRING *name= &thd->lex->prepared_stmt_name; | ||
46 | 153 | Statement *stmt= | ||
47 | 154 | (Statement *)thd->stmt_map.find_by_name(name); | ||
48 | 155 | sql_command= stmt->lex->sql_command; | ||
49 | 156 | } | ||
50 | 157 | QUERY_TYPE query_type= | ||
51 | 158 | (sql_command_flags[sql_command] & CF_CHANGES_DATA) ? WRITE : READ; | ||
52 | 133 | #ifndef DBUG_OFF | 159 | #ifndef DBUG_OFF |
53 | 134 | if (THDVAR(thd, exec_time_debug)) { | 160 | if (THDVAR(thd, exec_time_debug)) { |
54 | 135 | ulonglong t = THDVAR(thd, exec_time_debug); | 161 | ulonglong t = THDVAR(thd, exec_time_debug); |
55 | @@ -139,11 +165,13 @@ | |||
56 | 139 | SQLCOM_SET_OPTION )) { | 165 | SQLCOM_SET_OPTION )) { |
57 | 140 | t = 0; | 166 | t = 0; |
58 | 141 | } | 167 | } |
60 | 142 | query_response_time_collect(t); | 168 | query_response_time_collect(query_type, t); |
61 | 143 | } | 169 | } |
62 | 144 | else | 170 | else |
63 | 145 | #endif | 171 | #endif |
65 | 146 | query_response_time_collect(thd->utime_after_query - thd->utime_after_lock); | 172 | query_response_time_collect(query_type, |
66 | 173 | thd->utime_after_query - | ||
67 | 174 | thd->utime_after_lock); | ||
68 | 147 | } | 175 | } |
69 | 148 | } | 176 | } |
70 | 149 | 177 | ||
71 | @@ -172,6 +200,36 @@ | |||
72 | 172 | 0, | 200 | 0, |
73 | 173 | }, | 201 | }, |
74 | 174 | { | 202 | { |
75 | 203 | MYSQL_INFORMATION_SCHEMA_PLUGIN, | ||
76 | 204 | &query_response_time_info_descriptor, | ||
77 | 205 | "QUERY_RESPONSE_TIME_READ", | ||
78 | 206 | "Percona and Sergey Vojtovich", | ||
79 | 207 | "Query Response Time Distribution INFORMATION_SCHEMA Plugin", | ||
80 | 208 | PLUGIN_LICENSE_GPL, | ||
81 | 209 | query_response_time_info_init, | ||
82 | 210 | query_response_time_info_deinit, | ||
83 | 211 | 0x0100, | ||
84 | 212 | NULL, | ||
85 | 213 | NULL, | ||
86 | 214 | (void *)"1.0", | ||
87 | 215 | 0, | ||
88 | 216 | }, | ||
89 | 217 | { | ||
90 | 218 | MYSQL_INFORMATION_SCHEMA_PLUGIN, | ||
91 | 219 | &query_response_time_info_descriptor, | ||
92 | 220 | "QUERY_RESPONSE_TIME_WRITE", | ||
93 | 221 | "Percona and Sergey Vojtovich", | ||
94 | 222 | "Query Response Time Distribution INFORMATION_SCHEMA Plugin", | ||
95 | 223 | PLUGIN_LICENSE_GPL, | ||
96 | 224 | query_response_time_info_init, | ||
97 | 225 | query_response_time_info_deinit, | ||
98 | 226 | 0x0100, | ||
99 | 227 | NULL, | ||
100 | 228 | NULL, | ||
101 | 229 | (void *)"1.0", | ||
102 | 230 | 0, | ||
103 | 231 | }, | ||
104 | 232 | { | ||
105 | 175 | MYSQL_AUDIT_PLUGIN, | 233 | MYSQL_AUDIT_PLUGIN, |
106 | 176 | &query_response_time_audit_descriptor, | 234 | &query_response_time_audit_descriptor, |
107 | 177 | "QUERY_RESPONSE_TIME_AUDIT", | 235 | "QUERY_RESPONSE_TIME_AUDIT", |
108 | 178 | 236 | ||
109 | === modified file 'plugin/query_response_time/query_response_time.cc' | |||
110 | --- plugin/query_response_time/query_response_time.cc 2014-09-25 06:33:00 +0000 | |||
111 | +++ plugin/query_response_time/query_response_time.cc 2015-02-04 16:22:40 +0000 | |||
112 | @@ -170,17 +170,17 @@ | |||
113 | 170 | { | 170 | { |
114 | 171 | my_atomic_rwlock_destroy(&time_collector_lock); | 171 | my_atomic_rwlock_destroy(&time_collector_lock); |
115 | 172 | } | 172 | } |
117 | 173 | uint32 count(uint index) | 173 | uint32 count(QUERY_TYPE type, uint index) |
118 | 174 | { | 174 | { |
119 | 175 | my_atomic_rwlock_rdlock(&time_collector_lock); | 175 | my_atomic_rwlock_rdlock(&time_collector_lock); |
121 | 176 | uint32 result= my_atomic_load32((int32*)&m_count[index]); | 176 | uint32 result= my_atomic_load32((int32*)&m_count[type][index]); |
122 | 177 | my_atomic_rwlock_rdunlock(&time_collector_lock); | 177 | my_atomic_rwlock_rdunlock(&time_collector_lock); |
123 | 178 | return result; | 178 | return result; |
124 | 179 | } | 179 | } |
126 | 180 | uint64 total(uint index) | 180 | uint64 total(QUERY_TYPE type, uint index) |
127 | 181 | { | 181 | { |
128 | 182 | my_atomic_rwlock_rdlock(&time_collector_lock); | 182 | my_atomic_rwlock_rdlock(&time_collector_lock); |
130 | 183 | uint64 result= my_atomic_load64((int64*)&m_total[index]); | 183 | uint64 result= my_atomic_load64((int64*)&m_total[type][index]); |
131 | 184 | my_atomic_rwlock_rdunlock(&time_collector_lock); | 184 | my_atomic_rwlock_rdunlock(&time_collector_lock); |
132 | 185 | return result; | 185 | return result; |
133 | 186 | } | 186 | } |
134 | @@ -192,7 +192,7 @@ | |||
135 | 192 | memset((void*)&m_total,0,sizeof(m_total)); | 192 | memset((void*)&m_total,0,sizeof(m_total)); |
136 | 193 | my_atomic_rwlock_wrunlock(&time_collector_lock); | 193 | my_atomic_rwlock_wrunlock(&time_collector_lock); |
137 | 194 | } | 194 | } |
139 | 195 | void collect(uint64 time) | 195 | void collect(QUERY_TYPE type, uint64 time) |
140 | 196 | { | 196 | { |
141 | 197 | int i= 0; | 197 | int i= 0; |
142 | 198 | for(int count= m_utility->bound_count(); count > i; ++i) | 198 | for(int count= m_utility->bound_count(); count > i; ++i) |
143 | @@ -200,8 +200,10 @@ | |||
144 | 200 | if(m_utility->bound(i) > time) | 200 | if(m_utility->bound(i) > time) |
145 | 201 | { | 201 | { |
146 | 202 | my_atomic_rwlock_wrlock(&time_collector_lock); | 202 | my_atomic_rwlock_wrlock(&time_collector_lock); |
149 | 203 | my_atomic_add32((int32*)(&m_count[i]), 1); | 203 | my_atomic_add32((int32*)(&m_count[0][i]), 1); |
150 | 204 | my_atomic_add64((int64*)(&m_total[i]), time); | 204 | my_atomic_add64((int64*)(&m_total[0][i]), time); |
151 | 205 | my_atomic_add32((int32*)(&m_count[type][i]), 1); | ||
152 | 206 | my_atomic_add64((int64*)(&m_total[type][i]), time); | ||
153 | 205 | my_atomic_rwlock_wrunlock(&time_collector_lock); | 207 | my_atomic_rwlock_wrunlock(&time_collector_lock); |
154 | 206 | break; | 208 | break; |
155 | 207 | } | 209 | } |
156 | @@ -209,12 +211,18 @@ | |||
157 | 209 | } | 211 | } |
158 | 210 | private: | 212 | private: |
159 | 211 | utility* m_utility; | 213 | utility* m_utility; |
163 | 212 | /* The lock for atomic operations on m_count and m_total. Only actually | 214 | /* The lock for atomic operations on |
164 | 213 | used on architectures that do not have atomic implementation of atomic | 215 | m_count, m_total, m_r_count, m_r_total, m_w_count, m_w_total. |
165 | 214 | operations. */ | 216 | Only actually used on architectures that do not have atomic |
166 | 217 | implementation of atomic operations. */ | ||
167 | 215 | my_atomic_rwlock_t time_collector_lock; | 218 | my_atomic_rwlock_t time_collector_lock; |
170 | 216 | uint32 m_count[OVERALL_POWER_COUNT + 1]; | 219 | /* |
171 | 217 | uint64 m_total[OVERALL_POWER_COUNT + 1]; | 220 | The first row is for overall statistics, |
172 | 221 | the second row is for 'read' queries, | ||
173 | 222 | the third row is for 'write' queries. | ||
174 | 223 | */ | ||
175 | 224 | uint32 m_count[3][OVERALL_POWER_COUNT + 1]; | ||
176 | 225 | uint64 m_total[3][OVERALL_POWER_COUNT + 1]; | ||
177 | 218 | }; | 226 | }; |
178 | 219 | 227 | ||
179 | 220 | class collector | 228 | class collector |
180 | @@ -231,7 +239,9 @@ | |||
181 | 231 | m_utility.setup(opt_query_response_time_range_base); | 239 | m_utility.setup(opt_query_response_time_range_base); |
182 | 232 | m_time.flush(); | 240 | m_time.flush(); |
183 | 233 | } | 241 | } |
185 | 234 | int fill(THD* thd, TABLE_LIST *tables, COND *cond) | 242 | int fill(QUERY_TYPE type, |
186 | 243 | THD* thd, | ||
187 | 244 | TABLE_LIST *tables, COND *cond) | ||
188 | 235 | { | 245 | { |
189 | 236 | DBUG_ENTER("fill_schema_query_response_time"); | 246 | DBUG_ENTER("fill_schema_query_response_time"); |
190 | 237 | TABLE *table= static_cast<TABLE*>(tables->table); | 247 | TABLE *table= static_cast<TABLE*>(tables->table); |
191 | @@ -250,10 +260,10 @@ | |||
192 | 250 | else | 260 | else |
193 | 251 | { | 261 | { |
194 | 252 | print_time(time, sizeof(time), TIME_STRING_FORMAT, this->bound(i)); | 262 | print_time(time, sizeof(time), TIME_STRING_FORMAT, this->bound(i)); |
196 | 253 | print_time(total, sizeof(total), TOTAL_STRING_FORMAT, this->total(i)); | 263 | print_time(total, sizeof(total), TOTAL_STRING_FORMAT, this->total(type, i)); |
197 | 254 | } | 264 | } |
198 | 255 | fields[0]->store(time,strlen(time),system_charset_info); | 265 | fields[0]->store(time,strlen(time),system_charset_info); |
200 | 256 | fields[1]->store(this->count(i)); | 266 | fields[1]->store(this->count(type, i)); |
201 | 257 | fields[2]->store(total,strlen(total),system_charset_info); | 267 | fields[2]->store(total,strlen(total),system_charset_info); |
202 | 258 | if (schema_table_store_record(thd, table)) | 268 | if (schema_table_store_record(thd, table)) |
203 | 259 | { | 269 | { |
204 | @@ -262,9 +272,9 @@ | |||
205 | 262 | } | 272 | } |
206 | 263 | DBUG_RETURN(0); | 273 | DBUG_RETURN(0); |
207 | 264 | } | 274 | } |
209 | 265 | void collect(ulonglong time) | 275 | void collect(QUERY_TYPE type, ulonglong time) |
210 | 266 | { | 276 | { |
212 | 267 | m_time.collect(time); | 277 | m_time.collect(type, time); |
213 | 268 | } | 278 | } |
214 | 269 | uint bound_count() const | 279 | uint bound_count() const |
215 | 270 | { | 280 | { |
216 | @@ -274,13 +284,13 @@ | |||
217 | 274 | { | 284 | { |
218 | 275 | return m_utility.bound(index); | 285 | return m_utility.bound(index); |
219 | 276 | } | 286 | } |
221 | 277 | ulonglong count(uint index) | 287 | ulonglong count(QUERY_TYPE type, uint index) |
222 | 278 | { | 288 | { |
224 | 279 | return m_time.count(index); | 289 | return m_time.count(type, index); |
225 | 280 | } | 290 | } |
227 | 281 | ulonglong total(uint index) | 291 | ulonglong total(QUERY_TYPE type, uint index) |
228 | 282 | { | 292 | { |
230 | 283 | return m_time.total(index); | 293 | return m_time.total(type, index); |
231 | 284 | } | 294 | } |
232 | 285 | private: | 295 | private: |
233 | 286 | utility m_utility; | 296 | utility m_utility; |
234 | @@ -304,12 +314,23 @@ | |||
235 | 304 | { | 314 | { |
236 | 305 | query_response_time::g_collector.flush(); | 315 | query_response_time::g_collector.flush(); |
237 | 306 | } | 316 | } |
239 | 307 | void query_response_time_collect(ulonglong query_time) | 317 | |
240 | 318 | void query_response_time_collect(QUERY_TYPE type, | ||
241 | 319 | ulonglong query_time) | ||
242 | 308 | { | 320 | { |
244 | 309 | query_response_time::g_collector.collect(query_time); | 321 | query_response_time::g_collector.collect(type, query_time); |
245 | 310 | } | 322 | } |
246 | 311 | 323 | ||
247 | 312 | int query_response_time_fill(THD* thd, TABLE_LIST *tables, COND *cond) | 324 | int query_response_time_fill(THD* thd, TABLE_LIST *tables, COND *cond) |
248 | 313 | { | 325 | { |
250 | 314 | return query_response_time::g_collector.fill(thd,tables,cond); | 326 | QUERY_TYPE query_type= ANY; |
251 | 327 | if (!strncmp(tables->table->alias, | ||
252 | 328 | "QUERY_RESPONSE_TIME_READ", | ||
253 | 329 | sizeof("QUERY_RESPONSE_TIME_READ") - 1)) | ||
254 | 330 | query_type= READ; | ||
255 | 331 | else if (!strncmp(tables->table->alias, | ||
256 | 332 | "QUERY_RESPONSE_TIME_WRITE", | ||
257 | 333 | sizeof("QUERY_RESPONSE_TIME_WRITE") - 1)) | ||
258 | 334 | query_type= WRITE; | ||
259 | 335 | return query_response_time::g_collector.fill(query_type, thd, tables, cond); | ||
260 | 315 | } | 336 | } |
261 | 316 | 337 | ||
262 | === modified file 'plugin/query_response_time/query_response_time.h' | |||
263 | --- plugin/query_response_time/query_response_time.h 2014-09-25 06:33:00 +0000 | |||
264 | +++ plugin/query_response_time/query_response_time.h 2015-02-04 16:22:40 +0000 | |||
265 | @@ -66,6 +66,13 @@ | |||
266 | 66 | MY_MAX( (QRT_TOTAL_STRING_POSITIVE_POWER_LENGTH + 1 /* '.' */ + 6 /*QRT_TOTAL_STRING_NEGATIVE_POWER_LENGTH*/), \ | 66 | MY_MAX( (QRT_TOTAL_STRING_POSITIVE_POWER_LENGTH + 1 /* '.' */ + 6 /*QRT_TOTAL_STRING_NEGATIVE_POWER_LENGTH*/), \ |
267 | 67 | (sizeof(QRT_TIME_OVERFLOW) - 1) ) | 67 | (sizeof(QRT_TIME_OVERFLOW) - 1) ) |
268 | 68 | 68 | ||
269 | 69 | enum QUERY_TYPE | ||
270 | 70 | { | ||
271 | 71 | ANY= 0, | ||
272 | 72 | READ= 1, | ||
273 | 73 | WRITE= 2 | ||
274 | 74 | }; | ||
275 | 75 | |||
276 | 69 | extern ST_SCHEMA_TABLE query_response_time_table; | 76 | extern ST_SCHEMA_TABLE query_response_time_table; |
277 | 70 | 77 | ||
278 | 71 | typedef class Item COND; | 78 | typedef class Item COND; |
279 | @@ -73,7 +80,7 @@ | |||
280 | 73 | extern void query_response_time_init (); | 80 | extern void query_response_time_init (); |
281 | 74 | extern void query_response_time_free (); | 81 | extern void query_response_time_free (); |
282 | 75 | extern void query_response_time_flush (); | 82 | extern void query_response_time_flush (); |
284 | 76 | extern void query_response_time_collect(ulonglong query_time); | 83 | extern void query_response_time_collect(QUERY_TYPE type, ulonglong query_time); |
285 | 77 | extern int query_response_time_fill (THD* thd, TABLE_LIST *tables, COND *cond); | 84 | extern int query_response_time_fill (THD* thd, TABLE_LIST *tables, COND *cond); |
286 | 78 | 85 | ||
287 | 79 | extern ulong opt_query_response_time_range_base; | 86 | extern ulong opt_query_response_time_range_base; |
288 | 80 | 87 | ||
289 | === modified file 'plugin/query_response_time/tests/mtr/basic.result' | |||
290 | --- plugin/query_response_time/tests/mtr/basic.result 2014-09-25 06:33:00 +0000 | |||
291 | +++ plugin/query_response_time/tests/mtr/basic.result 2015-02-04 16:22:40 +0000 | |||
292 | @@ -23,6 +23,18 @@ | |||
293 | 23 | PLUGIN_AUTHOR Percona and Sergey Vojtovich | 23 | PLUGIN_AUTHOR Percona and Sergey Vojtovich |
294 | 24 | PLUGIN_DESCRIPTION Query Response Time Distribution INFORMATION_SCHEMA Plugin | 24 | PLUGIN_DESCRIPTION Query Response Time Distribution INFORMATION_SCHEMA Plugin |
295 | 25 | PLUGIN_LICENSE GPL | 25 | PLUGIN_LICENSE GPL |
296 | 26 | PLUGIN_NAME QUERY_RESPONSE_TIME_READ | ||
297 | 27 | PLUGIN_VERSION 1.0 | ||
298 | 28 | PLUGIN_TYPE INFORMATION SCHEMA | ||
299 | 29 | PLUGIN_AUTHOR Percona and Sergey Vojtovich | ||
300 | 30 | PLUGIN_DESCRIPTION Query Response Time Distribution INFORMATION_SCHEMA Plugin | ||
301 | 31 | PLUGIN_LICENSE GPL | ||
302 | 32 | PLUGIN_NAME QUERY_RESPONSE_TIME_WRITE | ||
303 | 33 | PLUGIN_VERSION 1.0 | ||
304 | 34 | PLUGIN_TYPE INFORMATION SCHEMA | ||
305 | 35 | PLUGIN_AUTHOR Percona and Sergey Vojtovich | ||
306 | 36 | PLUGIN_DESCRIPTION Query Response Time Distribution INFORMATION_SCHEMA Plugin | ||
307 | 37 | PLUGIN_LICENSE GPL | ||
308 | 26 | SET GLOBAL QUERY_RESPONSE_TIME_STATS=1; | 38 | SET GLOBAL QUERY_RESPONSE_TIME_STATS=1; |
309 | 27 | SELECT 1; | 39 | SELECT 1; |
310 | 28 | 1 | 40 | 1 |
311 | 29 | 41 | ||
312 | === added file 'plugin/query_response_time/tests/mtr/query_response_time-rw-begin.inc' | |||
313 | --- plugin/query_response_time/tests/mtr/query_response_time-rw-begin.inc 1970-01-01 00:00:00 +0000 | |||
314 | +++ plugin/query_response_time/tests/mtr/query_response_time-rw-begin.inc 2015-02-04 16:22:40 +0000 | |||
315 | @@ -0,0 +1,16 @@ | |||
316 | 1 | --disable_query_log | ||
317 | 2 | --disable_result_log | ||
318 | 3 | SET GLOBAL QUERY_RESPONSE_TIME_STATS = 0; | ||
319 | 4 | SET GLOBAL QUERY_RESPONSE_TIME_FLUSH = 1; | ||
320 | 5 | SET SESSION QUERY_RESPONSE_TIME_EXEC_TIME_DEBUG = 500000; | ||
321 | 6 | --enable_query_log | ||
322 | 7 | --enable_result_log | ||
323 | 8 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
324 | 9 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
325 | 10 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
326 | 11 | --disable_query_log | ||
327 | 12 | --disable_result_log | ||
328 | 13 | SET GLOBAL QUERY_RESPONSE_TIME_STATS = 1; | ||
329 | 14 | --enable_query_log | ||
330 | 15 | --enable_result_log | ||
331 | 16 | --echo ------------------Test body begin-------------------- | ||
332 | 0 | 17 | ||
333 | === added file 'plugin/query_response_time/tests/mtr/query_response_time-rw-end.inc' | |||
334 | --- plugin/query_response_time/tests/mtr/query_response_time-rw-end.inc 1970-01-01 00:00:00 +0000 | |||
335 | +++ plugin/query_response_time/tests/mtr/query_response_time-rw-end.inc 2015-02-04 16:22:40 +0000 | |||
336 | @@ -0,0 +1,10 @@ | |||
337 | 1 | --echo ------------------Test body end---------------------- | ||
338 | 2 | --disable_query_log | ||
339 | 3 | --disable_result_log | ||
340 | 4 | SET GLOBAL QUERY_RESPONSE_TIME_STATS = 0; | ||
341 | 5 | SET SESSION QUERY_RESPONSE_TIME_EXEC_TIME_DEBUG = DEFAULT; | ||
342 | 6 | --enable_query_log | ||
343 | 7 | --enable_result_log | ||
344 | 8 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
345 | 9 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
346 | 10 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
347 | 0 | 11 | ||
348 | === added file 'plugin/query_response_time/tests/mtr/query_response_time-rw.result' | |||
349 | --- plugin/query_response_time/tests/mtr/query_response_time-rw.result 1970-01-01 00:00:00 +0000 | |||
350 | +++ plugin/query_response_time/tests/mtr/query_response_time-rw.result 2015-02-04 16:22:40 +0000 | |||
351 | @@ -0,0 +1,765 @@ | |||
352 | 1 | CREATE FUNCTION DML_FUNC() | ||
353 | 2 | RETURNS INT | ||
354 | 3 | BEGIN | ||
355 | 4 | INSERT INTO t1 (b) VALUES (1), (2); | ||
356 | 5 | UPDATE t1 SET b = 1; | ||
357 | 6 | RETURN 1; | ||
358 | 7 | END| | ||
359 | 8 | CREATE PROCEDURE NESTED_PROC() | ||
360 | 9 | BEGIN | ||
361 | 10 | SELECT DML_FUNC(); | ||
362 | 11 | END| | ||
363 | 12 | SET default_storage_engine=InnoDB; | ||
364 | 13 | |||
365 | 14 | ============================ | ||
366 | 15 | = Test for simple DML and DDL | ||
367 | 16 | ============================ | ||
368 | 17 | |||
369 | 18 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
370 | 19 | TIME COUNT TOTAL | ||
371 | 20 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
372 | 21 | TIME COUNT TOTAL | ||
373 | 22 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
374 | 23 | TIME COUNT TOTAL | ||
375 | 24 | ------------------Test body begin-------------------- | ||
376 | 25 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
377 | 26 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
378 | 27 | INSERT INTO t1 (b) VALUES (1), (2); | ||
379 | 28 | UPDATE t1 SET b = 1; | ||
380 | 29 | SELECT * FROM t1; | ||
381 | 30 | a b | ||
382 | 31 | 1 1 | ||
383 | 32 | 2 1 | ||
384 | 33 | DELETE FROM t1; | ||
385 | 34 | ALTER TABLE t1 ADD COLUMN (c INT); | ||
386 | 35 | DROP TABLE t1; | ||
387 | 36 | ------------------Test body end---------------------- | ||
388 | 37 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
389 | 38 | TIME COUNT TOTAL | ||
390 | 39 | 0.000001 1 0.000000 | ||
391 | 40 | 1.000000 7 3.500000 | ||
392 | 41 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
393 | 42 | TIME COUNT TOTAL | ||
394 | 43 | 0.000001 1 0.000000 | ||
395 | 44 | 1.000000 1 0.500000 | ||
396 | 45 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
397 | 46 | TIME COUNT TOTAL | ||
398 | 47 | 1.000000 6 3.000000 | ||
399 | 48 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
400 | 49 | b INT(10) UNSIGNED NOT NULL DEFAULT 0); | ||
401 | 50 | |||
402 | 51 | ============================ | ||
403 | 52 | = Test for SELECT+DML | ||
404 | 53 | ============================ | ||
405 | 54 | |||
406 | 55 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
407 | 56 | TIME COUNT TOTAL | ||
408 | 57 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
409 | 58 | TIME COUNT TOTAL | ||
410 | 59 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
411 | 60 | TIME COUNT TOTAL | ||
412 | 61 | ------------------Test body begin-------------------- | ||
413 | 62 | SELECT DML_FUNC(); | ||
414 | 63 | DML_FUNC() | ||
415 | 64 | 1 | ||
416 | 65 | ------------------Test body end---------------------- | ||
417 | 66 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
418 | 67 | TIME COUNT TOTAL | ||
419 | 68 | 0.000001 1 0.000000 | ||
420 | 69 | 1.000000 3 1.500000 | ||
421 | 70 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
422 | 71 | TIME COUNT TOTAL | ||
423 | 72 | 0.000001 1 0.000000 | ||
424 | 73 | 1.000000 1 0.500000 | ||
425 | 74 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
426 | 75 | TIME COUNT TOTAL | ||
427 | 76 | 1.000000 2 1.000000 | ||
428 | 77 | |||
429 | 78 | ============================ | ||
430 | 79 | = Test for nested calls | ||
431 | 80 | ============================ | ||
432 | 81 | |||
433 | 82 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
434 | 83 | TIME COUNT TOTAL | ||
435 | 84 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
436 | 85 | TIME COUNT TOTAL | ||
437 | 86 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
438 | 87 | TIME COUNT TOTAL | ||
439 | 88 | ------------------Test body begin-------------------- | ||
440 | 89 | CALL NESTED_PROC(); | ||
441 | 90 | DML_FUNC() | ||
442 | 91 | 1 | ||
443 | 92 | ------------------Test body end---------------------- | ||
444 | 93 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
445 | 94 | TIME COUNT TOTAL | ||
446 | 95 | 0.000001 1 0.000000 | ||
447 | 96 | 1.000000 4 2.000000 | ||
448 | 97 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
449 | 98 | TIME COUNT TOTAL | ||
450 | 99 | 0.000001 1 0.000000 | ||
451 | 100 | 1.000000 2 1.000000 | ||
452 | 101 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
453 | 102 | TIME COUNT TOTAL | ||
454 | 103 | 1.000000 2 1.000000 | ||
455 | 104 | |||
456 | 105 | ============================ | ||
457 | 106 | = Test for 'PREPARE' | ||
458 | 107 | ============================ | ||
459 | 108 | |||
460 | 109 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
461 | 110 | TIME COUNT TOTAL | ||
462 | 111 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
463 | 112 | TIME COUNT TOTAL | ||
464 | 113 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
465 | 114 | TIME COUNT TOTAL | ||
466 | 115 | ------------------Test body begin-------------------- | ||
467 | 116 | PREPARE rw_stmt FROM 'DELETE FROM t1'; | ||
468 | 117 | PREPARE ro_stmt FROM 'SELECT * FROM t1'; | ||
469 | 118 | PREPARE select_dml_stmt FROM 'SELECT DML_FUNC()'; | ||
470 | 119 | PREPARE nested_call_stmt FROM 'CALL NESTED_PROC()'; | ||
471 | 120 | ------------------Test body end---------------------- | ||
472 | 121 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
473 | 122 | TIME COUNT TOTAL | ||
474 | 123 | 0.000001 1 0.000000 | ||
475 | 124 | 1.000000 4 2.000000 | ||
476 | 125 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
477 | 126 | TIME COUNT TOTAL | ||
478 | 127 | 0.000001 1 0.000000 | ||
479 | 128 | 1.000000 4 2.000000 | ||
480 | 129 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
481 | 130 | TIME COUNT TOTAL | ||
482 | 131 | |||
483 | 132 | ============================ | ||
484 | 133 | = Test for 'EXECUTE' | ||
485 | 134 | ============================ | ||
486 | 135 | |||
487 | 136 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
488 | 137 | TIME COUNT TOTAL | ||
489 | 138 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
490 | 139 | TIME COUNT TOTAL | ||
491 | 140 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
492 | 141 | TIME COUNT TOTAL | ||
493 | 142 | ------------------Test body begin-------------------- | ||
494 | 143 | EXECUTE rw_stmt; | ||
495 | 144 | EXECUTE ro_stmt; | ||
496 | 145 | a b | ||
497 | 146 | EXECUTE select_dml_stmt; | ||
498 | 147 | DML_FUNC() | ||
499 | 148 | 1 | ||
500 | 149 | EXECUTE nested_call_stmt; | ||
501 | 150 | DML_FUNC() | ||
502 | 151 | 1 | ||
503 | 152 | ------------------Test body end---------------------- | ||
504 | 153 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
505 | 154 | TIME COUNT TOTAL | ||
506 | 155 | 0.000001 1 0.000000 | ||
507 | 156 | 1.000000 9 4.500000 | ||
508 | 157 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
509 | 158 | TIME COUNT TOTAL | ||
510 | 159 | 0.000001 1 0.000000 | ||
511 | 160 | 1.000000 4 2.000000 | ||
512 | 161 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
513 | 162 | TIME COUNT TOTAL | ||
514 | 163 | 1.000000 5 2.500000 | ||
515 | 164 | |||
516 | 165 | ============================ | ||
517 | 166 | = Test for 'DEALLOCATE PREPARE' | ||
518 | 167 | ============================ | ||
519 | 168 | |||
520 | 169 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
521 | 170 | TIME COUNT TOTAL | ||
522 | 171 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
523 | 172 | TIME COUNT TOTAL | ||
524 | 173 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
525 | 174 | TIME COUNT TOTAL | ||
526 | 175 | ------------------Test body begin-------------------- | ||
527 | 176 | DEALLOCATE PREPARE rw_stmt; | ||
528 | 177 | DEALLOCATE PREPARE ro_stmt; | ||
529 | 178 | DEALLOCATE PREPARE select_dml_stmt; | ||
530 | 179 | DEALLOCATE PREPARE nested_call_stmt; | ||
531 | 180 | ------------------Test body end---------------------- | ||
532 | 181 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
533 | 182 | TIME COUNT TOTAL | ||
534 | 183 | 0.000001 1 0.000000 | ||
535 | 184 | 1.000000 4 2.000000 | ||
536 | 185 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
537 | 186 | TIME COUNT TOTAL | ||
538 | 187 | 0.000001 1 0.000000 | ||
539 | 188 | 1.000000 4 2.000000 | ||
540 | 189 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
541 | 190 | TIME COUNT TOTAL | ||
542 | 191 | |||
543 | 192 | ============================ | ||
544 | 193 | = Test for transactions | ||
545 | 194 | ============================ | ||
546 | 195 | |||
547 | 196 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
548 | 197 | TIME COUNT TOTAL | ||
549 | 198 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
550 | 199 | TIME COUNT TOTAL | ||
551 | 200 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
552 | 201 | TIME COUNT TOTAL | ||
553 | 202 | ------------------Test body begin-------------------- | ||
554 | 203 | BEGIN; | ||
555 | 204 | SELECT * FROM t1; | ||
556 | 205 | a b | ||
557 | 206 | 5 1 | ||
558 | 207 | 6 1 | ||
559 | 208 | 7 1 | ||
560 | 209 | 8 1 | ||
561 | 210 | COMMIT; | ||
562 | 211 | ------------------Test body end---------------------- | ||
563 | 212 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
564 | 213 | TIME COUNT TOTAL | ||
565 | 214 | 0.000001 1 0.000000 | ||
566 | 215 | 1.000000 3 1.500000 | ||
567 | 216 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
568 | 217 | TIME COUNT TOTAL | ||
569 | 218 | 0.000001 1 0.000000 | ||
570 | 219 | 1.000000 3 1.500000 | ||
571 | 220 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
572 | 221 | TIME COUNT TOTAL | ||
573 | 222 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
574 | 223 | TIME COUNT TOTAL | ||
575 | 224 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
576 | 225 | TIME COUNT TOTAL | ||
577 | 226 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
578 | 227 | TIME COUNT TOTAL | ||
579 | 228 | ------------------Test body begin-------------------- | ||
580 | 229 | BEGIN; | ||
581 | 230 | INSERT INTO t1 (b) VALUES (1), (2); | ||
582 | 231 | UPDATE t1 SET b = 1; | ||
583 | 232 | SELECT * FROM t1; | ||
584 | 233 | a b | ||
585 | 234 | 5 1 | ||
586 | 235 | 6 1 | ||
587 | 236 | 7 1 | ||
588 | 237 | 8 1 | ||
589 | 238 | 9 1 | ||
590 | 239 | 10 1 | ||
591 | 240 | DELETE FROM t1; | ||
592 | 241 | COMMIT; | ||
593 | 242 | ------------------Test body end---------------------- | ||
594 | 243 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
595 | 244 | TIME COUNT TOTAL | ||
596 | 245 | 0.000001 1 0.000000 | ||
597 | 246 | 1.000000 6 3.000000 | ||
598 | 247 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
599 | 248 | TIME COUNT TOTAL | ||
600 | 249 | 0.000001 1 0.000000 | ||
601 | 250 | 1.000000 3 1.500000 | ||
602 | 251 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
603 | 252 | TIME COUNT TOTAL | ||
604 | 253 | 1.000000 3 1.500000 | ||
605 | 254 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
606 | 255 | TIME COUNT TOTAL | ||
607 | 256 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
608 | 257 | TIME COUNT TOTAL | ||
609 | 258 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
610 | 259 | TIME COUNT TOTAL | ||
611 | 260 | ------------------Test body begin-------------------- | ||
612 | 261 | BEGIN; | ||
613 | 262 | SELECT DML_FUNC(); | ||
614 | 263 | DML_FUNC() | ||
615 | 264 | 1 | ||
616 | 265 | CALL NESTED_PROC(); | ||
617 | 266 | DML_FUNC() | ||
618 | 267 | 1 | ||
619 | 268 | COMMIT; | ||
620 | 269 | ------------------Test body end---------------------- | ||
621 | 270 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
622 | 271 | TIME COUNT TOTAL | ||
623 | 272 | 0.000001 1 0.000000 | ||
624 | 273 | 1.000000 9 4.500000 | ||
625 | 274 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
626 | 275 | TIME COUNT TOTAL | ||
627 | 276 | 0.000001 1 0.000000 | ||
628 | 277 | 1.000000 5 2.500000 | ||
629 | 278 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
630 | 279 | TIME COUNT TOTAL | ||
631 | 280 | 1.000000 4 2.000000 | ||
632 | 281 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
633 | 282 | TIME COUNT TOTAL | ||
634 | 283 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
635 | 284 | TIME COUNT TOTAL | ||
636 | 285 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
637 | 286 | TIME COUNT TOTAL | ||
638 | 287 | ------------------Test body begin-------------------- | ||
639 | 288 | BEGIN; | ||
640 | 289 | INSERT INTO t1 (b) VALUES (1), (2); | ||
641 | 290 | UPDATE t1 SET b = 1; | ||
642 | 291 | ROLLBACK; | ||
643 | 292 | ------------------Test body end---------------------- | ||
644 | 293 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
645 | 294 | TIME COUNT TOTAL | ||
646 | 295 | 0.000001 1 0.000000 | ||
647 | 296 | 1.000000 4 2.000000 | ||
648 | 297 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
649 | 298 | TIME COUNT TOTAL | ||
650 | 299 | 0.000001 1 0.000000 | ||
651 | 300 | 1.000000 2 1.000000 | ||
652 | 301 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
653 | 302 | TIME COUNT TOTAL | ||
654 | 303 | 1.000000 2 1.000000 | ||
655 | 304 | |||
656 | 305 | ============================ | ||
657 | 306 | = Test for implicit commit | ||
658 | 307 | ============================ | ||
659 | 308 | |||
660 | 309 | SET autocommit = 0; | ||
661 | 310 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
662 | 311 | TIME COUNT TOTAL | ||
663 | 312 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
664 | 313 | TIME COUNT TOTAL | ||
665 | 314 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
666 | 315 | TIME COUNT TOTAL | ||
667 | 316 | ------------------Test body begin-------------------- | ||
668 | 317 | INSERT INTO t1 (b) VALUES (1), (2); | ||
669 | 318 | CREATE INDEX ab ON t1 (a, b); | ||
670 | 319 | ------------------Test body end---------------------- | ||
671 | 320 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
672 | 321 | TIME COUNT TOTAL | ||
673 | 322 | 0.000001 1 0.000000 | ||
674 | 323 | 1.000000 2 1.000000 | ||
675 | 324 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
676 | 325 | TIME COUNT TOTAL | ||
677 | 326 | 0.000001 1 0.000000 | ||
678 | 327 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
679 | 328 | TIME COUNT TOTAL | ||
680 | 329 | 1.000000 2 1.000000 | ||
681 | 330 | SET autocommit = 1; | ||
682 | 331 | |||
683 | 332 | ============================ | ||
684 | 333 | = Test for trigger | ||
685 | 334 | ============================ | ||
686 | 335 | |||
687 | 336 | CREATE TABLE t2 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
688 | 337 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
689 | 338 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
690 | 339 | TIME COUNT TOTAL | ||
691 | 340 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
692 | 341 | TIME COUNT TOTAL | ||
693 | 342 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
694 | 343 | TIME COUNT TOTAL | ||
695 | 344 | ------------------Test body begin-------------------- | ||
696 | 345 | CREATE TRIGGER test_trigger BEFORE INSERT ON t1 | ||
697 | 346 | FOR EACH ROW | ||
698 | 347 | BEGIN | ||
699 | 348 | INSERT INTO t2 SET b = NEW.b; | ||
700 | 349 | INSERT INTO t2 SET b = NEW.b; | ||
701 | 350 | END; | ||
702 | 351 | | | ||
703 | 352 | ------------------Test body end---------------------- | ||
704 | 353 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
705 | 354 | TIME COUNT TOTAL | ||
706 | 355 | 0.000001 1 0.000000 | ||
707 | 356 | 1.000000 1 0.500000 | ||
708 | 357 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
709 | 358 | TIME COUNT TOTAL | ||
710 | 359 | 0.000001 1 0.000000 | ||
711 | 360 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
712 | 361 | TIME COUNT TOTAL | ||
713 | 362 | 1.000000 1 0.500000 | ||
714 | 363 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
715 | 364 | TIME COUNT TOTAL | ||
716 | 365 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
717 | 366 | TIME COUNT TOTAL | ||
718 | 367 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
719 | 368 | TIME COUNT TOTAL | ||
720 | 369 | ------------------Test body begin-------------------- | ||
721 | 370 | INSERT INTO t1 (b) VALUES (1), (2); | ||
722 | 371 | ------------------Test body end---------------------- | ||
723 | 372 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
724 | 373 | TIME COUNT TOTAL | ||
725 | 374 | 0.000001 1 0.000000 | ||
726 | 375 | 1.000000 5 2.500000 | ||
727 | 376 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
728 | 377 | TIME COUNT TOTAL | ||
729 | 378 | 0.000001 1 0.000000 | ||
730 | 379 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
731 | 380 | TIME COUNT TOTAL | ||
732 | 381 | 1.000000 5 2.500000 | ||
733 | 382 | DROP TABLE t1; | ||
734 | 383 | DROP TABLE t2; | ||
735 | 384 | SET default_storage_engine=InnoDB; | ||
736 | 385 | SET default_storage_engine=MyISAM; | ||
737 | 386 | |||
738 | 387 | ========================== | ||
739 | 388 | = Test for Innodb engine | ||
740 | 389 | ========================== | ||
741 | 390 | |||
742 | 391 | ============================ | ||
743 | 392 | = Test for simple DML and DDL | ||
744 | 393 | ============================ | ||
745 | 394 | |||
746 | 395 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
747 | 396 | TIME COUNT TOTAL | ||
748 | 397 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
749 | 398 | TIME COUNT TOTAL | ||
750 | 399 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
751 | 400 | TIME COUNT TOTAL | ||
752 | 401 | ------------------Test body begin-------------------- | ||
753 | 402 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
754 | 403 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
755 | 404 | INSERT INTO t1 (b) VALUES (1), (2); | ||
756 | 405 | UPDATE t1 SET b = 1; | ||
757 | 406 | SELECT * FROM t1; | ||
758 | 407 | a b | ||
759 | 408 | 1 1 | ||
760 | 409 | 2 1 | ||
761 | 410 | DELETE FROM t1; | ||
762 | 411 | ALTER TABLE t1 ADD COLUMN (c INT); | ||
763 | 412 | DROP TABLE t1; | ||
764 | 413 | ------------------Test body end---------------------- | ||
765 | 414 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
766 | 415 | TIME COUNT TOTAL | ||
767 | 416 | 0.000001 1 0.000000 | ||
768 | 417 | 1.000000 7 3.500000 | ||
769 | 418 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
770 | 419 | TIME COUNT TOTAL | ||
771 | 420 | 0.000001 1 0.000000 | ||
772 | 421 | 1.000000 1 0.500000 | ||
773 | 422 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
774 | 423 | TIME COUNT TOTAL | ||
775 | 424 | 1.000000 6 3.000000 | ||
776 | 425 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
777 | 426 | b INT(10) UNSIGNED NOT NULL DEFAULT 0); | ||
778 | 427 | |||
779 | 428 | ============================ | ||
780 | 429 | = Test for SELECT+DML | ||
781 | 430 | ============================ | ||
782 | 431 | |||
783 | 432 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
784 | 433 | TIME COUNT TOTAL | ||
785 | 434 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
786 | 435 | TIME COUNT TOTAL | ||
787 | 436 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
788 | 437 | TIME COUNT TOTAL | ||
789 | 438 | ------------------Test body begin-------------------- | ||
790 | 439 | SELECT DML_FUNC(); | ||
791 | 440 | DML_FUNC() | ||
792 | 441 | 1 | ||
793 | 442 | ------------------Test body end---------------------- | ||
794 | 443 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
795 | 444 | TIME COUNT TOTAL | ||
796 | 445 | 0.000001 1 0.000000 | ||
797 | 446 | 1.000000 3 1.500000 | ||
798 | 447 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
799 | 448 | TIME COUNT TOTAL | ||
800 | 449 | 0.000001 1 0.000000 | ||
801 | 450 | 1.000000 1 0.500000 | ||
802 | 451 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
803 | 452 | TIME COUNT TOTAL | ||
804 | 453 | 1.000000 2 1.000000 | ||
805 | 454 | |||
806 | 455 | ============================ | ||
807 | 456 | = Test for nested calls | ||
808 | 457 | ============================ | ||
809 | 458 | |||
810 | 459 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
811 | 460 | TIME COUNT TOTAL | ||
812 | 461 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
813 | 462 | TIME COUNT TOTAL | ||
814 | 463 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
815 | 464 | TIME COUNT TOTAL | ||
816 | 465 | ------------------Test body begin-------------------- | ||
817 | 466 | CALL NESTED_PROC(); | ||
818 | 467 | DML_FUNC() | ||
819 | 468 | 1 | ||
820 | 469 | ------------------Test body end---------------------- | ||
821 | 470 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
822 | 471 | TIME COUNT TOTAL | ||
823 | 472 | 0.000001 1 0.000000 | ||
824 | 473 | 1.000000 4 2.000000 | ||
825 | 474 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
826 | 475 | TIME COUNT TOTAL | ||
827 | 476 | 0.000001 1 0.000000 | ||
828 | 477 | 1.000000 2 1.000000 | ||
829 | 478 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
830 | 479 | TIME COUNT TOTAL | ||
831 | 480 | 1.000000 2 1.000000 | ||
832 | 481 | |||
833 | 482 | ============================ | ||
834 | 483 | = Test for 'PREPARE' | ||
835 | 484 | ============================ | ||
836 | 485 | |||
837 | 486 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
838 | 487 | TIME COUNT TOTAL | ||
839 | 488 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
840 | 489 | TIME COUNT TOTAL | ||
841 | 490 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
842 | 491 | TIME COUNT TOTAL | ||
843 | 492 | ------------------Test body begin-------------------- | ||
844 | 493 | PREPARE rw_stmt FROM 'DELETE FROM t1'; | ||
845 | 494 | PREPARE ro_stmt FROM 'SELECT * FROM t1'; | ||
846 | 495 | PREPARE select_dml_stmt FROM 'SELECT DML_FUNC()'; | ||
847 | 496 | PREPARE nested_call_stmt FROM 'CALL NESTED_PROC()'; | ||
848 | 497 | ------------------Test body end---------------------- | ||
849 | 498 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
850 | 499 | TIME COUNT TOTAL | ||
851 | 500 | 0.000001 1 0.000000 | ||
852 | 501 | 1.000000 4 2.000000 | ||
853 | 502 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
854 | 503 | TIME COUNT TOTAL | ||
855 | 504 | 0.000001 1 0.000000 | ||
856 | 505 | 1.000000 4 2.000000 | ||
857 | 506 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
858 | 507 | TIME COUNT TOTAL | ||
859 | 508 | |||
860 | 509 | ============================ | ||
861 | 510 | = Test for 'EXECUTE' | ||
862 | 511 | ============================ | ||
863 | 512 | |||
864 | 513 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
865 | 514 | TIME COUNT TOTAL | ||
866 | 515 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
867 | 516 | TIME COUNT TOTAL | ||
868 | 517 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
869 | 518 | TIME COUNT TOTAL | ||
870 | 519 | ------------------Test body begin-------------------- | ||
871 | 520 | EXECUTE rw_stmt; | ||
872 | 521 | EXECUTE ro_stmt; | ||
873 | 522 | a b | ||
874 | 523 | EXECUTE select_dml_stmt; | ||
875 | 524 | DML_FUNC() | ||
876 | 525 | 1 | ||
877 | 526 | EXECUTE nested_call_stmt; | ||
878 | 527 | DML_FUNC() | ||
879 | 528 | 1 | ||
880 | 529 | ------------------Test body end---------------------- | ||
881 | 530 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
882 | 531 | TIME COUNT TOTAL | ||
883 | 532 | 0.000001 1 0.000000 | ||
884 | 533 | 1.000000 9 4.500000 | ||
885 | 534 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
886 | 535 | TIME COUNT TOTAL | ||
887 | 536 | 0.000001 1 0.000000 | ||
888 | 537 | 1.000000 4 2.000000 | ||
889 | 538 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
890 | 539 | TIME COUNT TOTAL | ||
891 | 540 | 1.000000 5 2.500000 | ||
892 | 541 | |||
893 | 542 | ============================ | ||
894 | 543 | = Test for 'DEALLOCATE PREPARE' | ||
895 | 544 | ============================ | ||
896 | 545 | |||
897 | 546 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
898 | 547 | TIME COUNT TOTAL | ||
899 | 548 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
900 | 549 | TIME COUNT TOTAL | ||
901 | 550 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
902 | 551 | TIME COUNT TOTAL | ||
903 | 552 | ------------------Test body begin-------------------- | ||
904 | 553 | DEALLOCATE PREPARE rw_stmt; | ||
905 | 554 | DEALLOCATE PREPARE ro_stmt; | ||
906 | 555 | DEALLOCATE PREPARE select_dml_stmt; | ||
907 | 556 | DEALLOCATE PREPARE nested_call_stmt; | ||
908 | 557 | ------------------Test body end---------------------- | ||
909 | 558 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
910 | 559 | TIME COUNT TOTAL | ||
911 | 560 | 0.000001 1 0.000000 | ||
912 | 561 | 1.000000 4 2.000000 | ||
913 | 562 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
914 | 563 | TIME COUNT TOTAL | ||
915 | 564 | 0.000001 1 0.000000 | ||
916 | 565 | 1.000000 4 2.000000 | ||
917 | 566 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
918 | 567 | TIME COUNT TOTAL | ||
919 | 568 | |||
920 | 569 | ============================ | ||
921 | 570 | = Test for transactions | ||
922 | 571 | ============================ | ||
923 | 572 | |||
924 | 573 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
925 | 574 | TIME COUNT TOTAL | ||
926 | 575 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
927 | 576 | TIME COUNT TOTAL | ||
928 | 577 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
929 | 578 | TIME COUNT TOTAL | ||
930 | 579 | ------------------Test body begin-------------------- | ||
931 | 580 | BEGIN; | ||
932 | 581 | SELECT * FROM t1; | ||
933 | 582 | a b | ||
934 | 583 | 5 1 | ||
935 | 584 | 6 1 | ||
936 | 585 | 7 1 | ||
937 | 586 | 8 1 | ||
938 | 587 | COMMIT; | ||
939 | 588 | ------------------Test body end---------------------- | ||
940 | 589 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
941 | 590 | TIME COUNT TOTAL | ||
942 | 591 | 0.000001 1 0.000000 | ||
943 | 592 | 1.000000 3 1.500000 | ||
944 | 593 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
945 | 594 | TIME COUNT TOTAL | ||
946 | 595 | 0.000001 1 0.000000 | ||
947 | 596 | 1.000000 3 1.500000 | ||
948 | 597 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
949 | 598 | TIME COUNT TOTAL | ||
950 | 599 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
951 | 600 | TIME COUNT TOTAL | ||
952 | 601 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
953 | 602 | TIME COUNT TOTAL | ||
954 | 603 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
955 | 604 | TIME COUNT TOTAL | ||
956 | 605 | ------------------Test body begin-------------------- | ||
957 | 606 | BEGIN; | ||
958 | 607 | INSERT INTO t1 (b) VALUES (1), (2); | ||
959 | 608 | UPDATE t1 SET b = 1; | ||
960 | 609 | SELECT * FROM t1; | ||
961 | 610 | a b | ||
962 | 611 | 5 1 | ||
963 | 612 | 6 1 | ||
964 | 613 | 7 1 | ||
965 | 614 | 8 1 | ||
966 | 615 | 9 1 | ||
967 | 616 | 10 1 | ||
968 | 617 | DELETE FROM t1; | ||
969 | 618 | COMMIT; | ||
970 | 619 | ------------------Test body end---------------------- | ||
971 | 620 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
972 | 621 | TIME COUNT TOTAL | ||
973 | 622 | 0.000001 1 0.000000 | ||
974 | 623 | 1.000000 6 3.000000 | ||
975 | 624 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
976 | 625 | TIME COUNT TOTAL | ||
977 | 626 | 0.000001 1 0.000000 | ||
978 | 627 | 1.000000 3 1.500000 | ||
979 | 628 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
980 | 629 | TIME COUNT TOTAL | ||
981 | 630 | 1.000000 3 1.500000 | ||
982 | 631 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
983 | 632 | TIME COUNT TOTAL | ||
984 | 633 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
985 | 634 | TIME COUNT TOTAL | ||
986 | 635 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
987 | 636 | TIME COUNT TOTAL | ||
988 | 637 | ------------------Test body begin-------------------- | ||
989 | 638 | BEGIN; | ||
990 | 639 | SELECT DML_FUNC(); | ||
991 | 640 | DML_FUNC() | ||
992 | 641 | 1 | ||
993 | 642 | CALL NESTED_PROC(); | ||
994 | 643 | DML_FUNC() | ||
995 | 644 | 1 | ||
996 | 645 | COMMIT; | ||
997 | 646 | ------------------Test body end---------------------- | ||
998 | 647 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
999 | 648 | TIME COUNT TOTAL | ||
1000 | 649 | 0.000001 1 0.000000 | ||
1001 | 650 | 1.000000 9 4.500000 | ||
1002 | 651 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1003 | 652 | TIME COUNT TOTAL | ||
1004 | 653 | 0.000001 1 0.000000 | ||
1005 | 654 | 1.000000 5 2.500000 | ||
1006 | 655 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1007 | 656 | TIME COUNT TOTAL | ||
1008 | 657 | 1.000000 4 2.000000 | ||
1009 | 658 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1010 | 659 | TIME COUNT TOTAL | ||
1011 | 660 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1012 | 661 | TIME COUNT TOTAL | ||
1013 | 662 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1014 | 663 | TIME COUNT TOTAL | ||
1015 | 664 | ------------------Test body begin-------------------- | ||
1016 | 665 | BEGIN; | ||
1017 | 666 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1018 | 667 | UPDATE t1 SET b = 1; | ||
1019 | 668 | ROLLBACK; | ||
1020 | 669 | Warnings: | ||
1021 | 670 | Warning 1196 Some non-transactional changed tables couldn't be rolled back | ||
1022 | 671 | ------------------Test body end---------------------- | ||
1023 | 672 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1024 | 673 | TIME COUNT TOTAL | ||
1025 | 674 | 0.000001 1 0.000000 | ||
1026 | 675 | 1.000000 5 2.500000 | ||
1027 | 676 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1028 | 677 | TIME COUNT TOTAL | ||
1029 | 678 | 0.000001 1 0.000000 | ||
1030 | 679 | 1.000000 3 1.500000 | ||
1031 | 680 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1032 | 681 | TIME COUNT TOTAL | ||
1033 | 682 | 1.000000 2 1.000000 | ||
1034 | 683 | |||
1035 | 684 | ============================ | ||
1036 | 685 | = Test for implicit commit | ||
1037 | 686 | ============================ | ||
1038 | 687 | |||
1039 | 688 | SET autocommit = 0; | ||
1040 | 689 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1041 | 690 | TIME COUNT TOTAL | ||
1042 | 691 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1043 | 692 | TIME COUNT TOTAL | ||
1044 | 693 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1045 | 694 | TIME COUNT TOTAL | ||
1046 | 695 | ------------------Test body begin-------------------- | ||
1047 | 696 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1048 | 697 | CREATE INDEX ab ON t1 (a, b); | ||
1049 | 698 | ------------------Test body end---------------------- | ||
1050 | 699 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1051 | 700 | TIME COUNT TOTAL | ||
1052 | 701 | 0.000001 1 0.000000 | ||
1053 | 702 | 1.000000 2 1.000000 | ||
1054 | 703 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1055 | 704 | TIME COUNT TOTAL | ||
1056 | 705 | 0.000001 1 0.000000 | ||
1057 | 706 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1058 | 707 | TIME COUNT TOTAL | ||
1059 | 708 | 1.000000 2 1.000000 | ||
1060 | 709 | SET autocommit = 1; | ||
1061 | 710 | |||
1062 | 711 | ============================ | ||
1063 | 712 | = Test for trigger | ||
1064 | 713 | ============================ | ||
1065 | 714 | |||
1066 | 715 | CREATE TABLE t2 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
1067 | 716 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
1068 | 717 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1069 | 718 | TIME COUNT TOTAL | ||
1070 | 719 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1071 | 720 | TIME COUNT TOTAL | ||
1072 | 721 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1073 | 722 | TIME COUNT TOTAL | ||
1074 | 723 | ------------------Test body begin-------------------- | ||
1075 | 724 | CREATE TRIGGER test_trigger BEFORE INSERT ON t1 | ||
1076 | 725 | FOR EACH ROW | ||
1077 | 726 | BEGIN | ||
1078 | 727 | INSERT INTO t2 SET b = NEW.b; | ||
1079 | 728 | INSERT INTO t2 SET b = NEW.b; | ||
1080 | 729 | END; | ||
1081 | 730 | | | ||
1082 | 731 | ------------------Test body end---------------------- | ||
1083 | 732 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1084 | 733 | TIME COUNT TOTAL | ||
1085 | 734 | 0.000001 1 0.000000 | ||
1086 | 735 | 1.000000 1 0.500000 | ||
1087 | 736 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1088 | 737 | TIME COUNT TOTAL | ||
1089 | 738 | 0.000001 1 0.000000 | ||
1090 | 739 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1091 | 740 | TIME COUNT TOTAL | ||
1092 | 741 | 1.000000 1 0.500000 | ||
1093 | 742 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1094 | 743 | TIME COUNT TOTAL | ||
1095 | 744 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1096 | 745 | TIME COUNT TOTAL | ||
1097 | 746 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1098 | 747 | TIME COUNT TOTAL | ||
1099 | 748 | ------------------Test body begin-------------------- | ||
1100 | 749 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1101 | 750 | ------------------Test body end---------------------- | ||
1102 | 751 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME WHERE count != 0; | ||
1103 | 752 | TIME COUNT TOTAL | ||
1104 | 753 | 0.000001 1 0.000000 | ||
1105 | 754 | 1.000000 5 2.500000 | ||
1106 | 755 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_READ WHERE count != 0; | ||
1107 | 756 | TIME COUNT TOTAL | ||
1108 | 757 | 0.000001 1 0.000000 | ||
1109 | 758 | SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME_WRITE WHERE count != 0; | ||
1110 | 759 | TIME COUNT TOTAL | ||
1111 | 760 | 1.000000 5 2.500000 | ||
1112 | 761 | DROP TABLE t1; | ||
1113 | 762 | DROP TABLE t2; | ||
1114 | 763 | SET default_storage_engine=default; | ||
1115 | 764 | DROP FUNCTION DML_FUNC; | ||
1116 | 765 | DROP PROCEDURE NESTED_PROC; | ||
1117 | 0 | 766 | ||
1118 | === added file 'plugin/query_response_time/tests/mtr/query_response_time-rw.test' | |||
1119 | --- plugin/query_response_time/tests/mtr/query_response_time-rw.test 1970-01-01 00:00:00 +0000 | |||
1120 | +++ plugin/query_response_time/tests/mtr/query_response_time-rw.test 2015-02-04 16:22:40 +0000 | |||
1121 | @@ -0,0 +1,201 @@ | |||
1122 | 1 | --source include/have_query_response_time_plugin.inc | ||
1123 | 2 | --source include/have_debug.inc | ||
1124 | 3 | |||
1125 | 4 | # The file with expected results fits only to a run without | ||
1126 | 5 | # ps-protocol/sp-protocol/cursor-protocol/view-protocol. | ||
1127 | 6 | if (`SELECT $PS_PROTOCOL + $SP_PROTOCOL + $CURSOR_PROTOCOL | ||
1128 | 7 | + $VIEW_PROTOCOL > 0`) | ||
1129 | 8 | { | ||
1130 | 9 | --skip Test requires: ps-protocol/sp-protocol/cursor-protocol/view-protocol disabled | ||
1131 | 10 | } | ||
1132 | 11 | |||
1133 | 12 | --delimiter | | ||
1134 | 13 | |||
1135 | 14 | CREATE FUNCTION DML_FUNC() | ||
1136 | 15 | RETURNS INT | ||
1137 | 16 | BEGIN | ||
1138 | 17 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1139 | 18 | UPDATE t1 SET b = 1; | ||
1140 | 19 | RETURN 1; | ||
1141 | 20 | END| | ||
1142 | 21 | |||
1143 | 22 | CREATE PROCEDURE NESTED_PROC() | ||
1144 | 23 | BEGIN | ||
1145 | 24 | SELECT DML_FUNC(); | ||
1146 | 25 | END| | ||
1147 | 26 | |||
1148 | 27 | --delimiter ; | ||
1149 | 28 | |||
1150 | 29 | --let $i=2 | ||
1151 | 30 | |||
1152 | 31 | while ($i) | ||
1153 | 32 | { | ||
1154 | 33 | |||
1155 | 34 | SET default_storage_engine=InnoDB; | ||
1156 | 35 | if ($i==1) | ||
1157 | 36 | { | ||
1158 | 37 | SET default_storage_engine=MyISAM; | ||
1159 | 38 | } | ||
1160 | 39 | |||
1161 | 40 | if ($i==0) | ||
1162 | 41 | { | ||
1163 | 42 | --echo | ||
1164 | 43 | --echo ========================== | ||
1165 | 44 | --echo = Test for MyISAM engine | ||
1166 | 45 | --echo ========================== | ||
1167 | 46 | --echo | ||
1168 | 47 | } | ||
1169 | 48 | if ($i==1) | ||
1170 | 49 | { | ||
1171 | 50 | --echo | ||
1172 | 51 | --echo ========================== | ||
1173 | 52 | --echo = Test for Innodb engine | ||
1174 | 53 | --echo ========================== | ||
1175 | 54 | } | ||
1176 | 55 | |||
1177 | 56 | --echo | ||
1178 | 57 | --echo ============================ | ||
1179 | 58 | --echo = Test for simple DML and DDL | ||
1180 | 59 | --echo ============================ | ||
1181 | 60 | --echo | ||
1182 | 61 | --source query_response_time-rw-begin.inc | ||
1183 | 62 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
1184 | 63 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
1185 | 64 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1186 | 65 | UPDATE t1 SET b = 1; | ||
1187 | 66 | SELECT * FROM t1; | ||
1188 | 67 | DELETE FROM t1; | ||
1189 | 68 | ALTER TABLE t1 ADD COLUMN (c INT); | ||
1190 | 69 | DROP TABLE t1; | ||
1191 | 70 | --source query_response_time-rw-end.inc | ||
1192 | 71 | |||
1193 | 72 | CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
1194 | 73 | b INT(10) UNSIGNED NOT NULL DEFAULT 0); | ||
1195 | 74 | --echo | ||
1196 | 75 | --echo ============================ | ||
1197 | 76 | --echo = Test for SELECT+DML | ||
1198 | 77 | --echo ============================ | ||
1199 | 78 | --echo | ||
1200 | 79 | --source query_response_time-rw-begin.inc | ||
1201 | 80 | SELECT DML_FUNC(); | ||
1202 | 81 | --source query_response_time-rw-end.inc | ||
1203 | 82 | |||
1204 | 83 | --echo | ||
1205 | 84 | --echo ============================ | ||
1206 | 85 | --echo = Test for nested calls | ||
1207 | 86 | --echo ============================ | ||
1208 | 87 | --echo | ||
1209 | 88 | --source query_response_time-rw-begin.inc | ||
1210 | 89 | CALL NESTED_PROC(); | ||
1211 | 90 | --source query_response_time-rw-end.inc | ||
1212 | 91 | |||
1213 | 92 | --echo | ||
1214 | 93 | --echo ============================ | ||
1215 | 94 | --echo = Test for 'PREPARE' | ||
1216 | 95 | --echo ============================ | ||
1217 | 96 | --echo | ||
1218 | 97 | --source query_response_time-rw-begin.inc | ||
1219 | 98 | PREPARE rw_stmt FROM 'DELETE FROM t1'; | ||
1220 | 99 | PREPARE ro_stmt FROM 'SELECT * FROM t1'; | ||
1221 | 100 | PREPARE select_dml_stmt FROM 'SELECT DML_FUNC()'; | ||
1222 | 101 | PREPARE nested_call_stmt FROM 'CALL NESTED_PROC()'; | ||
1223 | 102 | --source query_response_time-rw-end.inc | ||
1224 | 103 | |||
1225 | 104 | --echo | ||
1226 | 105 | --echo ============================ | ||
1227 | 106 | --echo = Test for 'EXECUTE' | ||
1228 | 107 | --echo ============================ | ||
1229 | 108 | --echo | ||
1230 | 109 | --source query_response_time-rw-begin.inc | ||
1231 | 110 | EXECUTE rw_stmt; | ||
1232 | 111 | EXECUTE ro_stmt; | ||
1233 | 112 | EXECUTE select_dml_stmt; | ||
1234 | 113 | EXECUTE nested_call_stmt; | ||
1235 | 114 | --source query_response_time-rw-end.inc | ||
1236 | 115 | |||
1237 | 116 | --echo | ||
1238 | 117 | --echo ============================ | ||
1239 | 118 | --echo = Test for 'DEALLOCATE PREPARE' | ||
1240 | 119 | --echo ============================ | ||
1241 | 120 | --echo | ||
1242 | 121 | --source query_response_time-rw-begin.inc | ||
1243 | 122 | DEALLOCATE PREPARE rw_stmt; | ||
1244 | 123 | DEALLOCATE PREPARE ro_stmt; | ||
1245 | 124 | DEALLOCATE PREPARE select_dml_stmt; | ||
1246 | 125 | DEALLOCATE PREPARE nested_call_stmt; | ||
1247 | 126 | --source query_response_time-rw-end.inc | ||
1248 | 127 | |||
1249 | 128 | --echo | ||
1250 | 129 | --echo ============================ | ||
1251 | 130 | --echo = Test for transactions | ||
1252 | 131 | --echo ============================ | ||
1253 | 132 | --echo | ||
1254 | 133 | --source query_response_time-rw-begin.inc | ||
1255 | 134 | BEGIN; | ||
1256 | 135 | SELECT * FROM t1; | ||
1257 | 136 | COMMIT; | ||
1258 | 137 | --source query_response_time-rw-end.inc | ||
1259 | 138 | --source query_response_time-rw-begin.inc | ||
1260 | 139 | BEGIN; | ||
1261 | 140 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1262 | 141 | UPDATE t1 SET b = 1; | ||
1263 | 142 | SELECT * FROM t1; | ||
1264 | 143 | DELETE FROM t1; | ||
1265 | 144 | COMMIT; | ||
1266 | 145 | --source query_response_time-rw-end.inc | ||
1267 | 146 | --source query_response_time-rw-begin.inc | ||
1268 | 147 | BEGIN; | ||
1269 | 148 | SELECT DML_FUNC(); | ||
1270 | 149 | CALL NESTED_PROC(); | ||
1271 | 150 | COMMIT; | ||
1272 | 151 | --source query_response_time-rw-end.inc | ||
1273 | 152 | --source query_response_time-rw-begin.inc | ||
1274 | 153 | BEGIN; | ||
1275 | 154 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1276 | 155 | UPDATE t1 SET b = 1; | ||
1277 | 156 | ROLLBACK; | ||
1278 | 157 | --source query_response_time-rw-end.inc | ||
1279 | 158 | |||
1280 | 159 | --echo | ||
1281 | 160 | --echo ============================ | ||
1282 | 161 | --echo = Test for implicit commit | ||
1283 | 162 | --echo ============================ | ||
1284 | 163 | --echo | ||
1285 | 164 | SET autocommit = 0; | ||
1286 | 165 | --source query_response_time-rw-begin.inc | ||
1287 | 166 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1288 | 167 | CREATE INDEX ab ON t1 (a, b); | ||
1289 | 168 | --source query_response_time-rw-end.inc | ||
1290 | 169 | SET autocommit = 1; | ||
1291 | 170 | |||
1292 | 171 | --echo | ||
1293 | 172 | --echo ============================ | ||
1294 | 173 | --echo = Test for trigger | ||
1295 | 174 | --echo ============================ | ||
1296 | 175 | --echo | ||
1297 | 176 | CREATE TABLE t2 (a INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | ||
1298 | 177 | b INT UNSIGNED NOT NULL DEFAULT 0); | ||
1299 | 178 | --source query_response_time-rw-begin.inc | ||
1300 | 179 | --delimiter | | ||
1301 | 180 | CREATE TRIGGER test_trigger BEFORE INSERT ON t1 | ||
1302 | 181 | FOR EACH ROW | ||
1303 | 182 | BEGIN | ||
1304 | 183 | INSERT INTO t2 SET b = NEW.b; | ||
1305 | 184 | INSERT INTO t2 SET b = NEW.b; | ||
1306 | 185 | END; | ||
1307 | 186 | | | ||
1308 | 187 | --delimiter ; | ||
1309 | 188 | --source query_response_time-rw-end.inc | ||
1310 | 189 | --source query_response_time-rw-begin.inc | ||
1311 | 190 | INSERT INTO t1 (b) VALUES (1), (2); | ||
1312 | 191 | --source query_response_time-rw-end.inc | ||
1313 | 192 | |||
1314 | 193 | DROP TABLE t1; | ||
1315 | 194 | DROP TABLE t2; | ||
1316 | 195 | |||
1317 | 196 | --dec $i | ||
1318 | 197 | } | ||
1319 | 198 | |||
1320 | 199 | SET default_storage_engine=default; | ||
1321 | 200 | DROP FUNCTION DML_FUNC; | ||
1322 | 201 | DROP PROCEDURE NESTED_PROC; | ||
1323 | 0 | 202 | ||
1324 | === modified file 'sql/sp_instr.cc' | |||
1325 | --- sql/sp_instr.cc 2014-09-25 07:10:58 +0000 | |||
1326 | +++ sql/sp_instr.cc 2015-02-04 16:22:40 +0000 | |||
1327 | @@ -821,11 +821,21 @@ | |||
1328 | 821 | { | 821 | { |
1329 | 822 | rc= validate_lex_and_execute_core(thd, nextp, false); | 822 | rc= validate_lex_and_execute_core(thd, nextp, false); |
1330 | 823 | 823 | ||
1331 | 824 | /* | ||
1332 | 825 | thd->utime_after_query can be used for counting | ||
1333 | 826 | statement execution time (for example in | ||
1334 | 827 | query_response_time plugin). thd->update_server_status() | ||
1335 | 828 | updates this value but only if function/procedure | ||
1336 | 829 | budy has been already executed, if we want to measure | ||
1337 | 830 | statement execution time inside function/procedure | ||
1338 | 831 | we have to update this value here independent of | ||
1339 | 832 | value returned by thd->get_stmt_da()->is_eof(). | ||
1340 | 833 | */ | ||
1341 | 834 | thd->update_server_status(); | ||
1342 | 835 | |||
1343 | 824 | if (thd->get_stmt_da()->is_eof()) | 836 | if (thd->get_stmt_da()->is_eof()) |
1344 | 825 | { | 837 | { |
1345 | 826 | /* Finalize server status flags after executing a statement. */ | 838 | /* Finalize server status flags after executing a statement. */ |
1346 | 827 | thd->update_server_status(); | ||
1347 | 828 | |||
1348 | 829 | thd->protocol->end_statement(); | 839 | thd->protocol->end_statement(); |
1349 | 830 | } | 840 | } |
1350 | 831 | 841 |
- Please revert rev 689 (its fix is already in the trunk), unlink
its associated bug, and flatten 690/691 together. While at that,
a rebase on the current trunk wouldn't hurt neither
- Please update the blueprint for the read/write difference
criteria, and what does the command flag criteria mean for the
end user (including the "downside" from the MP description)
- IMHO the testcase needs not bother with MyISAM testing, even
more so as the current implementation is above the SE
level. That would shorten .result three times
- Please see the diff comments