慢查询

2020-08-05  本文已影响0人  策马踏清风

定义及作用

配置

  1. 位置
  1. 开启配置
slow_query_log = 1 # 0关闭 1开启
slow_query_log_file = slow.log # 慢文件存放位置(安装目录date文件夹下)
long_query_time = 5 # 查询多久以上的算是慢

排查

Query_time: xxx # 执行时间
Lock_time: xxx # 锁定时间

分析工具

mysqldumpslow -s at -t 5 /usr/local/data/slow.log
-s at # 算出平均时间
-t 5 # top5

常见优化

  1. 系统层面入手(排查sql导致cpu占用过高)
top -H # 查出性能占用最大的pid
  1. mysql参数优化
# 独立表空间
Using filesort

# 设置缓存空间(连表之类的操作使用的缓存空间)
set sort_buffer_size = 256*1024*1024
  1. sql优化
  1. 反范式设计优化
  1. 索引优化

执行计划

explain sql

varchar(50)的索引计算

  1. 字符类型 varchar +2 char+0
  2. 字符集 utf8(3) 一个字符的长度
  3. 本身长度 50
  4. 是否null null(+ 1) not null(+ 0)
50 * 3
varchar(50) * 一个字符3个字节 + 0(not null) + 2(varchar类型)

可以通过索引长度计算出使用了几个索引

Explain字段详解

mysql> explain select * from servers;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | servers | ALL  | NULL          | NULL | NULL    | NULL |    1 | NULL  |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
row in set (0.03 sec)

1. id

2. select_type

3. table

4. type

  1. ALL遍历全表找到匹配的行
  2. index遍历全部索引树找到匹配的行
  3. range只检索给定范围的行,使用一个索引来选择行
  4. ref表的连接匹配条件,即那些列或常量被用于查找索引上的值
  5. eq_ref类似ref区别在于是使用的所有是唯一索引,即多表中使用primary key或者unique key作为关联条件
  6. constsystem,当MySQL对查询某部分进行优化,并转换成一个常量时,使用这些类型访问。例如主键置于where中,MySQL就能把改查询转换成一个常量,systemconst的特例,当查询的表只有一行情况下是system
  7. NULL执行时不用访问表或索引,例如从索引列选取最小值,可以直接通过索引查找完成。

5. possible_keys

6.key

7. key_len

8. ref

9. rows

10. Extra

  1. Using where,不用读取表中的所有信息,通过索引就能获取所需数据
上一篇下一篇

猜你喜欢

热点阅读