Sign InTry Free

Stress Test TiDB Using TiUP Bench Component

When you test the performance of a database, it is often required to stress test the database. To facilitate this, TiUP has integrated the bench component, which provides multiple workloads for stress testing. You can access these workloads by the following commands:

tiup bench tpcc   # Benchmark a database using TPC-C
tiup bench tpch   # Benchmark a database using TPC-H
tiup bench ch     # Benchmark a database using CH-benCHmark
tiup bench ycsb   # Benchmark a database using YCSB
tiup bench rawsql # Benchmark a database using arbitrary SQL files

tpcc, tpch, ch, and rawsql share the following common command flags. However, ycsb is mainly configured by a .properties file, which is described in its usage guide.

  -t, --acThreads int         OLAP client concurrency, only for CH-benCHmark (default to 1)
      --conn-params string    Session variables, such as setting `--conn-params tidb_isolation_read_engines='tiflash'` for TiDB queries and setting `--conn-params sslmode=disable` for PostgreSQL connections
      --count int             Total execution count (0 means infinite count)
  -D, --db string             Database name (default to "test")
  -d, --driver string         Database driver: mysql, postgres (default to "mysql")
      --dropdata              Clean up historical data before preparing
  -H, --host strings          Database host (default to [127.0.0.1])
      --ignore-error          Ignore errors when running workload
      --interval duration     Output interval time (default to 10s)
      --isolation int         Isolation Level (0: Default; 1: ReadUncommitted;
                              2: ReadCommitted; 3: WriteCommitted; 4: RepeatableRead;
                              5: Snapshot; 6: Serializable; 7: Linerizable)
      --max-procs int         runtime.GOMAXPROCS of golang, the limits of how many cores can be used
      --output string         Output style. Valid values can be { plain | table | json } (default to "plain")
  -p, --password string       Database password
  -P, --port ints             Database port (default to [4000])
      --pprof string          Address of pprof endpoint
      --silence               Don't print errors when running workload
  -S, --statusPort int        Database status port (default to 10080)
  -T, --threads int           Thread concurrency (default to 1)
      --time duration         Total execution time (default to 2562047h47m16.854775807s)
  -U, --user string           Database user (default to "root")
  • You can pass comma-separated values to --host and --port to enable client-side load balancing. For example, when you specify --host 172.16.4.1,172.16.4.2 --port 4000,4001, the program will connect to 172.16.4.1:4000, 172.16.4.1:4001, 172.16.4.2:4000, and 172.16.4.2:4001, chosen in round-robin fashion.
  • --conn-params must follow the format of query string. Different databases might have different parameters. For example:
    • --conn-params tidb_isolation_read_engines='tiflash' forces TiDB to read from TiFlash.
    • --conn-params sslmode=disable disables SSL when you connect to PostgreSQL.
  • When running CH-benCHmark, you can use --ap-host, --ap-port, and --ap-conn-params to specify a standalone TiDB server for OLAP queries.

The following sections describe how to run TPC-C, TPC-H, YCSB tests using TiUP.

Run TPC-C test using TiUP

The TiUP bench component supports the following commands and flags to run the TPC-C test:

Available Commands:
  check       Check data consistency for the workload
  cleanup     Cleanup data for the workload
  prepare     Prepare data for the workload
  run         Run workload

Flags:
      --check-all            Run all consistency checks
  -h, --help                 Help for TPC-C
      --partition-type int   Partition type: 1 - HASH, 2 - RANGE, 3 - LIST (HASH-like), 4 - LIST (RANGE-like) (default to 1)
      --parts int            Number of partitions (default to 1)
      --warehouses int       Number of warehouses (default to 10)

Test procedures

The following provides simplified steps for running a TPC-C test. For detailed steps, see How to Run TPC-C Test on TiDB.

  1. Create 4 warehouses using 4 partitions via hash:

    tiup bench tpcc --warehouses 4 --parts 4 prepare
    
  2. Run the TPC-C test:

    tiup bench tpcc --warehouses 4 --time 10m run
    
  3. Check the consistency:

    tiup bench tpcc --warehouses 4 check
    
  4. Clean up data:

    tiup bench tpcc --warehouses 4 cleanup
    

Preparing data via SQL might be slow when you want to run a benchmark with a large data set. In that case, you can generate data in the CSV format by the following commands and then import it to TiDB via TiDB Lightning.

  • Generate the CSV file:

    tiup bench tpcc --warehouses 4 prepare --output-dir data --output-type=csv
    
  • Generate the CSV file for the specified table:

    tiup bench tpcc --warehouses 4 prepare --output-dir data --output-type=csv --tables history,orders
    

Run TPC-H test using TiUP

The TiUP bench component supports the following commands and parameters to run the TPC-H test:

Available Commands:
  cleanup     Cleanup data for the workload
  prepare     Prepare data for the workload
  run         Run workload

Flags:
      --check            Check output data, only when the scale factor equals 1
  -h, --help             help for tpch
      --queries string   All queries (default "q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22")
      --sf int           scale factor

Test procedures

  1. Prepare data:

    tiup bench tpch --sf=1 prepare
    
  2. Run the TPC-H test by executing one of the following commands:

    • If you check the result, run this command:

      tiup bench tpch --count=22 --sf=1 --check=true run
      
    • If you do not check the result, run this command:

      tiup bench tpch --count=22 --sf=1 run
      
  3. Clean up data:

    tiup bench tpch cleanup
    

Run YCSB test using TiUP

You can stress test both TiDB and TiKV via YCSB.

Stress test TiDB

  1. Prepare data:

    tiup bench ycsb load tidb -p tidb.instances="127.0.0.1:4000" -p recordcount=10000
    
  2. Run the YCSB workload:

    # The read-write percent is 95% by default
    tiup bench ycsb run tidb -p tidb.instances="127.0.0.1:4000" -p operationcount=10000
    

Stress test TiKV

  1. Prepare data:

    tiup bench ycsb load tikv -p tikv.pd="127.0.0.1:2379" -p recordcount=10000
    
  2. Run the YCSB workload:

    # The read-write percent is 95% by default
    tiup bench ycsb run tikv -p tikv.pd="127.0.0.1:2379" -p operationcount=10000
    

Run RawSQL test using TiUP

You can write an arbitrary query in a SQL file, and then use it for the test by executing tiup bench rawsql as follows:

  1. Prepare data and the query:

    -- Prepare data
    CREATE TABLE t (a int);
    INSERT INTO t VALUES (1), (2), (3);
    
    -- Save your query in a SQL file. For example, you can save the following query in `demo.sql`.
    SELECT a, sleep(rand()) FROM t WHERE a < 4*rand();
    
  2. Run the RawSQL test:

    tiup bench rawsql run --count 60 --query-files demo.sql
    
Download PDFRequest docs changesEdit this page
Was this page helpful?
Open Source Ecosystem
TiDB
TiKV
TiSpark
Chaos Mesh
© 2022 PingCAP. All Rights Reserved.