Table of Contents
- Installing from Binary Packages
- Building and Installing From Source
sysbench is a scriptable multi-threaded benchmark tool based on LuaJIT. It is most frequently used for database benchmarks, but can also be used to create arbitrarily complex workloads that do not involve a database server.
sysbench comes with the following bundled benchmarks:
oltp_*.lua: a collection of OLTP-like database benchmarks
fileio: a filesystem-level benchmark
cpu: a simple CPU benchmark
memory: a memory access benchmark
threads: a thread-based scheduler benchmark
mutex: a POSIX mutex benchmark
- extensive statistics about rate and latency is available, including latency percentiles and histograms;
- low overhead even with thousands of concurrent threads. sysbench is capable of generating and tracking hundreds of millions of events per second;
- new benchmarks can be easily created by implementing pre-defined hooks in user-provided Lua scripts;
- can be used as a general-purpose Lua interpreter as well, simply
#!/usr/bin/sysbenchin your script.
Installing from Binary Packages
The easiest way to download and install sysbench on Linux is using binary package repositories hosted by packagecloud. The repositories are automatically updated on each sysbench release. Currently x86_64, i386 and aarch64 binaries are available.
Multiple methods to download and install sysbench packages are available and described at https://packagecloud.io/akopytov/sysbench/install.
Quick install instructions:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash sudo apt -y install sysbench
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash sudo yum -y install sysbench
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash sudo dnf -y install sysbench
On macOS, up-to-date sysbench packages are available from Homebrew:
# Add --with-postgresql if you need PostgreSQL support brew install sysbench
As of sysbench 1.0 support for native Windows builds was dropped. It may be re-introduced in later releases. Currently, the recommended way to obtain sysbench on Windows is using Windows Subsystem for Linux available in Windows 10.
After installing WSL and getting into he bash prompt on Windows following Debian/Ubuntu installation instructions is sufficient. Alternatively, one can use WSL to build and install sysbench from source, or use an older sysbench release to build a native binary.
Building and Installing From Source
It is recommended to install sysbench from the official binary packages as described in Installing from Binary Packages. Below are instruction for cases when you want to use sysbench on an architecture for which no binary packages are available.
As of sysbench 1.0 support for native Windows builds was dropped. It may be re-introduced in later versions. Currently, the recommended way to build sysbench on Windows is using Windows Subsystem for Linux available in Windows 10.
After installing WSL and getting into bash prompt on Windows, following Debian/Ubuntu build instructions is sufficient. Alternatively, one can build and use an older 0.5 release on Windows.
apt -y install make automake libtool pkg-config libaio-dev vim-common # For MySQL support apt -y install libmysqlclient-dev # For PostgreSQL support apt -y install libpq-dev
yum -y install make automake libtool pkgconfig libaio-devel vim-common # For MySQL support, replace with mysql-devel on RHEL/CentOS 5 yum -y install mariadb-devel # For PostgreSQL support yum -y install postgresql-devel
dnf -y install make automake libtool pkgconfig libaio-devel vim-common # For MySQL support dnf -y install mariadb-devel # For PostgreSQL support dnf -y install postgresql-devel
Assuming you have Xcode (or Xcode Command Line Tools) and Homebrew installed:
brew install automake pkg-config # For MySQL support brew install mysql # For PostgreSQL support brew install postgresql
Build and Install
./autogen.sh # Add --with-pgsql to build with PostgreSQL support ./configure make make install
The above will build sysbench with MySQL support by default. If you have
MySQL headers and libraries in non-standard locations (and no
mysql_config can be found in the
PATH), you can specify them
To compile sysbench without MySQL support, use
--without-mysql. If no
database drivers are available database-related scripts will not work,
but other benchmarks will be functional.
See README-Oracle.md for instructions on building with Oracle client libraries.
The general command line syntax for sysbench is:
sysbench [options]... [testname] [command]
testname is an optional name of a built-in test (e.g.
cpu, etc.), or a name of one of the bundled Lua scripts (e.g.
oltp_read_only), or a path to a custom Lua script. If no test name is specified on the command line (and thus, there is no command too, as in that case it would be parsed as a testname), or the test name is a dash ("
-"), then sysbench expects a Lua script to execute on its standard input.
command is an optional argument that will be passed by sysbench to the built-in test or script specified with testname. command defines the action that must be performed by the test. The list of available commands depends on a particular test. Some tests also implement their own custom commands.
Below is a description of typical test commands and their purpose:
prepare: performs preparative actions for those tests which need them, e.g. creating the necessary files on disk for the
fileiotest, or filling the test database for database benchmarks.
run: runs the actual test specified with the testname argument. This command is provided by all tests.
cleanup: removes temporary data after the test run in those tests which create one.
help: displays usage information for the test specified with the testname argument. This includes the full list of commands provided by the test, so it should be used to get the available commands.
options is a list of zero or more command line options starting with
'--'. As with commands, the
sysbench testname helpcommand should be used to describe available options provided by a particular test.
See General command line options for a description of general options provided by sysbench itself.
You can use
sysbench --help to display the general command line syntax
General command line options
The table below lists the supported common options, their descriptions and default values:
||The total number of worker threads to create||1|
||Limit for total number of requests. 0 (the default) means no limit||0|
||Limit for total execution time in seconds. 0 means no limit||10|
||Execute events for this many seconds with statistics disabled before the actual benchmark run with statistics enabled. This is useful when you want to exclude the initial period of a benchmark run from statistics. In many benchmarks, the initial period is not representative because CPU/database/page and other caches need some time to warm up||0|
||Average transactions rate. The number specifies how many events (transactions) per seconds should be executed by all threads on average. 0 (default) means unlimited rate, i.e. events are executed as fast as possible||0|
||Size of stack for each thread||32K|
||Periodically report intermediate statistics with a specified interval in seconds. Note that statistics produced by this option is per-interval rather than cumulative. 0 disables intermediate reports||0|
||Print more debug info||off|
||Perform validation of test results where possible||off|
||Print help on general syntax or on a specified test, and exit||off|
||Verbosity level (0 - only critical messages, 5 - debug)||4|
||sysbench measures execution times for all processed requests to display statistical information like minimal, average and maximum execution time. For most benchmarks it is also useful to know a request execution time value matching some percentile (e.g. 95% percentile means we should drop 5% of the most long requests and choose the maximal value from the remaining ones). This option allows to specify a percentile rank of query execution times to count||95|
||perform a LuaJIT control command. This option is equivalent to
Note that numerical values for all size options (like
--thread-stack-size in this table) may be specified by appending the corresponding multiplicative suffix (K for kilobytes, M for megabytes, G for gigabytes and T for terabytes).