## BenchDB

BenchDB is a command line tool to test the performance of TiDB.

### Quick Start

Make sure you have started PD and TiKV, then run:

```
./benchdb -run="create|truncate|insert:0_10000|update-random:0_10000:100000|select:0_10000:10"
```


### Arguments

#### `run`
The `run` argument defines the workflow of the test. You can define
multiple jobs, separated by `|`. The jobs are executed sequentially.
The `run` argument has the following options:
 
* `create` creates a table. Currently it's just a typical simple table, with a few columns.

* `truncate` truncates the table.

* `insert:xxx_yyy` inserts rows with ID in `[xxx, yyy)`.
 e.g. `insert:0_10000` inserts 10000 rows with ID in range  `[0, 9999)`.
   
* `update-random:xxx_yyy:zzz` updates a row with a random ID in range `[xxx, yyy)`, for `zzz` times.
 e.g. `update-random:100_200:50` updates 50 random rows with ID in range `[100, 200)`.
 
* `update-range:xxx_yyy:zzz` update a range of rows with ID in range `[xxx, yyy)`, for `zzz` times. 
  
* `select:xxx_yyy:zzz` select rows with ID range in `[xxx, yyy)`, for `zzz` times.

* `gc` does a manually triggered GC, so we can compare the performance before and after GC.

* `query:xxx:zzz` run a sql query `xxx`, for `zzz` times.
 
 The output shows the execution time.
 
#### `table`

The name of the table, so we can create many tables for different tests without the need to clean up.
Default is `bench_db`.
  
#### `blob`

The blob column size in bytes, so we can test performance for different row size.
Default is `1000`.

#### `batch`

The batch number of statements in a transaction, used for insert and update-random only, to speed up the test workflow.
Default is `100`.

#### `addr`

The PD address. Default is `127.0.0.1:2379`.

### `L`

The log level. Default is `warn`.