关闭

MySQL profiling的用法

标签: MySQL SHOW PROFILEMySQL profiling
927人阅读 评论(0) 收藏 举报
分类:

    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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34030次
    • 积分:931
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类