性能测试优化必会技能-定位MySQL慢查询


引言

性能测试最重要的环节是性能优化。当响应时间比较长,或者tps上不去时可能因为有sql慢查询。

开户慢查询日志

mysql> set global slow_query_log = on;
Query OK, 0 rows affected (0.01 sec)

设置慢查询时间限制(查询时间只要大于这个值都将记录到慢查询日志中,单位:秒)

mysql> show global variables like "slow_query_log_file";

确定慢查询日志路径

tail -n5 E:\soft\mysql-5.7.23-winx64\data\liangf-slow.log

、

确定慢查询日志文件名

tail -n5 E:\soft\mysql-5.7.23-winx64\data\liangf-slow.log

查看日志命令

tail -n5 E:\soft\mysql-5.7.23-winx64\data\liangf-slow.log

通过 show processlist定位慢查询

有时慢查询正在执行,已经导致数据库负载偏高了,而由于慢查询还没执行完,因此慢查询日志还看不到任何语句。此时可以使用 show processlist 命令判断正在执行的慢查询。show processlist 显示哪些线程正在运行。如果有 PROCESS 权限,则可以看到所有线程。否则,只能看到当前会话的线程。

知识扩展:如果不使用 FULL 关键字,在 info 字段中只显示每个语句的前 100 个字符,如果想看语句的全部内容可以使用 full 修饰(show full processlist)。

这里对上面结果重点参数解释一下:

Time:表示执行时间

Info:表示 SQL 语句

我们这里可以通过它的执行时间(Time)来判断是否是慢 SQL。

EXLPAIN分析慢查询

分析 SQL 执行效率是优化 SQL 的重要手段,通过上面讲的两种方法,定位到慢查询语句后,我们就要开始分析 SQL 执行效率了,我们可以通过 explain、show profile 和 trace 等诊断工具来分析慢查询。

Explain 可以获取 MySQL 中 SQL 语句的执行计划,比如语句是否使用了关联查询、是否使用了索引、扫描行数等。可以帮我们选择更好地索引和写出更优的 SQL 。使用方法:在查询语句前面加上 explain 运行就可以了。

创建一个测试表并且插入部分数据用于测试:

#create table
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
`d` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`),
KEY `idx_b_c` (`b`,`c`)
) ENGINE=InnoDB CHARSET=utf8mb4;

# insert data proc
DELIMITER //
CREATE PROCEDURE insert_test_data()
BEGIN
 DECLARE i INT;
 SET i=1;
 WHILE(i<=160000) DO
 INSERT INTO test_table (a,b,c,d) VALUES (i,i,i,i);
 SET i=i+1;
END WHILE;
END //
# exec proc
CALL insert_test_data();

我们创建了3个索引 : PRIMARY KEY (id), 聚集索引 KEY idx_a (a),非聚集索引 KEY idx_b_c (b,c)非聚集索引 d列没有创建索引

结语

很多时候没有数据库权限,也没有关系,可以找运维或开发来帮忙看一下。

我是一枚职场中的测试小姐姐!刚学习完测试教程,我再把它分享出来。如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以关注微信公众号:【伤心的辣条】,获取软件测试工程师大厂面试资料!我的学习交流群:902061117 群里有技术大牛一起交流分享~

如果文章对你有帮助,麻烦伸出发财小手点个赞,感谢您的支持,你的点赞是我持续更新的动力。

推荐阅读:

什么样的人适合从事软件测试工作?

谈谈从小公司进入大厂,我都做对了哪些事?

想转行做软件测试?快来看看你适不适合

软件测试从自学到工作,软件测试学习到底要怎样进行?

软件测试工程师简历项目经验怎么写?–1000个已成功入职的软件测试工程师简历范文模板(真实简历)

猜你喜欢

转载自blog.csdn.net/weixin_50271247/article/details/115248439