1.性能测试一般有:
负载测试:通过逐步加压的方法,达到既定的性能阀值的目标,闽值的设定应是小于等于某个值,如cpu使用率小于等于80%
压力测试:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单粗暴的解释就是什么条件能把系统压崩溃。
并发测试:在同一时间内,多个虚拟用户同时访问同一模块、同一功能,通常的测试方法是设置集合点。
容量测试:通常是指数据库层面的,目标是获取数据库的最佳容量的能力。又称之为容量预估。具体测试方法为在一定的并发用户,不同的基础数据量下,
观察数据库的处理能力,即获取数据库的各项性能指标。
可靠性测试:又称之为稳定性测试或疲劳测试。是指系统在高压情况下,长时间的运行系统是否稳定。如cpu使用率在80%以上,7*24小时运行,系统是否稳定。(常见内存溢出)
异常测试:又称之为失败测试。是指系统架构方面的测试。如在负载均衡架构中,要测试宕机、节点挂掉等情况系统的反映
2.性能测试步骤一般是:
需求分析--->性能指标制定--->脚本开发--->场景设置--->监控部署--->测试执行--->性能分析--->性能调优--->测试报告
3.性能测试指标定义:
事务:从客户端发起的一个或多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应(银行转账)
事务响应时间:事务可能是由一个或多个请求组成的,事务响应时间主要是针对于用户的角度而言,如转账。
TPS:每秒钟系统能够处理的事务数
请求响应时间:从客户端发起的一个请求开始,到客户端接收到从服务器返回的响应。整个过程所耗费的时间。
并发:没有严格意义上的并发。并发总有先后,无论差距是1毫秒或者是1微秒,总有一个时间差。所以并发讲的是一个时间范围内,比如1秒内。
并发用户数:同一单位时间内对系统发起请求的用户数量
吞吐量:一次性能测试过程中网络上传输的数据量的总和
吞吐率:单位时间内网络上传输的数据量 吞吐率=吞吐量/传输时间
点击率:每秒钟用户向服务器提交的请求数。这个指标是web应用程序特有的一个指标,可以想象为每秒钟用户总共在页面上进行多少次点击动作,
但是需要注意的是一次鼠标单击的操作后,客户端有可能向服务器发送了多次请求。
资源使用率:对不同的系统资源的使用情况,如cpu、内存、io
Jmeter实现多并发
◆线程组:负载发生器,用多线程或多进程的方式来模拟用户的使用行为。JMeter是以线程的方式来进行模拟用户的并发访问的
Jmeter实现逻辑分之控制
◆逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如:如果控制器,就是当满足什么样的条件后执行哪一步操作。
Jmeter实现配置管理
◆配置元件:用来提供一些配置相关的信息,如Http请求头、cookie管理,提供参数化数据。还可以进行用户自定义变量等配,用以来定义常量等。
实时监控
top:能够实时监控系统的运行状态,并且可以按照cpu及内存等进行排序。语法:top-hv|-bcHiOSs-d secs-n max-ulU user-p pid(s)-o field-w[cols]
vmstat:可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、CP U的信息。语法:vmstat[-a][-n][-S unit][delay[count]]
free:能够监控系统的内存使用状态。其中,total:总计物理内存的大小;Used:已使用多大;Free:可用有多少;shared:多个进程共享的内存总额;buffers/cached:磁盘缓存的大小。
mpstat:mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据。语法:mpstat[-P{IALL)][internal[count]
mpstat参数
◆ -P{IALL}表示监控哪个CPU,cpu在[0,cpu个数-1]中取值internal 相邻的两次采样的间隔时间
◆ count 采样的次数,count只能和delay一起使用
netstat:命令用于显示本机网络链接、运行端口、路由表等信息
netstat参数说明
◆ -n:拒绝显示别名,能显示数字的全部转化成数字。
◆ -1:仅列出有在Listen(监听)的服务状态
·-p:显示建立相关链接的程序名
◆ -t(tcp):显示tcp相关选项
◆ -u(udp):仅显示udp相关选项
◆ -i:显示自动匹配接口的信息.
◆ -c:每隔一个固定时间,执行该netstat命令。
iostat:是对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出cpu的使用情况
iostat用法
iostat[-c|-d][-k|-m][-t][-V][-x][device[..J|ALL]
[-p[device |ALL]][interval[count]]
◆-xdevice 输出指定要统计的磁盘设备名称,默认为所有磁盘设备.
sar简介
◆(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
sar的性能监控范围
◆文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、
内存使用状况、进程活动及IPC有关的活动等
sar语法
◆sar[options][-A][-o file]t[n]
sar语法说明
◆在命令行中,n和t两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,
-ofile表示将命令结果以二进制格式存放在文件中,file在此处不是关键字,是文件名。options为命令行选项。
sar选项
-A:所有报告的总和。
-u:CPU利用率
-V:进程、节点、文件和锁表状态。
-r:显示系统内存的使用情况。
-B:内存分页情况
-b:缓冲区使用情况。
strace简介
◆strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。
strace选项
◆-p:跟踪指定的进程。
◆-f:跟踪由fork子进程系统调用
◆-c统计每一系统调用的所执行的时间,次数和出错的次数等
◆-t:在输出中的每一行前加上时间信息。-tt时间确定到微秒级。
◆-e expr:输出过滤器,通过表达式,可以过滤掉你不想要输
◆-ofilename:默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中。
Linux监控工具:
nmon
◆nmon是一种在Linux操作系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,
并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果。
nmon用法
◆-f这是nmon必选参数,并且必须放在第一个,就是输出文件的意思;用该参数的话,nmon输出的文件名就是默认名称:
hostname_date_time.nmon;
◆-F<filename>这个参数和-f相同,只不过用户可以自己定义文件名称;
◆-s采集数据频率,也就是保存数据的频率;
◆-c采集数据次数;
◆-t输出最消耗资源的进程数据;
-h查看帮助;
nmon_analyzer
◆nmon analyser的作用就是分析nmon数据采集后的结果,nmon analyser需要借助Excel的宏,WPS默认没有安装宏,需要下载插件
nmon_analyzer重点sheet
◆SYS_SUMM系统汇总页,包含cpu占有率变化情况,磁盘IO的变化情况等信息;
◆AAA关于操作系统以及nmon本身的一些信息;
◆CPUnn显示执行时间内CPU占用情况;
◆CPU_ALL 所有CPU概述,显示所有CPU平均占用情况;CPU_SUMM每一个CPU在执行时间内的占用情况;
◆DGBUSY磁盘组每个hdisk设备平均占用情况;
◆DGREAD每个磁盘组的平均读情况;
◆DGSIZE每个磁盘组的平均读写情况;
◆DGWRITE每个磁盘组的平均写情况;
◆DGXFER每个磁盘组的I/O每秒操作;
◆MEM内存相关的主要信息,使用、空闲内存大小等。
◆NET显示系统中每个网络适配器的数据传输速率(干字节/秒
◆PAGE本sheet统计相关页信息的记录
Linux定时任务:
crontab
◆linux系统是由cron这个系统服务来控制的。Linux系统上包含很多的计划性工作。使用者自己也可以设置计划任务,所以Linux系统提供了使用者控制计划任务的命令。
◆/sbin/service crond status 查看定时任务的服务是否启动
◆start/stop/restart 启动服务/停止服务/重新启动服务
◆reload 重新载入配置
crontab的服务权限
◆crontab的权限管理存储在cron.allow文件与cron.deny文件中。如果没有可创建在etc目录下
◆cron.allow文件存储的是允许哪些用户使用crontab
◆cron.deny文件存储的是不允许哪些用户使用crontab
crontab的使用场景说明
◆当两个文件都不存在时,那么只允许root用户使用crontab
◆当cron.allow文件存在,而cron.deny文件不存在时,那么只允许cron.allow文件中的用户使用crontab3
◆当cron.deny文件存在,而cron.allow文件不存在时,那么只要是没有列在cron.deny文件中的用户都可以使用crontab
◆如果两个文件都存在,而一个用户在两个文件中都有,那么以cron.allow文件中的为准,只要cron.allow文件用有该用户,则该用户就可以使用crontab
crontab的使用
◆命令:crontab-e在编辑页面输入命令即可
crontab的编辑格式
◆基本格式:minute hour day month week command
◆对应单位:分时日月周命令
crontab的时间单位说明
◆第1列表示分钟00~59每分钟用*或者*/1表示
◆第2列表示小时00~23(0表示0点)
◆第3列表示日期01~31
◆第4列表示月份01~12
◆第5列标识号星期0~6(0表示星期天)
◆第6列要运行的命令
◆*代表取值范围内的所有值
◆/代表每的意思
crontab的符号说明
-代表从某个数字到某个数字
◆,分隔开几个不同的数字
什么是数据驱动
定义
◆从数据文件中读取测试数据,驱动测试过程的一种测试方法
◆数据驱动可以理解为更高级的参数化
特点
◆测试数据与测试代码分离
◆数据控制过程
好处
◆减少测试代码量
◆降低脚本开发和维护的成本
◆便于用例的修改和维护(不用修改代码)
要求
◆较强的代码能力
◆较强的分层架构设计思维
◆对开发框架要有一定的了解
数据驱动的使用场:
◆复杂的业务流程
◆根据业务场景分流
◆符合条件的并发场景
Jmeter中的数据驱动
控制方式
◆参数化
◆逻辑控制器
数据库:
主要内容
◆数据库性能测试的目的及范围
◆数据库的常用架构
◆数据库主从同步的工作原理
◆数据库分库分表的设计方法
数据库的性能测试范围
◆sql语句-慢查询等
◆资源使用率
◆数据库架构合理性
◆数据库性能指标
主从同步工作原理:
◆master将改变记录到二进制日志(binary log)
中
·slave将master的binary log events拷贝到它的中继日志(relay log)
◆slave重做中继日志中的事件,将改变反映它自己的数据
数据库拆库拆表拆分的原因:
◆单表或库数据量太大
◆硬件不能升级或无法升级
MySQL性能测试:
主要内容
◆MySQL数据库介绍
◆MySQL数据库监控指标
◆MySQL慢查询工作原理及操作
◆SQL的分析与调优方法
◆MySQL索引的概念及作用
◆MySQL索引的工作原理与设计规范
◆MySQL存储引擎
◆MySQL实时监控
◆MySQL集群监控方案
◆MySQL性能测试的用例准备
◆使用Jmeter开发MySQL性能测试脚本
◆执行测试
MySQL数据库重点监控指标
QPS
◆queries per seconds 每秒钟查询数量
◆show global status like‘Question%';
◆Queries/seconds
TPS
◆Tranaction per seconds
◆TPS=(Com_commit+Com_rollback)/seconds
◆show global status like 'Com_commit';
◆show global status like 'Com_rollback';
线程连接数
show global status like 'Max_ used_ connections';
show global status like 'Threads%';
show variables like'max_connections';
Query Cache
查询缓存用于缓存select查询结果
当下次接收到相同查询请求时,不再执行实际查询处理而直接返回结果
适用于大量查询、很少改变表中数据
修改my.cnf
将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M
增加一行:query_cache_type=0/1/2
如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。
如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询
Query Cache命中率
show status like 'Qcache%;
Query _cache_hits =(Qcahce_hits/(Qcache_hits+Qcache_inserts ))*100%;
锁定状态
show global status like %lock%';
Table_locks_waited/Tble_locks_immediate 值越大代表表锁造成的阻塞越严重
Innodb_row_lock_waits innodb 行锁,太大可能是间隙锁造成的
主从延时
查询主从延时时间: show slave status
---------------------------------------------------------------------------------------------------------------------
MySql慢查询:
执行速度超过定义时间的查询
不同的系统定义不同的慢查询指标
慢查询的开启:
编辑/etc/my.cnf,在[mysqlld]域中添加:
开启慢查询:slow_query_log=1
慢查询日志路劲:slow_query_log_file=/data/mysql/slow.log
慢查询的时长:long_query_time=1
未使用索引的查询也被记录到慢查询日志中:log_queries_not_using_indexes=1
慢查询日志分析:
mysqldumpslow 命令
-s 是表示按照何种方式排序
c 访问计数
i 锁定时间
r 返回记录
t 查询时间
al 平均锁定时间
ar 平均返回记录数
at 平均查询时间
-t 是top n 的意思,即为返回前面多少条的数据
-g 后边可以写一个正则匹配模式,大小写不敏感的
慢查询分析例子:
得到返回记录集最多的10的SQL : mysqldumpslow -s r -t 10 slow.log
得到访问次数最多的10的SQL : mysqldumpslow -s c -t 10 slow.log
得到按照时间排序的前10条里面含有做链接的查询语句 : mysqldumpslow -s t -t 10 -g "left join" slow.log
SQL语句的性能分析
explain SELECT * FROM `apporder_yongli`
explain 返回结果分析
第一列 id:
select 识别符,代表语句的执行顺序,一般在select嵌套查询时会不同
id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行
id列为null的就表示这是一个结果集,不需要使用它来进行查询
第二列 select_type
simple 表示不需要union操作或者不包含子查询的简单select查询,有连接查询时,外层的查询为simple,且只有一个
primary 一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type为primary。且只有一个
union 连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union
dependent union 与union一样,出现union或union all 语句中,但是这个查询要受到外部查询的影响
union result 包含union的结果集,在union和union all语句中,因为它不需要参加查询,所以id字段为null
subquery 除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
dependent subquery 与dependent union 类似,表示这个subquery的查询要受到外部表查询的影响
derived from字句中出现子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select
第三列 table
显示的查询表名,如果查询使用了别名,那么这里就显示的别名
如果不涉及对数据表的操作,那么这里显示null
如果显示尖括号括起来的<derived N>就表示这个是临时表
第五列 type
依次好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
system 表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
const 使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫作唯一索引扫描
eq_ref 出现要连接过这个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引
和主键是多列时,只有所有的列都用作比较时才会出现eq_ref
ref 不像eq_ ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列
主键、唯一索引中,使用第一个列之 外的列作为等值查找也会出现,总之,返回数据不唯一-的等值查找就可能出现。
fulltext :全文索引检索,要注意,全文索引|的优先级很高,若全文索弓|和普通索引同时存在时, mysql不管代价,优先选择使用全文索引
ref_ or_ null :与ref方法类似,只是增加了nul值的比较。实际用的不多。
unique_ subquery :用于where中的in形式子查询,子查询返回不重复值唯一值
index_subquery :用于in形式子查询使用到了辅助索引|或者in常数列表,子查询可能返回重复值,可以使用索引|将子查询去重。
range :索引范围扫描,常见于使用>, <,is null,between ,in ,like等运算符的查询中。
index_merge :表示查询使用了两个以上的索引,最后取交集或者index_merge :表示查询使用了两个以上的索引,最后取交集或者ref_or_null
之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range
index :索引全表扫描,把索引从头到尾扫一-遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索弓引|排序或者分组的查询。
all :这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。
第六列 possible_ keys
查询可能使用到的索引弓|都会在这里列出来
第七列 key
查询真正使用到的索引, select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
第八列 key_len
用于处理查询的索引长度,如果是单列索引, 那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个
列的索引,这里就会计算进去,没有使用到的列这里不会计算进去
第九列 ref
如果是使用的常数等值查询,这里会显示const ,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者
函数,或者条件列发生了内部隐式转换,这里可能显示为func
第十列 rows
这里是执行计划中估算的扫描行数,不是精确值
第十二列 Extra
distinct :在select部分使用了distinct关键字
no tables used :不带from字句的查询或者From dual查询
using filesort :排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
using index :查询时不需要回表查询,直接通过索引|就可以获取查询的数据。
using intersect :表示使用and的各个索弓|的条件时,该信息表示:是从处理结果获取交集
using union :表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集
using where :表示存储弓|擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤
MySQL索引
索引类型:主键索引,唯一索引,普通索引,全文索引,组合索引
主键索引:它是一-种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建 主键索引
唯一索引:索弓|列的值必须唯一, 但允许有空值
普通索引:最基本的索引,它没有任何限制
全文索引:fulltext是一种只适用于MyISAM表的一个索引类型。被索引列的数据类型只能是以下三种的组合char、varchar、text
MySQL是通过match()和against()这两个函数来实现它的全文索引查询的功能。
组合索引:也叫多列索引,就是在多列上同时创建索引,使得多列的组合值唯一,创建组合索引的好处是比分别创建多个单列索引的查询速度要快很多。
组合索引创建遵循“最左前缀”规则如三列: id、name、age创建组合索引,则相当于分别创建了id、name、 age , id、name , id
这三个索引
索引创建规范
索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间。在插入与更新数据时,要重写索引文件
1.单张表中索引数量不超过5个(个人经验最合适的)
2.单个索引中的字段数不超过5个
3.不使用更新频繁地列作为主键
4.合理创建组合索引(避免冗余)
5.不在低基数列.上建立索引,例如'性别'
6.不在索弓|列进行数学运算和函数运算,会使索引失效
7.不使用%前导的查询,如like "%xxx" 无法使用索引。
8.不使用反向查询,如notin/notlike,无法使用索引,导致全表扫描
9.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中占用的空间很少,处理起来更快
10.在经常需要排序(order by),分组(group by)和的distinct列上加索引(单独order by用不了索引,索引考虑加where或加limit)
11.在表与表的而连接条件.上加,上索引,可以加快连接查询的速度
12.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索弓|的时候指定前缀长度比如前10个字符(前提是多数值是唯一的)那么短索引可
以提高查询速度并且可以减少磁盘的空间,也可以减少I/0操作.
MySQL存储引擎
MyISAM
优点:
1.读的性能比InnoDB高很多
2.索引与数据分开,使用了压缩,从而提高了内存使用率
缺点:
1.不支持事务
2.写入数据时,直接锁表
InnoDB
优点:
1.支持事务
2.支持外键
3.支持行级锁
缺点:
1.不支持fulltext索引(全文索引)
2.行级所并不绝对,当不确定扫描范围时,锁全表
3.索引与数据是紧密捆绑的,没有使用压缩导致体积庞大
MySQL实时监控(单台)
工具orzdba
MySQL集群监控-天免LEPUS(自己搭建使用***)
为所有数据库管理者、互联网企业数据库监控而设计
无需部署Agent ,轻松监控1000+数据库实例,完善灵活的告警配置,详细的性能分析指标
用例准备
要点:使用sql模拟用户使用场景
Jmeter开发mysql性能测试脚本
步骤:1.JDBC Connection Configuration配置mysq|配置
2.JDBC Request写sq|脚本
性能测试的要素:
1.被测系统及版本
2.测试数据
3.测试场景(包含异常场景)
4.预期结果
5.预期性能指标
性能测试报告:
1.被测系统
2.版本号
3.运行环境/配置
4.测试场景(并发定义)
5.预期性能指标
6.实际结果
7.测试结论
8.测试人员
9.如果不通过说明结论
10.如果通过了说明最大的性能指标
11.容量规划
12.汇报对象是谁,采取相关说明(易懂/专业1)
Jmeret扩展组件开发--扩展开发实现的两种方式
1.◆继承AbstractJavaSamplerClient抽象类
2.◆实现JavaSamplerClient接口
1.性能测试一般有:
负载测试:通过逐步加压的方法,达到既定的性能阀值的目标,闽值的设定应是小于等于某个值,如cpu使用率小于等于80%
压力测试:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单粗暴的解释就是什么条件能把系统压崩溃。
并发测试:在同一时间内,多个虚拟用户同时访问同一模块、同一功能,通常的测试方法是设置集合点。
容量测试:通常是指数据库层面的,目标是获取数据库的最佳容量的能力。又称之为容量预估。具体测试方法为在一定的并发用户,不同的基础数据量下,
观察数据库的处理能力,即获取数据库的各项性能指标。
可靠性测试:又称之为稳定性测试或疲劳测试。是指系统在高压情况下,长时间的运行系统是否稳定。如cpu使用率在80%以上,7*24小时运行,系统是否稳定。(常见内存溢出)
异常测试:又称之为失败测试。是指系统架构方面的测试。如在负载均衡架构中,要测试宕机、节点挂掉等情况系统的反映
2.性能测试步骤一般是:
需求分析--->性能指标制定--->脚本开发--->场景设置--->监控部署--->测试执行--->性能分析--->性能调优--->测试报告
3.性能测试指标定义:
事务:从客户端发起的一个或多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应(银行转账)
事务响应时间:事务可能是由一个或多个请求组成的,事务响应时间主要是针对于用户的角度而言,如转账。
TPS:每秒钟系统能够处理的事务数
请求响应时间:从客户端发起的一个请求开始,到客户端接收到从服务器返回的响应。整个过程所耗费的时间。
并发:没有严格意义上的并发。并发总有先后,无论差距是1毫秒或者是1微秒,总有一个时间差。所以并发讲的是一个时间范围内,比如1秒内。
并发用户数:同一单位时间内对系统发起请求的用户数量
吞吐量:一次性能测试过程中网络上传输的数据量的总和
吞吐率:单位时间内网络上传输的数据量 吞吐率=吞吐量/传输时间
点击率:每秒钟用户向服务器提交的请求数。这个指标是web应用程序特有的一个指标,可以想象为每秒钟用户总共在页面上进行多少次点击动作,
但是需要注意的是一次鼠标单击的操作后,客户端有可能向服务器发送了多次请求。
资源使用率:对不同的系统资源的使用情况,如cpu、内存、io
Jmeter实现多并发
◆线程组:负载发生器,用多线程或多进程的方式来模拟用户的使用行为。JMeter是以线程的方式来进行模拟用户的并发访问的
Jmeter实现逻辑分之控制
◆逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如:如果控制器,就是当满足什么样的条件后执行哪一步操作。
Jmeter实现配置管理
◆配置元件:用来提供一些配置相关的信息,如Http请求头、cookie管理,提供参数化数据。还可以进行用户自定义变量等配,用以来定义常量等。
实时监控
top:能够实时监控系统的运行状态,并且可以按照cpu及内存等进行排序。语法:top-hv|-bcHiOSs-d secs-n max-ulU user-p pid(s)-o field-w[cols]
vmstat:可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、CP U的信息。语法:vmstat[-a][-n][-S unit][delay[count]]
free:能够监控系统的内存使用状态。其中,total:总计物理内存的大小;Used:已使用多大;Free:可用有多少;shared:多个进程共享的内存总额;buffers/cached:磁盘缓存的大小。
mpstat:mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据。语法:mpstat[-P{IALL)][internal[count]
mpstat参数
◆ -P{IALL}表示监控哪个CPU,cpu在[0,cpu个数-1]中取值internal 相邻的两次采样的间隔时间
◆ count 采样的次数,count只能和delay一起使用
netstat:命令用于显示本机网络链接、运行端口、路由表等信息
netstat参数说明
◆ -n:拒绝显示别名,能显示数字的全部转化成数字。
◆ -1:仅列出有在Listen(监听)的服务状态
·-p:显示建立相关链接的程序名
◆ -t(tcp):显示tcp相关选项
◆ -u(udp):仅显示udp相关选项
◆ -i:显示自动匹配接口的信息.
◆ -c:每隔一个固定时间,执行该netstat命令。
iostat:是对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出cpu的使用情况
iostat用法
iostat[-c|-d][-k|-m][-t][-V][-x][device[..J|ALL]
[-p[device |ALL]][interval[count]]
◆-xdevice 输出指定要统计的磁盘设备名称,默认为所有磁盘设备.
sar简介
◆(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
sar的性能监控范围
◆文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、
内存使用状况、进程活动及IPC有关的活动等
sar语法
◆sar[options][-A][-o file]t[n]
sar语法说明
◆在命令行中,n和t两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,
-ofile表示将命令结果以二进制格式存放在文件中,file在此处不是关键字,是文件名。options为命令行选项。
sar选项
-A:所有报告的总和。
-u:CPU利用率
-V:进程、节点、文件和锁表状态。
-r:显示系统内存的使用情况。
-B:内存分页情况
-b:缓冲区使用情况。
strace简介
◆strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。
strace选项
◆-p:跟踪指定的进程。
◆-f:跟踪由fork子进程系统调用
◆-c统计每一系统调用的所执行的时间,次数和出错的次数等
◆-t:在输出中的每一行前加上时间信息。-tt时间确定到微秒级。
◆-e expr:输出过滤器,通过表达式,可以过滤掉你不想要输
◆-ofilename:默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中。
Linux监控工具:
nmon
◆nmon是一种在Linux操作系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,
并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果。
nmon用法
◆-f这是nmon必选参数,并且必须放在第一个,就是输出文件的意思;用该参数的话,nmon输出的文件名就是默认名称:
hostname_date_time.nmon;
◆-F<filename>这个参数和-f相同,只不过用户可以自己定义文件名称;
◆-s采集数据频率,也就是保存数据的频率;
◆-c采集数据次数;
◆-t输出最消耗资源的进程数据;
-h查看帮助;
nmon_analyzer
◆nmon analyser的作用就是分析nmon数据采集后的结果,nmon analyser需要借助Excel的宏,WPS默认没有安装宏,需要下载插件
nmon_analyzer重点sheet
◆SYS_SUMM系统汇总页,包含cpu占有率变化情况,磁盘IO的变化情况等信息;
◆AAA关于操作系统以及nmon本身的一些信息;
◆CPUnn显示执行时间内CPU占用情况;
◆CPU_ALL 所有CPU概述,显示所有CPU平均占用情况;CPU_SUMM每一个CPU在执行时间内的占用情况;
◆DGBUSY磁盘组每个hdisk设备平均占用情况;
◆DGREAD每个磁盘组的平均读情况;
◆DGSIZE每个磁盘组的平均读写情况;
◆DGWRITE每个磁盘组的平均写情况;
◆DGXFER每个磁盘组的I/O每秒操作;
◆MEM内存相关的主要信息,使用、空闲内存大小等。
◆NET显示系统中每个网络适配器的数据传输速率(干字节/秒
◆PAGE本sheet统计相关页信息的记录
Linux定时任务:
crontab
◆linux系统是由cron这个系统服务来控制的。Linux系统上包含很多的计划性工作。使用者自己也可以设置计划任务,所以Linux系统提供了使用者控制计划任务的命令。
◆/sbin/service crond status 查看定时任务的服务是否启动
◆start/stop/restart 启动服务/停止服务/重新启动服务
◆reload 重新载入配置
crontab的服务权限
◆crontab的权限管理存储在cron.allow文件与cron.deny文件中。如果没有可创建在etc目录下
◆cron.allow文件存储的是允许哪些用户使用crontab
◆cron.deny文件存储的是不允许哪些用户使用crontab
crontab的使用场景说明
◆当两个文件都不存在时,那么只允许root用户使用crontab
◆当cron.allow文件存在,而cron.deny文件不存在时,那么只允许cron.allow文件中的用户使用crontab3
◆当cron.deny文件存在,而cron.allow文件不存在时,那么只要是没有列在cron.deny文件中的用户都可以使用crontab
◆如果两个文件都存在,而一个用户在两个文件中都有,那么以cron.allow文件中的为准,只要cron.allow文件用有该用户,则该用户就可以使用crontab
crontab的使用
◆命令:crontab-e在编辑页面输入命令即可
crontab的编辑格式
◆基本格式:minute hour day month week command
◆对应单位:分时日月周命令
crontab的时间单位说明
◆第1列表示分钟00~59每分钟用*或者*/1表示
◆第2列表示小时00~23(0表示0点)
◆第3列表示日期01~31
◆第4列表示月份01~12
◆第5列标识号星期0~6(0表示星期天)
◆第6列要运行的命令
◆*代表取值范围内的所有值
◆/代表每的意思
crontab的符号说明
-代表从某个数字到某个数字
◆,分隔开几个不同的数字
什么是数据驱动
定义
◆从数据文件中读取测试数据,驱动测试过程的一种测试方法
◆数据驱动可以理解为更高级的参数化
特点
◆测试数据与测试代码分离
◆数据控制过程
好处
◆减少测试代码量
◆降低脚本开发和维护的成本
◆便于用例的修改和维护(不用修改代码)
要求
◆较强的代码能力
◆较强的分层架构设计思维
◆对开发框架要有一定的了解
数据驱动的使用场:
◆复杂的业务流程
◆根据业务场景分流
◆符合条件的并发场景
Jmeter中的数据驱动
控制方式
◆参数化
◆逻辑控制器
数据库:
主要内容
◆数据库性能测试的目的及范围
◆数据库的常用架构
◆数据库主从同步的工作原理
◆数据库分库分表的设计方法
数据库的性能测试范围
◆sql语句-慢查询等
◆资源使用率
◆数据库架构合理性
◆数据库性能指标
主从同步工作原理:
◆master将改变记录到二进制日志(binary log)
中
·slave将master的binary log events拷贝到它的中继日志(relay log)
◆slave重做中继日志中的事件,将改变反映它自己的数据
数据库拆库拆表拆分的原因:
◆单表或库数据量太大
◆硬件不能升级或无法升级
MySQL性能测试:
主要内容
◆MySQL数据库介绍
◆MySQL数据库监控指标
◆MySQL慢查询工作原理及操作
◆SQL的分析与调优方法
◆MySQL索引的概念及作用
◆MySQL索引的工作原理与设计规范
◆MySQL存储引擎
◆MySQL实时监控
◆MySQL集群监控方案
◆MySQL性能测试的用例准备
◆使用Jmeter开发MySQL性能测试脚本
◆执行测试
MySQL数据库重点监控指标
QPS
◆queries per seconds 每秒钟查询数量
◆show global status like‘Question%';
◆Queries/seconds
TPS
◆Tranaction per seconds
◆TPS=(Com_commit+Com_rollback)/seconds
◆show global status like 'Com_commit';
◆show global status like 'Com_rollback';
线程连接数
show global status like 'Max_ used_ connections';
show global status like 'Threads%';
show variables like'max_connections';
Query Cache
查询缓存用于缓存select查询结果
当下次接收到相同查询请求时,不再执行实际查询处理而直接返回结果
适用于大量查询、很少改变表中数据
修改my.cnf
将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M
增加一行:query_cache_type=0/1/2
如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。
如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询
Query Cache命中率
show status like 'Qcache%;
Query _cache_hits =(Qcahce_hits/(Qcache_hits+Qcache_inserts ))*100%;
锁定状态
show global status like %lock%';
Table_locks_waited/Tble_locks_immediate 值越大代表表锁造成的阻塞越严重
Innodb_row_lock_waits innodb 行锁,太大可能是间隙锁造成的
主从延时
查询主从延时时间: show slave status
---------------------------------------------------------------------------------------------------------------------
MySql慢查询:
执行速度超过定义时间的查询
不同的系统定义不同的慢查询指标
慢查询的开启:
编辑/etc/my.cnf,在[mysqlld]域中添加:
开启慢查询:slow_query_log=1
慢查询日志路劲:slow_query_log_file=/data/mysql/slow.log
慢查询的时长:long_query_time=1
未使用索引的查询也被记录到慢查询日志中:log_queries_not_using_indexes=1
慢查询日志分析:
mysqldumpslow 命令
-s 是表示按照何种方式排序
c 访问计数
i 锁定时间
r 返回记录
t 查询时间
al 平均锁定时间
ar 平均返回记录数
at 平均查询时间
-t 是top n 的意思,即为返回前面多少条的数据
-g 后边可以写一个正则匹配模式,大小写不敏感的
慢查询分析例子:
得到返回记录集最多的10的SQL : mysqldumpslow -s r -t 10 slow.log
得到访问次数最多的10的SQL : mysqldumpslow -s c -t 10 slow.log
得到按照时间排序的前10条里面含有做链接的查询语句 : mysqldumpslow -s t -t 10 -g "left join" slow.log
SQL语句的性能分析
explain SELECT * FROM `apporder_yongli`
explain 返回结果分析
第一列 id:
select 识别符,代表语句的执行顺序,一般在select嵌套查询时会不同
id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行
id列为null的就表示这是一个结果集,不需要使用它来进行查询
第二列 select_type
simple 表示不需要union操作或者不包含子查询的简单select查询,有连接查询时,外层的查询为simple,且只有一个
primary 一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type为primary。且只有一个
union 连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union
dependent union 与union一样,出现union或union all 语句中,但是这个查询要受到外部查询的影响
union result 包含union的结果集,在union和union all语句中,因为它不需要参加查询,所以id字段为null
subquery 除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
dependent subquery 与dependent union 类似,表示这个subquery的查询要受到外部表查询的影响
derived from字句中出现子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select
第三列 table
显示的查询表名,如果查询使用了别名,那么这里就显示的别名
如果不涉及对数据表的操作,那么这里显示null
如果显示尖括号括起来的<derived N>就表示这个是临时表
第五列 type
依次好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
system 表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
const 使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫作唯一索引扫描
eq_ref 出现要连接过这个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引
和主键是多列时,只有所有的列都用作比较时才会出现eq_ref
ref 不像eq_ ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列
主键、唯一索引中,使用第一个列之 外的列作为等值查找也会出现,总之,返回数据不唯一-的等值查找就可能出现。
fulltext :全文索引检索,要注意,全文索引|的优先级很高,若全文索弓|和普通索引同时存在时, mysql不管代价,优先选择使用全文索引
ref_ or_ null :与ref方法类似,只是增加了nul值的比较。实际用的不多。
unique_ subquery :用于where中的in形式子查询,子查询返回不重复值唯一值
index_subquery :用于in形式子查询使用到了辅助索引|或者in常数列表,子查询可能返回重复值,可以使用索引|将子查询去重。
range :索引范围扫描,常见于使用>, <,is null,between ,in ,like等运算符的查询中。
index_merge :表示查询使用了两个以上的索引,最后取交集或者index_merge :表示查询使用了两个以上的索引,最后取交集或者ref_or_null
之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range
index :索引全表扫描,把索引从头到尾扫一-遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索弓引|排序或者分组的查询。
all :这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。
第六列 possible_ keys
查询可能使用到的索引弓|都会在这里列出来
第七列 key
查询真正使用到的索引, select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
第八列 key_len
用于处理查询的索引长度,如果是单列索引, 那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个
列的索引,这里就会计算进去,没有使用到的列这里不会计算进去
第九列 ref
如果是使用的常数等值查询,这里会显示const ,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者
函数,或者条件列发生了内部隐式转换,这里可能显示为func
第十列 rows
这里是执行计划中估算的扫描行数,不是精确值
第十二列 Extra
distinct :在select部分使用了distinct关键字
no tables used :不带from字句的查询或者From dual查询
using filesort :排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
using index :查询时不需要回表查询,直接通过索引|就可以获取查询的数据。
using intersect :表示使用and的各个索弓|的条件时,该信息表示:是从处理结果获取交集
using union :表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集
using where :表示存储弓|擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤
MySQL索引
索引类型:主键索引,唯一索引,普通索引,全文索引,组合索引
主键索引:它是一-种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建 主键索引
唯一索引:索弓|列的值必须唯一, 但允许有空值
普通索引:最基本的索引,它没有任何限制
全文索引:fulltext是一种只适用于MyISAM表的一个索引类型。被索引列的数据类型只能是以下三种的组合char、varchar、text
MySQL是通过match()和against()这两个函数来实现它的全文索引查询的功能。
组合索引:也叫多列索引,就是在多列上同时创建索引,使得多列的组合值唯一,创建组合索引的好处是比分别创建多个单列索引的查询速度要快很多。
组合索引创建遵循“最左前缀”规则如三列: id、name、age创建组合索引,则相当于分别创建了id、name、 age , id、name , id
这三个索引
索引创建规范
索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间。在插入与更新数据时,要重写索引文件
1.单张表中索引数量不超过5个(个人经验最合适的)
2.单个索引中的字段数不超过5个
3.不使用更新频繁地列作为主键
4.合理创建组合索引(避免冗余)
5.不在低基数列.上建立索引,例如'性别'
6.不在索弓|列进行数学运算和函数运算,会使索引失效
7.不使用%前导的查询,如like "%xxx" 无法使用索引。
8.不使用反向查询,如notin/notlike,无法使用索引,导致全表扫描
9.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中占用的空间很少,处理起来更快
10.在经常需要排序(order by),分组(group by)和的distinct列上加索引(单独order by用不了索引,索引考虑加where或加limit)
11.在表与表的而连接条件.上加,上索引,可以加快连接查询的速度
12.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索弓|的时候指定前缀长度比如前10个字符(前提是多数值是唯一的)那么短索引可
以提高查询速度并且可以减少磁盘的空间,也可以减少I/0操作.
MySQL存储引擎
MyISAM
优点:
1.读的性能比InnoDB高很多
2.索引与数据分开,使用了压缩,从而提高了内存使用率
缺点:
1.不支持事务
2.写入数据时,直接锁表
InnoDB
优点:
1.支持事务
2.支持外键
3.支持行级锁
缺点:
1.不支持fulltext索引(全文索引)
2.行级所并不绝对,当不确定扫描范围时,锁全表
3.索引与数据是紧密捆绑的,没有使用压缩导致体积庞大
MySQL实时监控(单台)
工具orzdba
MySQL集群监控-天免LEPUS(自己搭建使用***)
为所有数据库管理者、互联网企业数据库监控而设计
无需部署Agent ,轻松监控1000+数据库实例,完善灵活的告警配置,详细的性能分析指标
用例准备
要点:使用sql模拟用户使用场景
Jmeter开发mysql性能测试脚本
步骤:1.JDBC Connection Configuration配置mysq|配置
2.JDBC Request写sq|脚本
性能测试的要素:
1.被测系统及版本
2.测试数据
3.测试场景(包含异常场景)
4.预期结果
5.预期性能指标
性能测试报告:
1.被测系统
2.版本号
3.运行环境/配置
4.测试场景(并发定义)
5.预期性能指标
6.实际结果
7.测试结论
8.测试人员
9.如果不通过说明结论
10.如果通过了说明最大的性能指标
11.容量规划
12.汇报对象是谁,采取相关说明(易懂/专业1)
Jmeret扩展组件开发--扩展开发实现的两种方式
1.◆继承AbstractJavaSamplerClient抽象类
2.◆实现JavaSamplerClient接口