MySQL profiling的用法

    MySQL数据库最常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。今天我们不讨论服务器硬件的性能瓶颈,只是谈谈MySQL系统本身,通常需要对数据库进行分析,常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

     这个是一系列的文章,今天只谈SHOW PROFILE Syntax。通过它我们可以清楚的知道某条Query的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?具体的做法如下:

    1.开启profiling参数
        set profiling=1;
    2.执行Query
        select * from a;
    3.获取系统中保存的所有 Query 的 profile 概要信息
        show profiles;
    4.针对单个 Query 获取详细的 profile 信息。
        show profile all for query 1;

         在所有列中,我们只关心StatusDuration这两列。status:是profile里的状态,duration:是status状态下的耗时。因此我们关注的就是那个状态最耗时,这些状态中那些可以优化。在profile中,下面几种状态是需要重点关注的,而且大多数可以通过创建合适的索引就能完成优化。

状态建议
System lock确认是由于哪个锁引起的,通常是因为MySQL或InnoDB内核级的锁引起的建议:如果耗时较大再关注即可,一般情况下都还好
Sending data从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见
备注:Sending Data不是网络发送,是从硬盘读取,发送到网络是Writing to net
建议:通过索引或加上LIMIT,减少需要扫描并且发送给客户端的数据量
Sorting result正在对结果进行排序,类似Creating sort index,不过是正常表,而不是在内存表中进行排序
建议:创建适当的索引
Table lock表级锁,没什么好说的,要么是因为MyISAM引擎表级锁,要么是其他情况显式锁表
create sort index当前的SELECT中需要用到临时表在进行ORDER BY排序
建议:创建适当的索引
checking query cache for
querychecking privileges on cached


sending cached result to clien

storing result in query cache
和query cache相关的状态,已经多次强烈建议关闭


语法如下:

    SHOW PROFILE [type [, type] ... ]
       [FOR QUERY n]
       [LIMIT row_count [OFFSET offset]]

    type:
         ALL:显示所有的开销信息
       | BLOCK IO:显示块IO相关开销
       | CONTEXT SWITCHES:上下文切换相关开销
       | CPU:显示用户CPU时间、系统CPU时间
       | IPC:显示发送和接收相关开销信息
       | MEMORY:目前没有实现
       | PAGE FAULTS:显示页面错误相关开销信息  
       | SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息
       | SWAPS:显示交换次数相关开销的信息 


profile功能只能在SESSION级别使用,还做不到像SQL Server那样可以全局开启,收集一段时间后再关闭,这点有待改进。以上信息也可以通过INFORMATION_SCHEMA.PROFILING表中的信息来查看。


  参考资料:
       https://dev.mysql.com/doc/refman/5.7/en/show-profile.html
       https://dev.mysql.com/doc/refman/5.7/en/profiling-table.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值