查看原文
其他

Performance Schema使用简介(一)

2017-06-23 董红禹 沃趣科技

Performance Schema简介

Oracle DBA都应该知道 Oracle中提供了大量的视图供DBA们排查问题使用,并且有等待事件帮助大家快速定位问题属于哪一类。MySQL 中也有Performance Schema帮助大家去分析排查问题,并且在5.7中增加了Sys Schema,将Performance Schema和information_schema的信息格式化后,供大家更方便的分析问题。 


这里先介绍先Performance Schema的使用方式,便于后面大家更好的去使用Sys Schema。

Performance Schema开启方式

  • 开启Performance Schema库


在配置文件中添加performance_schema=on


  • 设置instruments及consumers开启 


开启performance_schema=on之后我们还需要进行设置instruments及consumers 


instruments通俗讲就是监控项可以通过setup_instruments表设置需要开启对哪些项监控进行统计 

consumers就是控制是否将监控到的结果进行记录

UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';

UPDATE setup_consumers SET ENABLED = 'YES';


如果不开启instruments和consumers则相应的事件检测则不能使用,也就不能收集相应的等待事件和性能的统计。 


当然我们也可以单独设置某一个instruments的开启和关闭

UPDATE setup_instruments SET ENABLED = 'NO'

WHERE NAME = 'wait/io/file/sql/binlog';


为了防止重启后恢复默认配置可以添加到配置文件中设置

performance-schema-instrument='instrument_name=value'

performance-schema-consumer-consumer_name=value

instrument_name和consumer_name

可以通过查询setup_instruments和setup_consumers;查看


setup_consumers中的层级关系

mysql> select * from setup_consumers;

+--------------------------------+---------+
| NAME                           | ENABLED |
+--------------------------------+---------+
| events_stages_current          | YES     |
| events_stages_history          | YES     |
| events_stages_history_long     | YES     |
| events_statements_current      | YES     |
| events_statements_history      | YES     |
| events_statements_history_long | YES     |
| events_waits_current           | YES     |
| events_waits_history           | YES     |
| events_waits_history_long      | YES     |
| global_instrumentation         | YES     |
| thread_instrumentation         | YES     |
| statements_digest              | YES     |
+--------------------------------+---------+

12 rows in set (0.00 sec)


setup_consumers中的事件表有层级之分 ,我们可以通过上面看到有 global、thread、current、history、history_long,他们之间的层级如下:

global_instrumentation

thread_instrumentation
  events_waits_current
    events_waits_history
    events_waits_history_long
  events_stages_current
    events_stages_history
    events_stages_history_long
  events_statements_current
    events_statements_history
    events_statements_history_long

statements_digest


也就是说,如果设置了global的才会去检查thread的有没有被设置,如果thread的设置了才会去检查current的有没有被设置,如果global的没有被设置则thread和current都不去检查,相应的信息也不会记录到对应的表中。 


如果global_instrumentation没有被设置则对应的表中都不会记录任何信息。

 
这里的history、history_long可以通过参数设置大小,因为是内存表,如果太大会占用很多内存。


setup_instruments中的类型

mysql> select name,count(*) from setup_instruments group by left(name,5);

+---------------------------------+----------+
| name                            | count(*) |
+---------------------------------+----------+
| idle                            |        1 |
| stage/sql/After create          |      108 |
| statement/sql/select            |      168 |
| wait/synch/mutex/sql/PAGE::lock |      279 |
+---------------------------------+----------+

4 rows in set (0.00 sec)


我们可以看到setup_instruments中的类型有四种(5.6版本)。 

具体的解释大家可以在官网中查看:

https://dev.mysql.com/doc/refman/5.6/en/performance-schema-instrument-naming.html


简单使用介绍

简单介绍几个语句用于排查SQL语句的效率

  • 查询没有使用到索引或者索引效率低下的语句:

SELECT OBJECT_SCHEMA,  THREAD_ID TID, SUBSTR(SQL_TEXT, 1, 50) SQL_TEXT, ROWS_SENT RS, ROWS_EXAMINED RE,CREATED_TMP_TABLES,NO_INDEX_USED,NO_GOOD_INDEX_USED FROM performance_schema.events_statements_history WHERE (NO_INDEX_USED=1 OR NO_GOOD_INDEX_USED=1) and sql_text  NOT LIKE '%performance_schema%'\G


  • 查看哪些索引没有被使用过

SELECT

OBJECT_SCHEMA,
OBJECT_NAME,
INDEX_NAME
FROM table_io_waits_summary_by_index_usage
WHERE INDEX_NAME IS NOT NULL
AND COUNT_STAR = 0
AND OBJECT_SCHEMA <> 'mysql'

ORDER BY OBJECT_SCHEMA,OBJECT_NAME;


  • 查看S 48 30867 48 14987 0 0 2058 0 0:00:14 0:00:07 0:00:07 3601QL语句在哪个阶段消耗最大

SELECT eshl.event_name, sql_text, eshl.timer_wait/1000000000000 w_s

FROM performance_schema.events_stages_history_long eshl
JOIN performance_schema.events_statements_history_long esthl
ON (eshl.nesting_event_id = esthl.event_id)

WHERE eshl.timer_wait > 1*10000000000\G


总  结

此次简单介绍了Performance Schema的使用,后面会逐步介绍使用Performance Schema的一些实战功能。


近期好文

关于热点数据导出与加载的影响,多的是你不知道的事

沃趣科技与Mellanox联合打造证券行业高性能及同城双活数据库云平台

看各路神仙如何大战MySQL insecure warning报警有感

由optimizer_switch所引起的诡异问题

百尺竿头|沃趣科技QData v5.0.0高性能一体机重磅发布

基于Prometheus的数据库监控

“mysqlbinlog”工具做binlog server靠谱吗?

关于沃趣

杭州沃趣科技股份有限公司创建于2012年(股票代码:839849),创始团队为原阿里巴巴数据库及系统运维团队核心骨干,凭借着多年的运维经验,为行业客户提供专业数据库、系统相关的服务和产品;专注为用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。

沃趣科技的产品已广泛应用于证券、保险、医疗、广电传媒、银行、电信、能源电力、快递物流、公共事业、大型企业等,为这些行业用户持续提供行业解决方案及服务支持。

研发中心位于杭州,同时在北京、上海、广州、南京、兰州建立了分支机构,拥有辐射全国的销售和服务体系。

我们始终坚信,数据是驱动企业创新的源动力!坚持围绕企业数据库做好一件事

                        ——让高性能触手可及!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存