2016-08-26 03:05:47 -04:00
### Steps to execute the benchmark
2016-07-26 05:01:22 -04:00
2018-11-08 09:32:47 -05:00
1. Build `client-benchmark-noop-api-plugin` with `./gradlew :client:client-benchmark-noop-api-plugin:assemble`
2. Install it on the target host with `bin/elasticsearch-plugin install file:///full/path/to/client-benchmark-noop-api-plugin.zip` .
2018-07-31 17:31:13 -04:00
3. Start Elasticsearch on the target host (ideally *not* on the machine
that runs the benchmarks)
4. Run the benchmark with
```
./gradlew -p client/benchmark run --args ' params go here'
```
2016-07-26 05:01:22 -04:00
2018-07-31 17:31:13 -04:00
Everything in the `'` gets sent on the command line to JMH. The leading ` `
inside the `'` s is important. Without it parameters are sometimes sent to
gradle.
See below for some example invocations.
2016-07-26 05:01:22 -04:00
2016-08-26 03:05:47 -04:00
### Example benchmark
2016-07-26 05:01:22 -04:00
2016-08-26 03:05:47 -04:00
In general, you should define a few GC-related settings `-Xms8192M -Xmx8192M -XX:+UseConcMarkSweepGC -verbose:gc -XX:+PrintGCDetails` and keep an eye on GC activity. You can also define `-XX:+PrintCompilation` to see JIT activity.
2016-07-26 05:01:22 -04:00
2016-08-26 03:05:47 -04:00
#### Bulk indexing
2018-07-31 17:31:13 -04:00
Download benchmark data from http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/geonames and decompress them.
2016-08-26 03:05:47 -04:00
2018-07-31 17:31:13 -04:00
Example invocation:
2016-07-26 05:01:22 -04:00
```
2018-07-31 17:31:13 -04:00
wget http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/geonames/documents-2.json.bz2
bzip2 -d documents-2.json.bz2
mv documents-2.json client/benchmark/build
gradlew -p client/benchmark run --args ' rest bulk localhost build/documents-2.json geonames type 8647880 5000'
2016-07-26 05:01:22 -04:00
```
2018-07-31 17:31:13 -04:00
The parameters are all in the `'` s and are in order:
2016-07-26 05:01:22 -04:00
2016-08-02 08:17:51 -04:00
* Client type: Use either "rest" or "transport"
2016-08-26 03:05:47 -04:00
* Benchmark type: Use either "bulk" or "search"
2016-07-26 05:01:22 -04:00
* Benchmark target host IP (the host where Elasticsearch is running)
* full path to the file that should be bulk indexed
* name of the index
2018-07-31 17:31:13 -04:00
* name of the (sole) type in the index
2016-07-26 05:01:22 -04:00
* number of documents in the file
* bulk size
2016-08-26 03:05:47 -04:00
2018-07-31 17:31:13 -04:00
#### Search
2016-08-26 03:05:47 -04:00
2018-07-31 17:31:13 -04:00
Example invocation:
2016-08-26 03:05:47 -04:00
```
2018-11-08 09:32:47 -05:00
./gradlew -p client/benchmark run --args ' rest search localhost geonames {"query":{"match_phrase":{"name":"Sankt Georgen"}}} 500,1000,1100,1200'
2016-08-26 03:05:47 -04:00
```
The parameters are in order:
* Client type: Use either "rest" or "transport"
* Benchmark type: Use either "bulk" or "search"
* Benchmark target host IP (the host where Elasticsearch is running)
* name of the index
* a search request body (remember to escape double quotes). The `TransportClientBenchmark` uses `QueryBuilders.wrapperQuery()` internally which automatically adds a root key `query` , so it must not be present in the command line parameter.
* A comma-separated list of target throughput rates