Performance Schema是MySQL自带的、较为底层的性能监控特性,提供一系列、具备自定义收集粒度的监控体系。对MySQL服务执行过程中的各项事件(Events)的分析尤为重视
Performance Schema的精细化控制,主要通过performance_schema库下的一系列setup表来实现
(system@localhost) [(none)]> use performance_schema;
Database changed
(system@localhost) [performance_schema]> show tables like 'setup%';
+---------------------------------------+
| Tables_in_performance_schema (setup%) |
+---------------------------------------+
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_timers |
+---------------------------------------+
5 rows in set (0.00 sec)
setup_actors:用来控制要监控的线程,默认所有线程全部监控
setup_consumers:用来控制哪类事件信息将被保存
setup_instruments:用来控制哪些事件信息将被收集,以及是否记录时间
setup_objects:用来控制被监控的对象,默认所有对象都被监控
setup_timers:用来控制各项事件所使用的计时器
SQL语句执行过程中的事件,在performance_schema库中,setup_consumers和setup_instruments两表中记录的正是要收集的事件类型
(system@localhost) [performance_schema]> select * from setup_consumers;
+--------------------------------+---------+
| NAME | ENABLED |
+--------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | NO |
| events_statements_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+--------------------------------+---------+
12 rows in set (0.00 sec)
重点关注events_stages%,用来保存SQL语句执行过程中各类事件的列表,默认都是禁用
setup_consumers负责的是要监控的事件类型
(system@localhost) [performance_schema]> update setup_consumers set enabled='YES' where name like 'events_stages%';
Query OK, 3 rows affected (0.06 sec)
Rows matched: 3 Changed: 3 Warnings: 0
在setup_consumers配置表中:
名为global_instrumentation的事件,具有最高优先级,用于指定全局级别的信息收集,如果禁用,所有事件都不会被收集
名为thread_instrumentation的事件,用来指定线程级别的信息收集
开启关注的事件
(system@localhost) [performance_schema]> update setup_instruments set enabled='YES',
timed='YES' where name like 'stage/sql/%';
Query OK, 107 rows affected (0.00 sec)
Rows matched: 107 Changed: 107 Warnings: 0
所有语句触发的事件都保存在events_stages_history表中
events_stages_current
events_stages_history
events_stages_history_long
MySQL在使用过程中遇到访问速度慢,或者无法响应,通常是第一时间登陆MySQL,执行SHOW PROCESSLIST,SHOW FULL PROCESSLIST语句,查看当前连接的会话状态
mysqladmin命令有一个debug参数,可以分析当前MySQL服务的状态信息,同时也可以用来帮助我们定位当前锁的详细情况
[root@mysql1 /]# mysqladmin -usystem -p123456 -S /data/mysqldata/3306/mysql.sock debug
debug会将状态信息生成到MySQL数据库的错误文件中保存,一般锁的信息都会保存在最后几行,通过tail命令查看
[root@mysql1 /]#tail -10 phpmysql02.err