show processlist这个东西根本看不出个眉目来。我在数据库里面做了设置,凡是大于1秒的SQL都打出来,后来发现有很多SQL执行都是5秒多,这非常要命。但问题是这些SQL在我此前的测试中性能都没问题,通常都是毫秒级别的执行效率,可能是因为MYSQL CPU占用率太高影响了执行速度,但问题是我如何去排查是什么东西或者什么SQL导致了MYSQL的CPU占用过高呢?网上找了很多都没有答案。
解决方案 »
- Parameter 'recordcount' not found in the collection.
- MySQL开启远程访问
- 【求助】第一次设master/slave,不同步,不知道原因。100元报酬当我请顿饭
- 在linux下安装mysql时 ./configure 出现的问题
- MySQL的查询高速缓存的机制到底是怎样的?
- 请高手指点mysql字符集设置问题
- mySql 怎么导入SQL脚本文件
- 谁推荐几分有“数据库设计”和“c/s通信”这方面内容比较多一点的报纸!
- sql 多表关联更新
- 关于一首数据库问题,求解
- mysql无法添加外键约束
- mysql更新触发器先插入另一张表然后删除该条数据
先用linux的top命令看一下,是哪些进程cpu使用率比较高:
show processlist只是显示mysql内有多少会话,分别在执行什么命令,或者是空闲了,或者是在等待资源等。建议先从linux里找到占用cpu,内存多的进程,然后看看是不是mysql,另外,不建议你把慢的sql都打印出来,这个本身就会占用大量的cpu资源,建议用mysql的慢查询日志功能
是开启的慢查询日志,可能我没描述清楚。我是通过top来看的CPU的占用情况的,都被mysql占用光了,我现在的苦恼是怎么去定位这些耗CPU资源的SQL,貌似mysql没有提供这样的监控
是开启的慢查询日志,可能我没描述清楚。我是通过top来看的CPU的占用情况的,都被mysql占用光了,我现在的苦恼是怎么去定位这些耗CPU资源的SQL,貌似mysql没有提供这样的监控对的 ,没有监控。另外,mysql里的线程id和top里的os的线程id也 不对应,所以没办法通过top命令直接找到是哪个会话占用了大量的cpu资源。
你可以把你的数据备份一份到别的电脑 上测试这些 sql , 如果快,通常说明你的服务器硬件资源不够,并发高导致服务器来不响应
如果也慢,那么是 sql 本身的问题,应该进行优化
单位时间 CPU 资源 = 查询执行平均成本 x 单位时间执行的查询数
如果说单位时间执行的查询数没有变化的话,那么就是执行成本的问题,慢sql既然都已经定位出来为什么不优化试试?