show processlist这个东西根本看不出个眉目来。我在数据库里面做了设置,凡是大于1秒的SQL都打出来,后来发现有很多SQL执行都是5秒多,这非常要命。但问题是这些SQL在我此前的测试中性能都没问题,通常都是毫秒级别的执行效率,可能是因为MYSQL CPU占用率太高影响了执行速度,但问题是我如何去排查是什么东西或者什么SQL导致了MYSQL的CPU占用过高呢?网上找了很多都没有答案。

解决方案 »

  1.   

    原因很多,你的sql引擎,环境是否还跑了其他项目,并发量,配置参数只能一个一个去看
      

  2.   


    先用linux的top命令看一下,是哪些进程cpu使用率比较高:
      

  3.   


    show processlist只是显示mysql内有多少会话,分别在执行什么命令,或者是空闲了,或者是在等待资源等。建议先从linux里找到占用cpu,内存多的进程,然后看看是不是mysql,另外,不建议你把慢的sql都打印出来,这个本身就会占用大量的cpu资源,建议用mysql的慢查询日志功能
      

  4.   


    是开启的慢查询日志,可能我没描述清楚。我是通过top来看的CPU的占用情况的,都被mysql占用光了,我现在的苦恼是怎么去定位这些耗CPU资源的SQL,貌似mysql没有提供这样的监控
      

  5.   


    是开启的慢查询日志,可能我没描述清楚。我是通过top来看的CPU的占用情况的,都被mysql占用光了,我现在的苦恼是怎么去定位这些耗CPU资源的SQL,貌似mysql没有提供这样的监控对的 ,没有监控。另外,mysql里的线程id和top里的os的线程id也 不对应,所以没办法通过top命令直接找到是哪个会话占用了大量的cpu资源。
      

  6.   

    你都已经发现有很多SQL执行都是5秒多,那么应该从这些 sql 上去分析为什么慢了
    你可以把你的数据备份一份到别的电脑 上测试这些 sql , 如果快,通常说明你的服务器硬件资源不够,并发高导致服务器来不响应
    如果也慢,那么是 sql 本身的问题,应该进行优化
      

  7.   

    MySQL消耗cpu无非是sql慢了或者是sql并发量高 
    单位时间 CPU 资源 = 查询执行平均成本 x 单位时间执行的查询数
    如果说单位时间执行的查询数没有变化的话,那么就是执行成本的问题,慢sql既然都已经定位出来为什么不优化试试?