@@ -43,6 +43,8 @@ CREATE DEFINER='root'@'localhost' PROCEDURE ps_trace_statement_digest (
4343 Performance Schema truncates long SQL_TEXT values (and hence the
4444 EXPLAIN will fail due to parse errors).
4545
46+ Requires the SUPER privilege for "SET sql_log_bin = 0;".
47+
4648 Parameters
4749 -----------
4850
@@ -141,11 +143,16 @@ BEGIN
141143
142144 DECLARE v_start_fresh BOOLEAN DEFAULT false;
143145 DECLARE v_auto_enable BOOLEAN DEFAULT false;
146+ DECLARE v_this_thread_enabed ENUM(' YES' , ' NO' );
144147 DECLARE v_runtime INT DEFAULT 0 ;
145148 DECLARE v_start INT DEFAULT 0 ;
146149 DECLARE v_found_stmts INT ;
147150
151+ SET @log_bin := @@sql_log_bin;
152+ SET sql_log_bin = 0 ;
153+
148154 /* Do not track the current thread, it will kill the stack */
155+ SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema .threads WHERE PROCESSLIST_ID = CONNECTION_ID();
149156 CALL sys .ps_setup_disable_thread (CONNECTION_ID());
150157
151158 DROP TEMPORARY TABLE IF EXISTS stmt_trace;
@@ -185,6 +192,22 @@ BEGIN
185192 SET v_auto_enable = in_auto_enable;
186193 IF v_auto_enable THEN
187194 CALL sys .ps_setup_save (0 );
195+
196+ UPDATE performance_schema .threads
197+ SET INSTRUMENTED = IF(PROCESSLIST_ID IS NOT NULL , ' YES' , ' NO' );
198+
199+ -- Only the events_statements_history_long and events_stages_history_long tables and their ancestors are needed
200+ UPDATE performance_schema .setup_consumers
201+ SET ENABLED = ' YES'
202+ WHERE NAME NOT LIKE ' %\_ history'
203+ AND NAME NOT LIKE ' events_wait%'
204+ AND NAME NOT LIKE ' events_transactions%'
205+ AND NAME <> ' statements_digest' ;
206+
207+ UPDATE performance_schema .setup_instruments
208+ SET ENABLED = ' YES' ,
209+ TIMED = ' YES'
210+ WHERE NAME LIKE ' statement/%' OR NAME LIKE ' stage/%' ;
188211 END IF;
189212
190213 WHILE v_runtime < in_runtime DO
@@ -261,10 +284,14 @@ BEGIN
261284 DEALLOCATE PREPARE explain_stmt;
262285
263286 IF v_auto_enable THEN
264- CALL sys .ps_reload_saved ();
287+ CALL sys .ps_setup_reload_saved ();
288+ END IF;
289+ /* Restore INSTRUMENTED for this thread */
290+ IF (v_this_thread_enabed = ' YES' ) THEN
265291 CALL sys .ps_setup_enable_thread (CONNECTION_ID());
266292 END IF;
267293
294+ SET sql_log_bin = @log_bin;
268295END$$
269296
270297DELIMITER ;
0 commit comments