jmeter集合点、分布式执行、查询数据库、oracle中sid和service_name的区别

集合点

  • 同步定时器
    • Timeout in milliseconds: 如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。也就是说,如果线程数不足集合点中设置的数,就会一直等待,需要手动stop
    • 如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。也就是说如果线程数不满足集合点中设置的值,则在timeout中设置的时间后继续执行不足的那些线程。
    • Timeout in milliseconds默认为0。所以当timeout设置为0,但是线程数又不满足集合点中设置的值时,就会一直等待,不执行请求,需要手动stop
    • 同步定时器是在每一个采集器之前执行的,不管定时器的位置是在采集器之前还是之后,都是在采集器之前执行
    • 如果一个线程中存在多个采集器,同步定时器和这些采集器在同一级(同一节点下),则同时作用于这些采集器
    • 如果需要一个定时器单独对应某一个采集器,可以在采集器的子节点中创建定时器

分布式

  • 分布式设置
    1. 客户端机器作为一个控制器controller,控制多台slave机器的操作
    2. controller通过GUI界面启动slave机器,将jmeter压测发送给每台启动的slave,slave获得脚本后开始执行,slave执行不需要预先存储脚本
    3. 各台slave执行完成后,将结果传回给controller,controller收集整合显示
  • 主控机器配置
    • 安装好jdk和jmeter,在主控机器上配置好远程机器的ip和port,在jmeter的bin目录下找到jmeter.properties
    • remote_hosts=ip:port,localhost:port
    • 如果开启ssl传输需要生成密钥,否则关闭ssl传输server.rmi.ssl.disable=true
  • 远程机器配置
    • 安装jdk/jmeter,最好与主控机器版本一致
    • 配置环境变量JMETER_HOME
    • 配置端口号(jmeter.properties文件)server_port=1099 server.rmi.localport=1099
    • 如果没有配置ssl传输密钥,那么关闭ssl传输server.rmi.ssl.disable=true(jmeter.properties文件)

数据库性能测试

  • 在jmeter/lib下方对应数据库的驱动jar包

    • MySQL:mysql-connector-java.jar
    • Oracle:ojdbc.jar
  • 在jmeter配置JDBC Connection Configuration原件

    • database driver class database url
      mysql com.mysql.jdbc.Driver jdbc:mysql://host:3306/数据库名
      oracle oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:user/pass@//host:1521/service
  • ​ 配置JDBC requests

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

    • 数据库 validation query
      oracle select 1 from dual
      db2 select 1 from sysibm.sysdymmy1
      mysql select 1
      microsoft sql select 1
      hsqldb select 1 from information_schema.system_users
      postgresql select version();
      ingres select 1
      derby select 1
      h2 select 1
    • variable name 这里写入数据库连接池的名字(和JDBC Connection Configuration名字保持一致)
      query 里面填入查询数据库数据的sql语句(填写的sql语句末尾不要加“;”)
      parameter valus 数据的参数值
      parameter types 数据的参数类型
      cariable names 保存sql语句返回结果的变量名
      result cariable name 创建一个对象变量,保存所有返回结果
      query timeout 查询超时时间
      handle result set 定义如何处理由callable statements语句返回的结果
  • oracle连接格式

    • 格式一:
      • Oracle JDBC Thin using a ServiceName:
      • jdbc:oracle:thin:@//:/<service_name>
      • Example: jdbc:oracle:thin:@//192.168.xxx.xxx:1521/XE
      • 注意这里的格式,@后面有//, 这是与使用SID的主要区别。
      • 这种格式是Oracle 推荐的格式,因为对于集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 确可以包含所有节点。
    • 格式二:
      • Oracle JDBC Thin using an SID:
      • jdbc:oracle:thin:@::
      • Example: jdbc:oracle:thin:@192.168.xxx.xxx:1521:X01A
      • Note:
      • Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.
    • 格式三:
      • Oracle JDBC Thin using a TNSName:
      • jdbc:oracle:thin:@
      • Example: jdbc:oracle:thin:@GL
      • Note:
      • Support for TNSNames was added in the driver release 10.2.0.1
    • linux下查询sid的方法:
      • 在配置oracle环境变量的情况可以使用 echo $ORACLE_SID,如果没有可以使用ps -ef |grep oracle 来查询:
      • oracle 2548 1 0 Aug17 ? 00:00:00 ora_pmon_xxxx
      • 后面的xxxx就是对应的sid。
    • 在windows环境下:
      • oracle是以后台服务的方式被管理的,所以看"控制面板->管理工具->服务 里面的名称:"OracleServiceORCL",则ORCL就是sid;
  • service_name 和sid的区别:

    • Service_name:该参数是由oracle8i引进的。在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样
    • sid是数据库实例的名字,每个实例各不相同。

posted on 2020-07-25 00:54  tjuyz  阅读(241)  评论(0)    收藏  举报