一次接口压力测试qps极低原因分析及解决过程
一次接口压力测试qps极低原因分析及解决过程
9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间都花在对 用户 表 做update更新 (时间达100ms以上)。
涉及sql语句:
update User set loginName='q'
where userId='ec171d27-f4a8-478c-b557-dffec8f00826'
分析问题思路:
1) userId字段没有加索引 验证: 连接数据库之后查看表结构,确实没有做索引。 方案: 给userId加上索引 结果: 未达预期,花费时间基本没变化 分析: 观察表的记录数,才200多条,确实索引不索引对性能影响不会太大,但这个索引还是得加上,只不过没有索引并不是产生这个问题的原因。
2) 数据表的引擎问题 验证: 连接数据库之后查看表结构,引擎为innodb。 方案: 换成myisam 结果: 达到预期,花费时间不到1ms, 再进行压测,qps达1500以上 分析: 猜测是由于innodb配置导致,查看了my.cnf的配置,一切都用默认的配置,其中 innodbflushlogattrx_commit 默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。
3) 换回innodb,优化配置 验证: 连接数据库之后查看表结构,引擎为myisam。 方案: 换成innodb, 把innodbflushlogattrx_commit设置为2 结果: 达到预期,花费时间不到1ms, 再进行压测,qps达1500以上 分析: 结果验证了之前的设想。
总结, innodb本身在设计上比myisam要先进些,但配置相对复杂,有很多优化的点,希望各位同学能多看些文章,理解innodb和myisam的区别以及innodb的优化方案。
原文地址:http://guangla.lofter.com/post/1d337f35_82fe535
一次接口压力测试qps极低原因分析及解决过程的更多相关文章
- 使用Loadrunner进行http接口压力测试
业务描述: 在业务系统里进行查询操作,查询的结果是通过请求http接口,从系统中处理并将结果以json字符串返回. 本文就讲述使用Loadrunner对此类接口进行压力测试并记录相关的性能指标数据: ...
- Python开发【笔记】:接口压力测试
接口压力测试脚本 1.单进程多线程模式 # #!/usr/bin/env python # # -*- coding:utf-8 -*- import time import logging impo ...
- 学习总结——JMeter做http接口压力测试
JMeter做http接口压力测试 测前准备 用JMeter做接口的压测非常方便,在压测之前我们需要考虑这几个方面: 场景设定 场景分单场景和混合场景.针对一个接口做压力测试就是单场景,针对一个流程做 ...
- JMeter接口压力测试课程入门到高级实战
章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...
- JMeter做http接口压力测试
测前准备 用JMeter做接口的压测非常方便,在压测之前我们需要考虑这几个方面: 场景设定 场景分单场景和混合场景.针对一个接口做压力测试就是单场景,针对一个流程做压力测试的时候就是混合场景,需要多个 ...
- Postman接口&压力测试
Postman接口与压力测试实例 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.它提供功能强大的 Web API & HTTP 请求调试. 1.环境变量和全局 ...
- JMeter进入接口压力测试
关键字: Jmeter.单接口.压力测试.插件监听.服务器端 摘要: 使用Jmeter对单个接口进行压力测试:监听并发量对接口响应时间.服务器资源占量.Jmeter本身只能获取到Tomcat的状态,所 ...
- jmeter APP接口压力测试
第一步:获取开发文档,了解接口地址和参数名 第二步:jmeter中添加需要测试的接口 a.设计APP的接口框架: b.http请求默认值设置如下: c.接口中应需要用到sign字段,加密字符串与时间戳 ...
- Jmeter对Websocket进行接口压力测试
压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求 ...
随机推荐
- PHP学习(字符串操作)
在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ".单引号和双引号到底有啥区别呢? PHP允许我们在双引号串中直接包含字串变量.而单引号串中的内容总被认 ...
- node 写的简单爬虫(三)
异步爬取数据 先引入 var async = require('async'); 然后同样上代码 var topicUrls = [];//存所有地址 http.get(url,function(re ...
- Leetcode806.Number of Lines To Write String写字符串需要的行数
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行.我们给定了一个数组 width ...
- datepicker插件的使用
教程链接:http://www.runoob.com/jqueryui/example-datepicker.html 参数:http://hare6.blog.163.com/blog/static ...
- 2019.9.10附加题while练习
题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之 ...
- Kubernetes排错:用容器的元数据提供新思路
在这篇文章中,让我们讨论一下Kubernetes中的元数据(Metadata),以及如何利用它来监控系统的性能. 元数据(Metadata) 是一个较为高大上的词.它的含义是"用来描述其他数 ...
- idea java内存分析工具
https://blog.csdn.net/qq_22194659/article/details/83829891 https://www.ej-technologies.com/products/ ...
- iOS 设计
APP引导页设计经验分享 http://www.cocoachina.com/design/20150615/12126.html 获取app安装的进度,6种不同的加载指示 http://www.co ...
- LeetCode Weekly Contest 6
leetcode现在每周末举办比赛,这是今天上午参加的比赛的题解.题目难度不算大,两个easy,一个medium,一个hard.hard题之前接触过,所以做得比较顺利. 1. Sum of Left ...
- PHP 7.0新增特性详解
https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...