sysbench - システム & データベースベンチマーク チートシート
sysbench は LuaJIT ベースのスクリプト可能なマルチスレッドベンチマークツール。データベースベンチマーク(特に MySQL と PostgreSQL OLTP ワークロード経由)で最も有名ですが、CPU、メモリ、ファイル I/O、スレッド、ミューテックス用の組み込みテストも搭載。ワークロードがパラメータ化・スクリプト化可能なため、キャパシティプランニング、チューニング、before/after 比較用の反復可能な数字を生成。
インストール
| プラットフォーム | コマンド |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS(Homebrew) | brew install sysbench |
| ソースから | akopytov/sysbench リポジトリからビルド |
| 確認 | sysbench --version |
コマンド構造
sysbench [testname] [options] {prepare | run | cleanup}
| フェーズ | 目的 |
|---|
prepare | テストが必要なデータ/ファイルを作成 |
run | ベンチマークを実行 |
cleanup | テストデータ/ファイルを削除 |
一般的なグローバルオプション
| オプション | 説明 |
|---|
--threads=N | ワーカースレッドの数 |
--time=N | N 秒間実行(0 = イベントが完了するまで) |
--events=N | 合計イベントをキャップ |
--rate=N | イベント/秒をターゲット(レート制限) |
--report-interval=N | N 秒ごとに中間統計を印字 |
--warmup-time=N | 測定前にウォームアップ |
--histogram | レイテンシーヒストグラムを表示 |
CPU ベンチマーク
# 20000 までの素数を 4 スレッドで 30 秒間確認
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| オプション | 説明 |
|---|
--cpu-max-prime=N | 素数計算の上限(ワークサイズ) |
主要メトリック:秒あたりイベント(高いほどが良い)。
メモリベンチマーク
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| オプション | 説明 |
|---|
--memory-block-size | 各メモリ操作のサイズ |
--memory-total-size | 転送する合計データ |
--memory-oper=read|write | 操作タイプ |
--memory-access-mode=seq|rnd | アクセスパターン |
主要メトリック:MiB/秒転送レート。
ファイル I/O ベンチマーク
sysbench fileio --file-total-size=4G prepare
sysbench fileio --file-total-size=4G --file-test-mode=rndrw \
--time=60 --threads=8 run
sysbench fileio --file-total-size=4G cleanup
| オプション | 説明 |
|---|
--file-total-size | テストファイルの合計サイズ |
--file-test-mode | seqrd、seqwr、rndrd、rndwr、rndrw |
--file-block-size | I/O ブロックサイズ |
--file-fsync-freq | fsync 周波数 |
主要メトリック:IOPS、スループット(MiB/s)、レイテンシー。
スレッド & ミューテックス
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
データベース(OLTP)ベンチマーク
sysbench は Lua OLTP スクリプト(oltp_read_write、oltp_read_only、oltp_point_select など)を搭載。
# MySQL データベースに 10 テーブル×1,000,000 行を準備
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 prepare
# 16 スレッドで 5 分間の混合読み書きテストを実行
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 --threads=16 --time=300 \
--report-interval=10 run
# クリーンアップ
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| オプション | 説明 |
|---|
--db-driver=mysql|pgsql | ターゲットデータベース |
--tables / --table-size | データセット形状 |
oltp_read_only / oltp_write_only | ワークロードミックスバリアント |
--db-ps-mode=disable | プリペアドステートメントを無効化 |
主要メトリック:トランザクション/秒(TPS)、クエリ/秒(QPS)、レイテンシーパーセンタイル。
結果を読む
| メトリック | 意味 |
|---|
| events/s | 操作のスループット |
| レイテンシー(平均/95th) | レスポンスタイム;95 パーセンタイルを監視 |
| TPS / QPS | データベーストランザクション/クエリスループット |
| min/max/avg | イベントあたりのタイミング分布 |
一般的なワークフロー
# ガバナー変更前後で CPU を比較
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# 新しいディスク上でストレージ健全性チェック
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# MySQL をチューン:--threads を変化させて TPS/レイテンシーをスケール監視
リソース