数据库占用CPU过高,性能分析与调优

一、使用 dstat -tcdlmnsygr --disk-util 查看当前系统资源使用状况,当前cpu使用率100%

数据库占用CPU过高,性能分析与调优_第1张图片

 

 二、使用TOP命令 查看当前占用CPU进程,可以看到当前占用CPU进程最高的是MYSQL load average出现负载

  数据库占用CPU过高,性能分析与调优_第2张图片

三、开启慢SQL的配置

1、LIUNX 系统 mysql配置文件my.cnf中增加

 

slow_query_log    布尔型变量,默认为真。没有这变量,数据库不会打印慢查询的日志。

 

slow_query_log_file=/usr/local/mysql/data/zhoucentos-slow.log     指定日志文件存放位置

 

long_query_time=0.1   记录超过的时间,默认为10s   该值设为0.1100毫秒

 

2、 配置完成,连接数据库检查慢查询日志是否开启:命令如下:mysql> show variables like '%slow_query_log%';

数据库占用CPU过高,性能分析与调优_第3张图片

四、 慢查询日志分析 

1、命令 mysqldumpslow 若执行 mysqldumpslow 出现mysqldump: command not found

    1. 输入vi ~/.bash_profile
    2. 添加如下三行代码: 
    3. #mysql
    4. PATH=$PATH:/usr/local/mysql/bin
    5. export
    6. 保存并退出后
    7. source ~/.bash_profile

2、mysqldumpslow -s r -t 20 host-slow.log  命令分别可以看出访问次数最多的20sql语句和返回记录集最多的20sql

数据库占用CPU过高,性能分析与调优_第4张图片

3、mysqldumpslow –s at -t 50 host-slow.log   显示出耗时最长的50SQL语句的执行信息

数据库占用CPU过高,性能分析与调优_第5张图片

以Count: 32  Time=0.26s (8s)  Lock=0.00s (0s)  Rows=10.0 (320), wos_20120719[wos_20120719]@2host 为例:

Count: 32  SQL总共执行32

Time = 0.26s (8s)  平均每次执行该SQL耗时0.26秒,总共耗时32(次)*0.26(秒)=8秒。

Lock=0.00s(0s)   lock时间0

Rows =10.0(320)  每次执行SQL影响数据库表中的10行记录,总共影响 10(行)*32(次)=320行记录

4、执行计划
在sql语句前加上explain,可以分析这条sql语句的执行情况
explain select * from teacher where

数据库占用CPU过高,性能分析与调优_第6张图片

Type列可能的值:
Const:表中只有一个匹配行,用到primary key或unique key
Eq_ref:唯一性索引扫描,key的所有部分被连接联接查询使用,且key是unique或primary key
ref:非唯一性索引扫描,或只使用了联合索引的最左前缀
Range:索引范围扫描,在索引列上进行给定范围内的检索,如between,in(1,100)
Index:遍历索引...
All:全表扫描

Prossible key:使用哪个索引能找到行
Keys:sql语句使用的索引
rows:mysql 根据索引选择情况,估算查找数据所需读取的行数

5、添加索引

数据库占用CPU过高,性能分析与调优_第7张图片

数据库占用CPU过高,性能分析与调优_第8张图片

 

 添加索引后,查看CPU占用进程,可以看到mysql已经大大降低

数据库占用CPU过高,性能分析与调优_第9张图片

 

转载于:https://www.cnblogs.com/dwdw/p/10891001.html

你可能感兴趣的:(数据库占用CPU过高,性能分析与调优)