MySQL的查询过程:
数据库层面问题解决思路
一般应急调优的思路:针对突然的业务办理卡顿,无法进行正常的业务处理,需要立马解决的场景。
1)show processlist;
2)explain select id ,name from stu where name='clsn'; # ALL id name age sex;
select id,name from stu where id=2-1 函数 结果集>30;show index from table;
3)通过执行计划判断,索引问题(有没有、合不合理)或者语句本身问题;
4)show status like '%lock%'; # 查询锁状态
kill SESSION_ID; # 杀掉有问题的session。
常规调优思路:针对业务周期性的卡顿,例如在每天某时间段业务特别慢,但还能够使用,过了这段时间就好了。
1)查看slowlog,分析slowlog,分析出查询慢的语句;
(slowlog记录执行成功的慢查询语句,执行失败的不会记入慢查询slowlog日志里。
打开sql 执行记录功能,执行成功的和失败的都会记录。
执行以下操作:
set global log_output='TABLE'; -- 输出到表
set global log=ON; 失败的、成功的都会记录)
2)按照一定优先级,一个一个排查所有慢语句;
3)分析top SQL,进行explain调试,查看语句执行时间;
4)调整索引或语句本身。