[SOL-193] JMeter connection Created: 06.11.2014  Updated: 24.08.2020  Resolved: 24.07.2020

Status: Obsolete
Project: Solution Center
Component/s: 3rd Party Tools, EXASolution, JDBC
Affects Version/s: EXASOL 6.0.0
Fix Version/s: None

Type: How To
Reporter: Captain EXASOL Assignee: Captain EXASOL
Labels: JDBC

Attachments: PNG File 0_Test Plan Window - cut.png     PNG File 0_Test Plan Window.png     PNG File 10_Generate Summary Results.png     PNG File 11_WorkBench.png     PNG File 1_Test Plan Node.png     PNG File 2_JDBC Connection Node.png     PNG File 3_Setup Thread Group Node.png     PNG File 4_JDBC Request Setup Node.png     PNG File 5_Thread Group Node.png     PNG File 6_JDBC Request Run Node.png     PNG File 7_View Results Tree - request.png     PNG File 7_View Results Tree - response data.png     PNG File 7_View Results Tree - sampler result.png     PNG File 7_View Results Tree.png     PNG File 8_Summary Report.png     PNG File 9_Aggregate Report.png     File template.jmx    
Issue Links:
Duplicate
Related
Solution:

Background

This is deprecated and will be replaced by https://github.com/exasol/exameter. We provide this documentation for archival purposes and to be useful to those running older versions. There will not be any modifications, enhancements or updates to the "Affected Version/s" textbox.

Preface

You have an EXASolution database and want to test its concurrency behaviour for a new project, in a proof of concept or any other reason. This article has been written for JMeter 3.2.

Introduction

A very common tool for emulating expected concurrency behavior on IT infrastructure is JMeter (http://jmeter.apache.org). It allows you to define your test plans in a GUI and to run them from the GUI or command line.

In this tutorial, we would like to show you how to configure it in order to use it with an EXASOL database.

In practice, you might face the following challenges:

  1. You want all connections to be established before the real benchmark in order to avoid delays deriving from the login procedure.
  2. You need to define how the parallel queries should be orchestrated, and bundle them in thread groups.
  3. You want to run your test plans from the command line without a GUI.
  4. You want to reuse a query multiple times in different thread groups or test plans, but you want to avoid to copy this query multiple times as it should be easy to change a query globally.
  5. Some of your result sets are really huge, and this results in Java "out of memory" errors.

Prerequisites

How to make  JMeter connection

Step 1. Create a test Plan (take template.jmx as template)


The test plan template above shows a simple setup for concurrency tests. Besides a JDBC configuration element, we see two thread groups, which consist of SQL query definitions and various report listeners.

Step 2. Set up user-defined variables in the test plan

 To define them, properties can be read. For example, the following

Name: Value:
concurrency ${__P(concurrency,10)}

means: If the property "concurrency" exists, set the variable "concurrency" to the value of that property. If the property "concurrency" is not defined, set the variable "concurrency" to the value "10". Please note that properties and values are different things, and the identical names, in this case, are just for convenience.
The idea is to set a property on the command line, e.g.

jmeter -n -t template.jmx -Jconcurrency=8 -Jiterations=4

starts JMeter in non-GUI mode and runs the test plan "template.jmx" with the properties "concurrency" and "iterations" set to its respective values.
Test plans can be developed using the JMeter GUI, but the final test run to measure performance with should only be started via the command line.

Step 3. Determine if you need to create more than one Thread Group

If you create more than one Thread Group, the switch "Run Thread Groups consecutively" becomes important. If checked, they run consecutively - if not checked, thread groups run in parallel. Beware that "setUp Thread Group" elements are always executed before the "Thread Group" elements, regardless of the switch.

Step 4. Define the exajdbc.jar location

Finally, you need to define the location of "exajdbc.jar". You can download the JDBC driver from our website: https://www.exasol.com/portal/display/DOWNLOAD/

Step 5. Configure the JDBC connection pool

The variable name is important, as you need to refer to it in a later step ("exa_benchmark" in this case). The max number of connections is set to the value of the "concurrency" variable. You can leave the defaults for "Max Wait" and "Time Between Eviction Runs". Ideally, you set "Auto Commit" to "True". As EXASOL only supports the option "SERIALIZABLE" for "Transaction Isolation", you can leave this setting to "DEFAULT". A connection validation is normally not necessary.

For the database URL, you configure the connection string with "jdbc:exa:"prefix. If you work with a cluster, use a connection string with an ip range that covers all the active and hot-standby database nodes, e.g.: "10.0.0.1..5:8563" for a cluster consisting of 5 database nodes in total (and respective ip addresses).

Step 6. Add any other JDBC properties

Any further JDBC properties can be added using semicolons. Especially setting the client name and/or client version can make sense to identify queries of a specific test run later on using the auditing tables. In the example above, the "test_id" variable is used, which is generated from the startup time of JMeter in date/time format and the start time of the test in UNIX timestamp format - for example "20170926180920_1506443755443" (JMeter started on September 26, 2017, at 18:09:20).

Note that the test start time is in Unix timestamp format and can be different from the JMeter startup time if you run multiple tests from the GUI without closing JMeter in between. Set the "JDBC driver class" to the value shown above and set user/password to appropriate values (default is sys/exasol).

 

Category 1: 3rd Party Tools
Category 2: Clients, Interfaces & Drivers - JDBC

 Comments   
Comment by Franz Schwab [ 22.06.2020 ]

it is not yet public.

Generated at Mon May 17 02:59:16 CEST 2021 using Jira 7.13.18#713018-sha1:e1230154f8ff8cc9272975bf568fc732e806fd68.