将历史事件的集合限制为运行查询的用户

只对来自本地root用户连接的历史事件进行记录:

  1. UPDATE performance_schema.setup_actors
  2. SET ENABLED = 'NO', HISTORY = 'NO'
  3. WHERE HOST = '%' AND USER = '%';
  1. INSERT INTO performance_schema.setup_actors
  2. (HOST,USER,ROLE,ENABLED,HISTORY)
  3. VALUES('localhost','root','%','YES','YES');
  1. mysql> SELECT * FROM performance_schema.setup_actors;
  2. +-----------+-----------+------+---------+---------+
  3. | HOST | USER | ROLE | ENABLED | HISTORY |
  4. +-----------+-----------+------+---------+---------+
  5. | % | % | % | NO | NO |
  6. | localhost | test_user | % | YES | YES |
  7. +-----------+-----------+------+---------+---------+

确保相关配置开启

  1. UPDATE performance_schema.setup_instruments
  2. SET ENABLED = 'YES', TIMED = 'YES'
  3. WHERE NAME LIKE '%statement/%';
  1. UPDATE performance_schema.setup_instruments
  2. SET ENABLED = 'YES', TIMED = 'YES'
  3. WHERE NAME LIKE '%stage/%';
  1. UPDATE performance_schema.setup_consumers
  2. SET ENABLED = 'YES'
  3. WHERE NAME LIKE '%events_statements_%';
  1. UPDATE performance_schema.setup_consumers
  2. SET ENABLED = 'YES'
  3. WHERE NAME LIKE '%events_stages_%';

查询执行速度

  1. 运行任何你想要测试的SQL语句
  2. 查询上面那条SQL语句的EVENT_ID

    1. SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
    2. FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%<SQL语句>%';
  3. 使用第2步查出的event_id,查询执行结果

    1. SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
    2. FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=<event_id>;