介绍: 一条sql语句我们直接开始就建立索引是不对的,索引的建立有弊也有利,查询很慢的sql我们就要给他捕获出来一步步分析,那么慢查询日志是不可缺少的。
Mysql慢查询优化
优化步骤:
- 慢查询的开启并捕获
- explain+慢SQL分析
- showprofile查询SQL在Mysq1服务器里面的执行细节和生命周期情况
- SQL数据库服务器的参数调优。
(1)开启慢查询日志
如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢
查询日志支持将日志记录写入文件。
1)参数介绍:
slow_query_log
: 慢查询日志是否开启
slow_query_log_file
: 慢查询日志存放位置
long_query_time
: 查询超过多少秒才记录
2)步骤
show variables like 'slow_query%';
show variables like 'long_query_time'; #默认为10秒
+-----------------+------------+
+ Variable_ name + Value +
+-----------------+------------+
+1ong_ query_ time+ 3.000000 +
+-----------------+------------+
set global slow_query_log='ON'; #开启日志打印
set global slow_query_log_file='' #设置日志文件路径
set global long_query_time=3; #设置阈值,查过就会打印
打印的文字:
# Time: 200507 11:46:46 //时间20年5月7日
# User@Host: root[root] @ localhost [127.0.0.1] //地址
# Query_time: 4.007006 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 //查询时间
use storeserver; //数据库名称
SET timestamp=1588823206;
select sleep(4); //导致问题的sql的语句
SHOW GLOBAL STATUS LIKE '%Slow_queries%'; #查询出现问题的个数
(2)show profile
mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量。
SHOW VARIABLES LIKE 'profiling%'; #查看show profile的相关配置
+-----------------+------------+
+ Variable_ name + Value +
+-----------------+------------+
+ profiling + OFF + #默认是关闭的
+-----------------------+------+
+profiling_ history_size+ 15 + #保存最近15个sql语句
+-----------------------+------+
SET GLOBAL profiling='ON'; #开启测试工具
show profile cpu,block io for query Query_ID; #根据id查询详细的资源消耗
show profile后字段:
- ALL:显示所有的开销信息
- BLOCK IO:显示块IO相关开销
- CONTEXT SWITCHES:上下文切换相关开销
- CPU:显示CPU相关开销信息
- IPC:显示发送和接收相关开销信息
- MEMORY:显示内存相关开销信息
- PAGE FAULTS:显示页面错误相关开销信息
- SOURCE:显示和Source_ function,Source_ file,Source_ line相关的开销信息
- SWAPS:显示交换次数相关开销的信息I
出现这些Status我们要注意:
-
convqsrting HEAP to MyISAM: 查询结果太大,内存都不够用了往磁盘上搬了。
-
Creating tmp table: 创建临时表,拷贝数据到临时表,用完再删除。
-
Copying to tmp table on disk: 把内存中临时表复制到磁盘,危险。
-
locked: 锁。