Merge lp:~tsarev/percona-server/5.1_fix_bug_716210 into lp:percona-server/5.1
- 5.1_fix_bug_716210
- Merge into 5.1
Status: | Superseded | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~tsarev/percona-server/5.1_fix_bug_716210 | ||||
Merge into: | lp:percona-server/5.1 | ||||
Prerequisite: | lp:~tsarev/percona-server/5.1.59-porting | ||||
Diff against target: |
779 lines (+526/-107) 1 file modified
patches/slow_extended.patch (+526/-107) |
||||
To merge this branch: | bzr merge lp:~tsarev/percona-server/5.1_fix_bug_716210 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Approve | ||
Alexey Kopytov | Pending | ||
Review via email: mp+78700@code.launchpad.net |
This proposal supersedes a proposal from 2011-10-07.
This proposal has been superseded by a proposal from 2011-10-11.
Commit message
Description of the change
Clean Jenkins result: http://
PLEASE NOTE: This MP fix JUST THE ON PROBLEM - inherit counters by administrative commands from previous queries.
Looks like, Rows_read counters incorrect - related to bug #721176
Test case is CORRECT, and check what now administrative commands work with clean counters.
* "all statistics variables used in slow_extended.patch and thd->send_row_count and thd->examined_
* Added to class THD (sql/sql_class.h) following methods:
1) clear_slow_extended - clear SESV
2) reset_sub_
3) restore_
* Added to class Sub_statement_state (sql/sql_class.h) required for correct backup variables
* Added to class THD (sql/sql_class.h) comments near the SESV with explanations of purpose of variables
* Added call of clear_slow_extended to THD::init() (required on THD class initialisation and change_user)
* Fix admin command processing in LOGGER:
1) query and query_length according to comment in sql_class.h always correlated - if query == NULL => query_length == 0, and if query != NULL => query_length != 0
2) After "if (!query) { ... }" query_lenght always not 0
3) if (!query_length) (code before my fix) always trye
* Fixed accoring to code policy code formating in "increment_
* Fixed THD::reset_
* Fixed bug #716210: add thd->clear_
Preview Diff
1 | === modified file 'patches/slow_extended.patch' |
2 | --- patches/slow_extended.patch 2011-10-08 04:46:52 +0000 |
3 | +++ patches/slow_extended.patch 2011-10-11 06:52:37 +0000 |
4 | @@ -187,30 +187,16 @@ |
5 | else |
6 | { |
7 | query_utime= lock_utime= 0; |
8 | -@@ -1010,8 +1026,21 @@ |
9 | - query_length= command_name[thd->command].length; |
10 | +@@ -1011,7 +1027,7 @@ |
11 | } |
12 | |
13 | -+ if (!query_length) |
14 | -+ { |
15 | -+ thd->sent_row_count= thd->examined_row_count= 0; |
16 | -+ thd->row_count= 0; |
17 | -+ thd->orig_row_count= 0; |
18 | -+ thd->bytes_sent_old= thd->status_var.bytes_sent; |
19 | -+ thd->tmp_tables_used= thd->tmp_tables_disk_used= 0; |
20 | -+ thd->tmp_tables_size= 0; |
21 | -+ thd->innodb_was_used= FALSE; |
22 | -+ thd->query_plan_flags= QPLAN_NONE; |
23 | -+ thd->query_plan_fsort_passes= 0; |
24 | -+ } |
25 | -+ |
26 | for (current_handler= slow_log_handler_list; *current_handler ;) |
27 | - error= (*current_handler++)->log_slow(thd, current_time, thd->start_time, |
28 | + error= (*current_handler++)->log_slow(thd, current_utime, thd->start_time, |
29 | user_host_buff, user_host_len, |
30 | query_utime, lock_utime, is_command, |
31 | query, query_length) || error; |
32 | -@@ -2282,12 +2311,13 @@ |
33 | +@@ -2282,12 +2298,13 @@ |
34 | TRUE - error occured |
35 | */ |
36 | |
37 | @@ -225,7 +211,7 @@ |
38 | bool error= 0; |
39 | DBUG_ENTER("MYSQL_QUERY_LOG::write"); |
40 | |
41 | -@@ -2309,17 +2339,28 @@ |
42 | +@@ -2309,17 +2326,28 @@ |
43 | |
44 | if (!(specialflag & SPECIAL_SHORT_LOG_FORMAT)) |
45 | { |
46 | @@ -256,7 +242,7 @@ |
47 | |
48 | /* Note that my_b_write() assumes it knows the length for this */ |
49 | if (my_b_write(&log_file, (uchar*) buff, buff_len)) |
50 | -@@ -2337,12 +2378,64 @@ |
51 | +@@ -2337,12 +2365,64 @@ |
52 | sprintf(query_time_buff, "%.6f", ulonglong2double(query_utime)/1000000.0); |
53 | sprintf(lock_time_buff, "%.6f", ulonglong2double(lock_utime)/1000000.0); |
54 | if (my_b_printf(&log_file, |
55 | @@ -277,7 +263,7 @@ |
56 | + (ulong) thd->tmp_tables_used, |
57 | + (ulong) thd->tmp_tables_disk_used, |
58 | + (ulong) thd->tmp_tables_size) == (uint) -1) |
59 | -+ tmp_errno= errno; |
60 | + tmp_errno= errno; |
61 | + if (thd->innodb_was_used) |
62 | + { |
63 | + char buf[20]; |
64 | @@ -319,7 +305,7 @@ |
65 | + { |
66 | + if ((thd->variables.log_slow_verbosity & SLOG_V_INNODB) && |
67 | + my_b_printf(&log_file,"# No InnoDB statistics available for this query\n") == (uint) -1) |
68 | - tmp_errno= errno; |
69 | ++ tmp_errno= errno; |
70 | + } |
71 | if (thd->db && strcmp(thd->db, db)) |
72 | { // Database changed |
73 | @@ -1202,22 +1188,22 @@ |
74 | |
75 | +extern "C" |
76 | +void increment_thd_innodb_stats(THD* thd, |
77 | -+ unsigned long long trx_id, |
78 | -+ long io_reads, |
79 | -+ long long io_read, |
80 | -+ long io_reads_wait_timer, |
81 | -+ long lock_que_wait_timer, |
82 | -+ long que_wait_timer, |
83 | -+ long page_access) |
84 | ++ unsigned long long trx_id, |
85 | ++ long io_reads, |
86 | ++ long long io_read, |
87 | ++ long io_reads_wait_timer, |
88 | ++ long lock_que_wait_timer, |
89 | ++ long que_wait_timer, |
90 | ++ long page_access) |
91 | +{ |
92 | -+ thd->innodb_was_used = TRUE; |
93 | -+ thd->innodb_trx_id = trx_id; |
94 | -+ thd->innodb_io_reads += io_reads; |
95 | -+ thd->innodb_io_read += io_read; |
96 | -+ thd->innodb_io_reads_wait_timer += io_reads_wait_timer; |
97 | -+ thd->innodb_lock_que_wait_timer += lock_que_wait_timer; |
98 | -+ thd->innodb_innodb_que_wait_timer += que_wait_timer; |
99 | -+ thd->innodb_page_access += page_access; |
100 | ++ thd->innodb_was_used= TRUE; |
101 | ++ thd->innodb_trx_id= trx_id; |
102 | ++ thd->innodb_io_reads+= io_reads; |
103 | ++ thd->innodb_io_read+= io_read; |
104 | ++ thd->innodb_io_reads_wait_timer+= io_reads_wait_timer; |
105 | ++ thd->innodb_lock_que_wait_timer+= lock_que_wait_timer; |
106 | ++ thd->innodb_innodb_que_wait_timer+= que_wait_timer; |
107 | ++ thd->innodb_page_access+= page_access; |
108 | +} |
109 | + |
110 | +extern "C" |
111 | @@ -1243,44 +1229,125 @@ |
112 | for (Internal_error_handler *error_handler= m_internal_handler; |
113 | error_handler; |
114 | error_handler= error_handler->m_prev_internal_handler) |
115 | -@@ -3196,6 +3229,12 @@ |
116 | +@@ -881,6 +914,8 @@ |
117 | + /* Initialize the Debug Sync Facility. See debug_sync.cc. */ |
118 | + debug_sync_init_thread(this); |
119 | + #endif /* defined(ENABLED_DEBUG_SYNC) */ |
120 | ++ |
121 | ++ clear_slow_extended(); |
122 | + } |
123 | + |
124 | + |
125 | +@@ -3187,8 +3222,6 @@ |
126 | + backup->in_sub_stmt= in_sub_stmt; |
127 | + backup->enable_slow_log= enable_slow_log; |
128 | + backup->limit_found_rows= limit_found_rows; |
129 | +- backup->examined_row_count= examined_row_count; |
130 | +- backup->sent_row_count= sent_row_count; |
131 | + backup->cuted_fields= cuted_fields; |
132 | + backup->client_capabilities= client_capabilities; |
133 | + backup->savepoints= transaction.savepoints; |
134 | +@@ -3196,6 +3229,7 @@ |
135 | first_successful_insert_id_in_prev_stmt; |
136 | backup->first_successful_insert_id_in_cur_stmt= |
137 | first_successful_insert_id_in_cur_stmt; |
138 | -+ backup->innodb_io_reads= innodb_io_reads; |
139 | -+ backup->innodb_io_read= innodb_io_read; |
140 | -+ backup->innodb_io_reads_wait_timer= innodb_io_reads_wait_timer; |
141 | -+ backup->innodb_lock_que_wait_timer= innodb_lock_que_wait_timer; |
142 | -+ backup->innodb_innodb_que_wait_timer= innodb_innodb_que_wait_timer; |
143 | -+ backup->innodb_page_access= innodb_page_access; |
144 | ++ reset_sub_statement_state_slow_extended(backup); |
145 | |
146 | if ((!lex->requires_prelocking() || is_update_query(lex->sql_command)) && |
147 | !current_stmt_binlog_row_based) |
148 | -@@ -3215,6 +3254,14 @@ |
149 | +@@ -3210,13 +3244,75 @@ |
150 | + /* Disable result sets */ |
151 | + client_capabilities &= ~CLIENT_MULTI_RESULTS; |
152 | + in_sub_stmt|= new_state; |
153 | +- examined_row_count= 0; |
154 | +- sent_row_count= 0; |
155 | cuted_fields= 0; |
156 | transaction.savepoints= 0; |
157 | first_successful_insert_id_in_cur_stmt= 0; |
158 | -+ last_errno= 0; |
159 | -+ innodb_trx_id= 0; |
160 | -+ innodb_io_reads= 0; |
161 | -+ innodb_io_read= 0; |
162 | -+ innodb_io_reads_wait_timer= 0; |
163 | -+ innodb_lock_que_wait_timer= 0; |
164 | + } |
165 | + |
166 | ++void THD::clear_slow_extended() |
167 | ++{ |
168 | ++ DBUG_ENTER("THD::clear_slow_extended"); |
169 | ++ sent_row_count= 0; |
170 | ++ orig_row_count= row_count; |
171 | ++ examined_row_count= 0; |
172 | ++ bytes_sent_old= status_var.bytes_sent; |
173 | ++ tmp_tables_used= 0; |
174 | ++ tmp_tables_disk_used= 0; |
175 | ++ tmp_tables_size= 0; |
176 | ++ innodb_was_used= FALSE; |
177 | ++ innodb_trx_id= 0; |
178 | ++ innodb_io_reads= 0; |
179 | ++ innodb_io_read= 0; |
180 | ++ innodb_io_reads_wait_timer= 0; |
181 | ++ innodb_lock_que_wait_timer= 0; |
182 | + innodb_innodb_que_wait_timer= 0; |
183 | -+ innodb_page_access= 0; |
184 | - } |
185 | - |
186 | - |
187 | -@@ -3277,6 +3324,12 @@ |
188 | ++ innodb_page_access= 0; |
189 | ++ query_plan_flags= QPLAN_NONE; |
190 | ++ query_plan_fsort_passes= 0; |
191 | ++ last_errno= 0; |
192 | ++ DBUG_VOID_RETURN; |
193 | ++} |
194 | ++ |
195 | ++void THD::reset_sub_statement_state_slow_extended(Sub_statement_state *backup) |
196 | ++{ |
197 | ++ DBUG_ENTER("THD::reset_sub_statement_state_slow_extended"); |
198 | ++ backup->sent_row_count= sent_row_count; |
199 | ++ backup->examined_row_count= examined_row_count; |
200 | ++ backup->tmp_tables_used= tmp_tables_used; |
201 | ++ backup->tmp_tables_disk_used= tmp_tables_disk_used; |
202 | ++ backup->tmp_tables_size= tmp_tables_size; |
203 | ++ backup->innodb_was_used= innodb_was_used; |
204 | ++ backup->innodb_io_reads= innodb_io_reads; |
205 | ++ backup->innodb_io_read= innodb_io_read; |
206 | ++ backup->innodb_io_reads_wait_timer= innodb_io_reads_wait_timer; |
207 | ++ backup->innodb_lock_que_wait_timer= innodb_lock_que_wait_timer; |
208 | ++ backup->innodb_innodb_que_wait_timer= innodb_innodb_que_wait_timer; |
209 | ++ backup->innodb_page_access= innodb_page_access; |
210 | ++ backup->query_plan_flags= query_plan_flags; |
211 | ++ backup->query_plan_fsort_passes= query_plan_fsort_passes; |
212 | ++ clear_slow_extended(); |
213 | ++ DBUG_VOID_RETURN; |
214 | ++} |
215 | ++ |
216 | ++void THD::restore_sub_statement_state_slow_extended(const Sub_statement_state *backup) |
217 | ++{ |
218 | ++ DBUG_ENTER("THD::restore_sub_statement_state_slow_extended"); |
219 | ++ sent_row_count= backup->sent_row_count; |
220 | ++ examined_row_count+= backup->examined_row_count; |
221 | ++ tmp_tables_used+= backup->tmp_tables_used; |
222 | ++ tmp_tables_disk_used+= backup->tmp_tables_disk_used; |
223 | ++ tmp_tables_size+= backup->tmp_tables_size; |
224 | ++ innodb_was_used= (innodb_was_used || backup->innodb_was_used); |
225 | ++ innodb_io_reads+= backup->innodb_io_reads; |
226 | ++ innodb_io_read+= backup->innodb_io_read; |
227 | ++ innodb_io_reads_wait_timer+= backup->innodb_io_reads_wait_timer; |
228 | ++ innodb_lock_que_wait_timer+= backup->innodb_lock_que_wait_timer; |
229 | ++ innodb_innodb_que_wait_timer+= backup->innodb_innodb_que_wait_timer; |
230 | ++ innodb_page_access+= backup->innodb_page_access; |
231 | ++ query_plan_flags|= backup->query_plan_flags; |
232 | ++ query_plan_fsort_passes+= backup->query_plan_fsort_passes; |
233 | ++ DBUG_VOID_RETURN; |
234 | ++} |
235 | + |
236 | + void THD::restore_sub_statement_state(Sub_statement_state *backup) |
237 | + { |
238 | +@@ -3257,7 +3353,6 @@ |
239 | + first_successful_insert_id_in_cur_stmt= |
240 | + backup->first_successful_insert_id_in_cur_stmt; |
241 | + limit_found_rows= backup->limit_found_rows; |
242 | +- sent_row_count= backup->sent_row_count; |
243 | + client_capabilities= backup->client_capabilities; |
244 | + /* |
245 | + If we've left sub-statement mode, reset the fatal error flag. |
246 | +@@ -3275,8 +3370,8 @@ |
247 | + The following is added to the old values as we are interested in the |
248 | + total complexity of the query |
249 | */ |
250 | - examined_row_count+= backup->examined_row_count; |
251 | +- examined_row_count+= backup->examined_row_count; |
252 | cuted_fields+= backup->cuted_fields; |
253 | -+ innodb_io_reads+= backup->innodb_io_reads; |
254 | -+ innodb_io_read+= backup->innodb_io_read; |
255 | -+ innodb_io_reads_wait_timer+= backup->innodb_io_reads_wait_timer; |
256 | -+ innodb_lock_que_wait_timer+= backup->innodb_lock_que_wait_timer; |
257 | -+ innodb_innodb_que_wait_timer+= backup->innodb_innodb_que_wait_timer; |
258 | -+ innodb_page_access+= backup->innodb_page_access; |
259 | ++ restore_sub_statement_state_slow_extended(backup); |
260 | DBUG_VOID_RETURN; |
261 | } |
262 | |
263 | @@ -1308,11 +1375,17 @@ |
264 | }; |
265 | |
266 | |
267 | -@@ -1000,6 +1015,14 @@ |
268 | +@@ -1000,6 +1015,24 @@ |
269 | uint in_sub_stmt; |
270 | bool enable_slow_log; |
271 | bool last_insert_id_used; |
272 | + |
273 | ++ /*** Following variables used in slow_extended.patch ***/ |
274 | ++ ulong tmp_tables_used; |
275 | ++ ulong tmp_tables_disk_used; |
276 | ++ ulonglong tmp_tables_size; |
277 | ++ |
278 | ++ bool innodb_was_used; |
279 | + ulong innodb_io_reads; |
280 | + ulonglong innodb_io_read; |
281 | + ulong innodb_io_reads_wait_timer; |
282 | @@ -1320,20 +1393,55 @@ |
283 | + ulong innodb_innodb_que_wait_timer; |
284 | + ulong innodb_page_access; |
285 | + |
286 | ++ ulong query_plan_flags; |
287 | ++ ulong query_plan_fsort_passes; |
288 | ++ /*** The variables above used in slow_extended.patch ***/ |
289 | ++ |
290 | SAVEPOINT *savepoints; |
291 | enum enum_check_fields count_cuted_fields; |
292 | }; |
293 | -@@ -1427,6 +1450,26 @@ |
294 | +@@ -1427,6 +1460,77 @@ |
295 | thr_lock_type update_lock_default; |
296 | Delayed_insert *di; |
297 | |
298 | ++ /*** Following variables used in slow_extended.patch ***/ |
299 | ++ /* |
300 | ++ Variable write_to_slow_log: |
301 | ++ 1) initialized in |
302 | ++ * sql_connect.cc (log_slow_rate_limit support) |
303 | ++ * slave.cc (log_slow_slave_statements support) |
304 | ++ 2) The variable is initialized on the thread startup and remains |
305 | ++ constant afterwards. This will change when |
306 | ++ LP #712396 ("log_slow_slave_statements not work on replication |
307 | ++ threads without RESTART") is implemented. |
308 | ++ 3) An implementation of LP #688646 ("Make query sampling possible |
309 | ++ by query") should use it. |
310 | ++ */ |
311 | + bool write_to_slow_log; |
312 | -+ |
313 | ++ /* |
314 | ++ Variable bytes_send_old saves value of thd->status_var.bytes_sent |
315 | ++ before query execution. |
316 | ++ */ |
317 | + ulonglong bytes_sent_old; |
318 | ++ /* |
319 | ++ Original row_count value at the start of query execution |
320 | ++ (used by the slow_extended patch). |
321 | ++ */ |
322 | ++ ulong orig_row_count; |
323 | ++ /* |
324 | ++ Variables tmp_tables_*** collect statistics about usage of temporary tables |
325 | ++ */ |
326 | + ulong tmp_tables_used; |
327 | + ulong tmp_tables_disk_used; |
328 | + ulonglong tmp_tables_size; |
329 | ++ /* |
330 | ++ Variable innodb_was_used shows used or not InnoDB engine in current query. |
331 | ++ */ |
332 | + bool innodb_was_used; |
333 | ++ /* |
334 | ++ Following Variables innodb_*** (is |should be) different from |
335 | ++ default values only if (innodb_was_used==TRUE) |
336 | ++ */ |
337 | + ulonglong innodb_trx_id; |
338 | + ulong innodb_io_reads; |
339 | + ulonglong innodb_io_read; |
340 | @@ -1342,26 +1450,34 @@ |
341 | + ulong innodb_innodb_que_wait_timer; |
342 | + ulong innodb_page_access; |
343 | + |
344 | ++ /* |
345 | ++ Variable query_plan_flags collects information about query plan entites |
346 | ++ used on query execution. |
347 | ++ */ |
348 | + ulong query_plan_flags; |
349 | ++ /* |
350 | ++ Variable query_plan_fsort_passes collects information about file sort passes |
351 | ++ acquired during query execution. |
352 | ++ */ |
353 | + ulong query_plan_fsort_passes; |
354 | -+ |
355 | ++ /* |
356 | ++ Query can generate several errors/warnings during execution |
357 | ++ (see THD::handle_condition comment in sql_class.h) |
358 | ++ Variable last_errno contains the last error/warning acquired during |
359 | ++ query execution. |
360 | ++ */ |
361 | + uint last_errno; |
362 | ++ /*** The variables above used in slow_extended.patch ***/ |
363 | ++ |
364 | ++ /*** Following methods used in slow_extended.patch ***/ |
365 | ++ void clear_slow_extended(); |
366 | ++ void reset_sub_statement_state_slow_extended(Sub_statement_state *backup); |
367 | ++ void restore_sub_statement_state_slow_extended(const Sub_statement_state *backup); |
368 | ++ /*** The methods above used in slow_extended.patch ***/ |
369 | + |
370 | /* <> 0 if we are inside of trigger or stored function. */ |
371 | uint in_sub_stmt; |
372 | /* TRUE when the current top has SQL_LOG_BIN ON */ |
373 | -@@ -1772,6 +1815,11 @@ |
374 | - create_sort_index(); may differ from examined_row_count. |
375 | - */ |
376 | - ulong row_count; |
377 | -+ /* |
378 | -+ Original row_count value at the start of query execution |
379 | -+ (used by the slow_extended patch). |
380 | -+ */ |
381 | -+ ulong orig_row_count; |
382 | - pthread_t real_id; /* For debugging */ |
383 | - my_thread_id thread_id; |
384 | - uint tmp_table, global_read_lock; |
385 | --- a/sql/sql_connect.cc |
386 | +++ b/sql/sql_connect.cc |
387 | @@ -1421,6 +1421,15 @@ |
388 | @@ -1390,7 +1506,15 @@ |
389 | |
390 | const char *any_db="*any*"; // Special symbol for check_access |
391 | |
392 | -@@ -1702,6 +1703,50 @@ |
393 | +@@ -1001,6 +1002,7 @@ |
394 | + the slow log only if opt_log_slow_admin_statements is set. |
395 | + */ |
396 | + thd->enable_slow_log= TRUE; |
397 | ++ thd->clear_slow_extended(); |
398 | + thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */ |
399 | + thd->set_time(); |
400 | + if (!thd->is_valid_time()) |
401 | +@@ -1702,6 +1704,50 @@ |
402 | DBUG_RETURN(error); |
403 | } |
404 | |
405 | @@ -1441,7 +1565,7 @@ |
406 | |
407 | void log_slow_statement(THD *thd) |
408 | { |
409 | -@@ -1715,17 +1760,51 @@ |
410 | +@@ -1715,17 +1761,51 @@ |
411 | if (unlikely(thd->in_sub_stmt)) |
412 | DBUG_VOID_RETURN; // Don't set time for sub stmt |
413 | |
414 | @@ -1496,38 +1620,16 @@ |
415 | ((thd->server_status & |
416 | (SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) && |
417 | opt_log_queries_not_using_indexes && |
418 | -@@ -2101,6 +2180,9 @@ |
419 | - context.resolve_in_table_list_only(select_lex-> |
420 | - table_list.first); |
421 | - |
422 | -+ /* Save the original row_count value for extended stats in slow query log */ |
423 | -+ thd->orig_row_count= thd->row_count; |
424 | -+ |
425 | - /* |
426 | - Reset warning count for each query that uses tables |
427 | - A better approach would be to reset this for any commands |
428 | -@@ -5829,6 +5911,21 @@ |
429 | +@@ -5827,7 +5907,8 @@ |
430 | + thd->main_da.reset_diagnostics_area(); |
431 | + thd->total_warn_count=0; // Warnings for this query |
432 | thd->rand_used= 0; |
433 | - thd->sent_row_count= thd->examined_row_count= 0; |
434 | +- thd->sent_row_count= thd->examined_row_count= 0; |
435 | ++ |
436 | ++ thd->clear_slow_extended(); |
437 | |
438 | -+ thd->bytes_sent_old= thd->status_var.bytes_sent; |
439 | -+ thd->tmp_tables_used= thd->tmp_tables_disk_used= 0; |
440 | -+ thd->tmp_tables_size= 0; |
441 | -+ thd->innodb_was_used= FALSE; |
442 | -+ thd->innodb_trx_id= 0; |
443 | -+ thd->innodb_io_reads= 0; |
444 | -+ thd->innodb_io_read= 0; |
445 | -+ thd->innodb_io_reads_wait_timer= 0; |
446 | -+ thd->innodb_lock_que_wait_timer= 0; |
447 | -+ thd->innodb_innodb_que_wait_timer= 0; |
448 | -+ thd->innodb_page_access= 0; |
449 | -+ thd->query_plan_flags= QPLAN_NONE; |
450 | -+ thd->query_plan_fsort_passes= 0; |
451 | -+ thd->last_errno= 0; |
452 | -+ |
453 | /* |
454 | Because we come here only for start of top-statements, binlog format is |
455 | - constant inside a complex statement (using stored functions) etc. |
456 | --- a/sql/sql_select.cc |
457 | +++ b/sql/sql_select.cc |
458 | @@ -6798,7 +6798,10 @@ |
459 | @@ -2669,3 +2771,320 @@ |
460 | @@ -0,0 +1,2 @@ |
461 | +SHOW GLOBAL VARIABLES like 'log_slow_admin_statements'; |
462 | +SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='log_slow_admin_statements'; |
463 | +--- /dev/null |
464 | ++++ b/mysql-test/t/percona_slow_extended_error_on_quit.test |
465 | +@@ -0,0 +1,87 @@ |
466 | ++################################################################################ |
467 | ++# Current test check following attributes: # |
468 | ++# 1) "Last_errno" # |
469 | ++# 2) "Rows_{sent,examined|affected|read} # |
470 | ++# 3) Bytes_sent # |
471 | ++# 4) Tmp_{tables|dist_tables|table_size} # |
472 | ++# 5) InnoDB statistic counters # |
473 | ++# in Slow Query Log # |
474 | ++# for administrative command "Quit" # |
475 | ++# # |
476 | ++# See Launchpad Bug #716210 # |
477 | ++################################################################################ |
478 | ++ |
479 | ++--source include/have_innodb.inc |
480 | ++ |
481 | ++################################################################################ |
482 | ++--let log_file=percona.slow_extended.error_on_quit |
483 | ++--let wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST; |
484 | ++################################################################################ |
485 | ++ |
486 | ++--disable_warnings |
487 | ++DROP TABLE IF EXISTS t; |
488 | ++--enable_warnings |
489 | ++CREATE TABLE t(a INT) engine=InnoDB; |
490 | ++INSERT INTO t VALUES(0),(1),(2),(3),(4); |
491 | ++ |
492 | ++################################################################################ |
493 | ++--source include/log_start.inc |
494 | ++ |
495 | ++--connect(additional,localhost,root,,) |
496 | ++--connection additional |
497 | ++ |
498 | ++ SET log_slow_verbosity=innodb; |
499 | ++ SET long_query_time= 0; |
500 | ++ |
501 | ++--disable_result_log |
502 | ++--error ER_TABLE_EXISTS_ERROR |
503 | ++ CREATE TABLE t(a INT) engine=InnoDB; |
504 | ++--enable_result_log |
505 | ++ |
506 | ++--connection default |
507 | ++--echo # Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
508 | ++--disconnect additional |
509 | ++--source include/wait_condition.inc |
510 | ++--source include/log_stop.inc |
511 | ++--source include/percona_slow_extended_error_on_quit.inc |
512 | ++################################################################################ |
513 | ++--source include/log_start.inc |
514 | ++ |
515 | ++--connect(additional,localhost,root,,) |
516 | ++--connection additional |
517 | ++ |
518 | ++ SET log_slow_verbosity=innodb; |
519 | ++ SET long_query_time= 0; |
520 | ++ |
521 | ++--disable_result_log |
522 | ++ INSERT INTO t SELECT * FROM t ORDER BY RAND(); |
523 | ++--enable_result_log |
524 | ++ |
525 | ++--connection default |
526 | ++--echo # Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
527 | ++--disconnect additional |
528 | ++--source include/wait_condition.inc |
529 | ++--source include/log_stop.inc |
530 | ++--source include/percona_slow_extended_error_on_quit.inc |
531 | ++################################################################################ |
532 | ++--source include/log_start.inc |
533 | ++ |
534 | ++--connect(additional,localhost,root,,) |
535 | ++--connection additional |
536 | ++ |
537 | ++ SET log_slow_verbosity=innodb; |
538 | ++ SET long_query_time= 0; |
539 | ++ |
540 | ++--disable_result_log |
541 | ++ SELECT * FROM t; |
542 | ++--enable_result_log |
543 | ++ |
544 | ++--connection default |
545 | ++--echo # Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
546 | ++--disconnect additional |
547 | ++--source include/wait_condition.inc |
548 | ++--source include/log_stop.inc |
549 | ++--source include/percona_slow_extended_error_on_quit.inc |
550 | ++################################################################################ |
551 | ++ |
552 | ++DROP TABLE t; |
553 | +--- /dev/null |
554 | ++++ b/mysql-test/r/percona_slow_extended_error_on_quit.result |
555 | +@@ -0,0 +1,171 @@ |
556 | ++DROP TABLE IF EXISTS t; |
557 | ++CREATE TABLE t(a INT) engine=InnoDB; |
558 | ++INSERT INTO t VALUES(0),(1),(2),(3),(4); |
559 | ++[log_start.inc] percona.slow_extended.error_on_quit |
560 | ++SET log_slow_verbosity=innodb; |
561 | ++SET long_query_time= 0; |
562 | ++CREATE TABLE t(a INT) engine=InnoDB; |
563 | ++# Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
564 | ++[log_stop.inc] percona.slow_extended.error_on_quit |
565 | ++################################################################################ |
566 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: CREATE |
567 | ++[log_grep.inc] lines: 1 |
568 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: INSERT |
569 | ++[log_grep.inc] lines: 0 |
570 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: SELECT |
571 | ++[log_grep.inc] lines: 0 |
572 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Quit |
573 | ++[log_grep.inc] lines: 1 |
574 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: [^0]+ |
575 | ++[log_grep.inc] lines: 1 |
576 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: 0 |
577 | ++[log_grep.inc] lines: 2 |
578 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: [^0]+ |
579 | ++[log_grep.inc] lines: 0 |
580 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: 0 |
581 | ++[log_grep.inc] lines: 3 |
582 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: [^0]+ |
583 | ++[log_grep.inc] lines: 0 |
584 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: 0 |
585 | ++[log_grep.inc] lines: 3 |
586 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: [^0]+ |
587 | ++[log_grep.inc] lines: 0 |
588 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: 0 |
589 | ++[log_grep.inc] lines: 3 |
590 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: [^0]+ |
591 | ++[log_grep.inc] lines: 3 |
592 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: 0 |
593 | ++[log_grep.inc] lines: 0 |
594 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: [^0]+ |
595 | ++[log_grep.inc] lines: 2 |
596 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: 0 |
597 | ++[log_grep.inc] lines: 1 |
598 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: [^0]+ |
599 | ++[log_grep.inc] lines: 0 |
600 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: 0 |
601 | ++[log_grep.inc] lines: 3 |
602 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: [^0]+ |
603 | ++[log_grep.inc] lines: 0 |
604 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: 0 |
605 | ++[log_grep.inc] lines: 3 |
606 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: [^0]+ |
607 | ++[log_grep.inc] lines: 0 |
608 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: 0 |
609 | ++[log_grep.inc] lines: 3 |
610 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # No InnoDB statistics available for this query |
611 | ++[log_grep.inc] lines: 3 |
612 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # InnoDB_trx_id: |
613 | ++[log_grep.inc] lines: 0 |
614 | ++################################################################################ |
615 | ++[log_start.inc] percona.slow_extended.error_on_quit |
616 | ++SET log_slow_verbosity=innodb; |
617 | ++SET long_query_time= 0; |
618 | ++INSERT INTO t SELECT * FROM t ORDER BY RAND(); |
619 | ++# Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
620 | ++[log_stop.inc] percona.slow_extended.error_on_quit |
621 | ++################################################################################ |
622 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: CREATE |
623 | ++[log_grep.inc] lines: 0 |
624 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: INSERT |
625 | ++[log_grep.inc] lines: 1 |
626 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: SELECT |
627 | ++[log_grep.inc] lines: 1 |
628 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Quit |
629 | ++[log_grep.inc] lines: 1 |
630 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: [^0]+ |
631 | ++[log_grep.inc] lines: 0 |
632 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: 0 |
633 | ++[log_grep.inc] lines: 3 |
634 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: [^0]+ |
635 | ++[log_grep.inc] lines: 0 |
636 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: 0 |
637 | ++[log_grep.inc] lines: 3 |
638 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: [^0]+ |
639 | ++[log_grep.inc] lines: 1 |
640 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: 0 |
641 | ++[log_grep.inc] lines: 2 |
642 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: [^0]+ |
643 | ++[log_grep.inc] lines: 2 |
644 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: 0 |
645 | ++[log_grep.inc] lines: 1 |
646 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: [^0]+ |
647 | ++[log_grep.inc] lines: 3 |
648 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: 0 |
649 | ++[log_grep.inc] lines: 0 |
650 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: [^0]+ |
651 | ++[log_grep.inc] lines: 2 |
652 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: 0 |
653 | ++[log_grep.inc] lines: 1 |
654 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: [^0]+ |
655 | ++[log_grep.inc] lines: 1 |
656 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: 0 |
657 | ++[log_grep.inc] lines: 2 |
658 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: [^0]+ |
659 | ++[log_grep.inc] lines: 0 |
660 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: 0 |
661 | ++[log_grep.inc] lines: 3 |
662 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: [^0]+ |
663 | ++[log_grep.inc] lines: 1 |
664 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: 0 |
665 | ++[log_grep.inc] lines: 2 |
666 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # No InnoDB statistics available for this query |
667 | ++[log_grep.inc] lines: 2 |
668 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # InnoDB_trx_id: |
669 | ++[log_grep.inc] lines: 1 |
670 | ++################################################################################ |
671 | ++[log_start.inc] percona.slow_extended.error_on_quit |
672 | ++SET log_slow_verbosity=innodb; |
673 | ++SET long_query_time= 0; |
674 | ++SELECT * FROM t; |
675 | ++# Disconnecting (passing to Slow Query Log "# administrative command: Quit") |
676 | ++[log_stop.inc] percona.slow_extended.error_on_quit |
677 | ++################################################################################ |
678 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: CREATE |
679 | ++[log_grep.inc] lines: 0 |
680 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: INSERT |
681 | ++[log_grep.inc] lines: 0 |
682 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: SELECT |
683 | ++[log_grep.inc] lines: 1 |
684 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Quit |
685 | ++[log_grep.inc] lines: 1 |
686 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: [^0]+ |
687 | ++[log_grep.inc] lines: 0 |
688 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Last_errno: 0 |
689 | ++[log_grep.inc] lines: 3 |
690 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: [^0]+ |
691 | ++[log_grep.inc] lines: 1 |
692 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_sent: 0 |
693 | ++[log_grep.inc] lines: 2 |
694 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: [^0]+ |
695 | ++[log_grep.inc] lines: 1 |
696 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_examined: 0 |
697 | ++[log_grep.inc] lines: 2 |
698 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: [^0]+ |
699 | ++[log_grep.inc] lines: 0 |
700 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_affected: 0 |
701 | ++[log_grep.inc] lines: 3 |
702 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: [^0]+ |
703 | ++[log_grep.inc] lines: 3 |
704 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Rows_read: 0 |
705 | ++[log_grep.inc] lines: 0 |
706 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: [^0]+ |
707 | ++[log_grep.inc] lines: 2 |
708 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Bytes_sent: 0 |
709 | ++[log_grep.inc] lines: 1 |
710 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: [^0]+ |
711 | ++[log_grep.inc] lines: 0 |
712 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_tables: 0 |
713 | ++[log_grep.inc] lines: 3 |
714 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: [^0]+ |
715 | ++[log_grep.inc] lines: 0 |
716 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_disk_tables: 0 |
717 | ++[log_grep.inc] lines: 3 |
718 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: [^0]+ |
719 | ++[log_grep.inc] lines: 0 |
720 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: Tmp_table_sizes: 0 |
721 | ++[log_grep.inc] lines: 3 |
722 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # No InnoDB statistics available for this query |
723 | ++[log_grep.inc] lines: 2 |
724 | ++[log_grep.inc] file: percona.slow_extended.error_on_quit pattern: # InnoDB_trx_id: |
725 | ++[log_grep.inc] lines: 1 |
726 | ++################################################################################ |
727 | +--- /dev/null |
728 | ++++ b/mysql-test/include/percona_slow_extended_error_on_quit.inc |
729 | +@@ -0,0 +1,50 @@ |
730 | ++--echo ################################################################################ |
731 | ++--let grep_pattern=CREATE |
732 | ++--source include/log_grep.inc |
733 | ++--let grep_pattern=INSERT |
734 | ++--source include/log_grep.inc |
735 | ++--let grep_pattern=SELECT |
736 | ++--source include/log_grep.inc |
737 | ++--let grep_pattern=Quit |
738 | ++--source include/log_grep.inc |
739 | ++--let grep_pattern=Last_errno: [^0]+ |
740 | ++--source include/log_grep.inc |
741 | ++--let grep_pattern=Last_errno: 0 |
742 | ++--source include/log_grep.inc |
743 | ++--let grep_pattern=Rows_sent: [^0]+ |
744 | ++--source include/log_grep.inc |
745 | ++--let grep_pattern=Rows_sent: 0 |
746 | ++--source include/log_grep.inc |
747 | ++--let grep_pattern=Rows_examined: [^0]+ |
748 | ++--source include/log_grep.inc |
749 | ++--let grep_pattern=Rows_examined: 0 |
750 | ++--source include/log_grep.inc |
751 | ++--let grep_pattern=Rows_affected: [^0]+ |
752 | ++--source include/log_grep.inc |
753 | ++--let grep_pattern=Rows_affected: 0 |
754 | ++--source include/log_grep.inc |
755 | ++--let grep_pattern=Rows_read: [^0]+ |
756 | ++--source include/log_grep.inc |
757 | ++--let grep_pattern=Rows_read: 0 |
758 | ++--source include/log_grep.inc |
759 | ++--let grep_pattern=Bytes_sent: [^0]+ |
760 | ++--source include/log_grep.inc |
761 | ++--let grep_pattern=Bytes_sent: 0 |
762 | ++--source include/log_grep.inc |
763 | ++--let grep_pattern=Tmp_tables: [^0]+ |
764 | ++--source include/log_grep.inc |
765 | ++--let grep_pattern=Tmp_tables: 0 |
766 | ++--source include/log_grep.inc |
767 | ++--let grep_pattern=Tmp_disk_tables: [^0]+ |
768 | ++--source include/log_grep.inc |
769 | ++--let grep_pattern=Tmp_disk_tables: 0 |
770 | ++--source include/log_grep.inc |
771 | ++--let grep_pattern=Tmp_table_sizes: [^0]+ |
772 | ++--source include/log_grep.inc |
773 | ++--let grep_pattern=Tmp_table_sizes: 0 |
774 | ++--source include/log_grep.inc |
775 | ++--let grep_pattern=# No InnoDB statistics available for this query |
776 | ++--source include/log_grep.inc |
777 | ++--let grep_pattern=# InnoDB_trx_id: |
778 | ++--source include/log_grep.inc |
779 | ++--echo ################################################################################ |
LGTM with the the first comment below replied to and the rest of the changes. As far as I'm concerned, if the adjusted patch will be different from the current one with the changes below and nothing else, a new MP is not necessary.
- Can the argument of restore_ sub_statement_ state_slow_ extended( Sub_statement_ state reset_sub_ statement_ state_slow_ extended( Sub_statement_ state
THD::
*backup) and the method void
THD::
*backup) be constified? Please do so if yes.
- Line 314: s/save/saves
- Line 330: s/innodb_was used show/innodb_ was_used shows
- Line 362: s/Belowing/ Following, or remove the line
altogether (line 364 is almost duplicate)