是什么
- 慢查询:执行超过指定时间的SQL语句;分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”
- 慢查询日志:MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中
- long_query_time参数的默认值为10s,我们可以调整这个参数,超过这个参数值的SQL将被定义为慢查询语句
如何用
-
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数
-
如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件
使用
SHOW VARIABLES LIKE'%slow_query_log%';
查看慢查询日志是否开启,默认关闭
使用
set global slow_query_log=1;
开启慢查询日志
使用
SHOW VARIABLES LIKE'long_query_time%';
查看慢查询默认阈值
默认10秒
使用
set long_query_time=1 ;
调整阈值为1秒
设置以后,我们可以使用
mysqldumpslow命令进行日志分析
工具-SHOW PROCESSLIST
查询mysql进程列表,可以杀掉故障进程
工具-SHOW PRIFILES
-
是什么
是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量
-
默认情况下,参数处于关闭状态,并保存最近15次的运行结果
set profiling = on ;
在show profiles下:
- 会显示你在开启profiling之后的SQL语句,并给出它们的查询id
- Duration会显示SQL的执行时间
有了查询ID之后,我们可以
- 查询CPU、内存、IO的执行状况,使用
show profile cpu,block io for query 1 ;
Status记录了一条SQL的完整生命周期,后面带着内存、CPO的使用和IO情况,足以帮助我们分析一条SQL的性能,并做出优化了
请注意,如果出现以下Status,证明这条SQL性能会被大幅影响
- converting HEAP to MyISAM :查询结果太过大,内存都不够用了往磁盘上搬了
- Creating tmp table: 创建临时表,极有可能出现FIleSORT
- Copying to tmp table on disk 把内存中临时表复制到磁盘,这是一个非常危险的信号,因为这个操作十分消耗CPU资源
- lockd 发生死锁
以上四个状态,出现任何一个,都必须得优化!!