Jmeter数据库性能测试

我与影子孤独终老i 提交于 2019-11-29 16:42:47

1.网络请求时间

2.数据库查询的时间

数据库性能指标

TPS:每秒事务数(一秒钟服务器处理的事务数,事务指,请求出去到响应回来的整个过程的时间)

QPS:每秒查询量(就是数据库每秒执行的SQL数量,包含insert/select/update/delete)

连接数(连接数是否释放)

查询缓存(不进行select,直接从缓存拿数据,缓存机制可以设置)

 

事务数的计算:Com_commit 提交次数(成功的事务)  Com_rollback回滚次数(失败的事务)相加

QPS的计算 Questions / Uptime 即可得到的该指标的值

QPS查询:mysql>show global status like 'Questions';

mysql>show global status like 'Uptime'

 

数据库容易出现的问题:

1.连接池容易爆掉

2.慢查询

 

Jmeter需要一个插件才能连接数据库,一个mysql-connector-java-5.1.7-bin.jar包,放在apache-jmeter-4.0>lib>ext下即可

连接数据库第一步:

1.“添加”-》“配置元件”-》“JDBC Connection Configuration”

 

QPSQueries Per Second,每秒查询数)

TPSTransactions Per Second,每秒处理事务数)

通过show status命令查看数据库运行状态,会有300多条状态信息记录,其中有几个值帮可以我们计算出QPSTPS,如下:

 

Uptime:服务器已经运行的时间,单位秒

Questions:已经发送给数据库查询数

Com_select:查询次数,实际操作数据库的

Com_insert:插入次数

Com_delete:删除次数

Com_update:更新次数

Com_commit:事务次数

Com_rollback:回滚次数

计算方法:

1、基于Questions计算出QPS

mysql> show global status like 'Questions';

mysql> show global status like 'Uptime';

QPS = Questions / Uptime

2、基于Com_commitCom_rollback计算出TPS

mysql> show global status like 'Com_commit';

mysql> show global status like 'Com_rollback';

mysql> show global status like 'Uptime';

 

TPS = (Com_commit + Com_rollback) / Uptime

3、另一种QPS计算方式:

基于Com_selectCom_insertCom_deleteCom_update计算出QPS  

mysql> show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

等待1秒再执行,获取间隔差值,第二次每个变量值减去第一次对应的变量值,就是QPS

4、另一种TPS计算方式:

mysql> show global status where Variable_name in('com_insert','com_delete','com_update');

计算TPS,就不算查询操作了,计算出插入、删除、更新四个值即可。

 

 

配置JDBC Request:

1、重要参数说明:

  Variable Name:数据库连接池的名字,需要与JDBC Connection ConfigurationVariable Name Bound Pool名字保持一致

  Query:填写的sql语句未尾不要加“;”

  Parameter valus:参数值

  Parameter types:参数类型,可参考:Javadoc for java.sql.Types

  Variable names:保存sql语句返回结果的变量名

  Result variable name:创建一个对象变量,保存所有返回的结果

  Query timeout:查询超时时间

Handle result set:定义如何处理由callable statements语句返回的结果

 

配置JDBC Connection Configuration

(1) Variable Name Bound to Pool

Variable Name, 创建池的变量名 。这个变量在后面介绍的 JDBC Request 请求中用到。 

(2) Connection Pool Configuration

Max Number of Connections    池中允许的最大连接数。在大多数情况下,将其设置为零(0),这意味着每个线程都将拥有自己的池,其中只有一个连接,即线程之间不共享连接。如果您真的想使用共享池,那么将 max count 设置为与线程数量相同,以确保线程不会彼此等待。

Max Wait (ms)   在连接池中取回连接最大等待时间
中文:如果在试图检索连接过程中(取回连接)超过所设置期限,连接池抛出一个错误

Time Between Eviction Runs (ms)     疏散时间
中文:在空闲对象驱逐线程运行期间,可以休眠的毫秒数。当非正值时,将运行无空闲对象驱逐器线程。(默认为“60000”,1分钟)(如果当前连接池中某个连接在空闲了time Between Eviction Runs Millis时间后任然没有使用,则被物理性的关闭掉。)


Auto Commit    自动提交sql语句
中文:打开或关闭连接的自动提交。
原文:Turn auto commit on or off for the connections.

 

(3) Connection Validation by Pool 

 

这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效

 

Test While Idle   当空闲的时候测试连接是否断开
中文:测试连接池的空闲连接,验证查询将会被使用去测试。
原文:Test idle connections of the pool, see BasicDataSource.html#getTestWhileIdle . Validation Query will be used to test it.

Soft Min Evictable Idle Time(ms)   
中文:最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)
Validation Query :验证查询 。一个简单的查询,用来确定数据库是否仍在响应。 这个验证查询在池创建中使用,即使“空闲测试”建议查询只在空闲连接上使用,也可以验证它。

验证查询的列表可以配置 jdbc.config.check。查询属性,默认情况下:

hsqldb:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

Oracle:select 1 from dual

DB2:select 1 from sysibm.sysdummy1

MySQL:select 1

Microsoft SQL Server (MS JDBC driver):select 1

PostgreSQL:select 1

Ingres:select 1

Derby:values 1

H2:select 1

Firebird:select 1 from rdb$database

 

 (4) Database Connection Configuration

 

Database URL: jdbc:mysql://服务器地址:3306/数据库名  

 

  (比如:jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)

    备注:“&allowMultiQueries=true” 这句话的意思呢  是为了在JDBC中执行多条select语句的时候用的!

JDBC Driver class:数据库JDBC驱动类名:com.mysql.jdbc.Driver

Username:数据库连接用户名

password:数据库连接密码

例如(上面url或class如有问题,可试一试下面的):

Database URL:  jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8

JDBC Driver class:  com.mysql.cj.jdbc.Driver

Username:root

password:xxx

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!