コンテンツにスキップ

sysbench - システム & データベースベンチマーク チートシート

sysbench - システム & データベースベンチマーク チートシート

sysbench は LuaJIT ベースのスクリプト可能なマルチスレッドベンチマークツール。データベースベンチマーク(特に MySQL と PostgreSQL OLTP ワークロード経由)で最も有名ですが、CPU、メモリ、ファイル I/O、スレッド、ミューテックス用の組み込みテストも搭載。ワークロードがパラメータ化・スクリプト化可能なため、キャパシティプランニング、チューニング、before/after 比較用の反復可能な数字を生成。

インストール

プラットフォームコマンド
Debian/Ubuntusudo apt install sysbench
Fedora/RHELsudo dnf install sysbench
Arch Linuxsudo pacman -S sysbench
macOS(Homebrew)brew install sysbench
ソースからakopytov/sysbench リポジトリからビルド
確認sysbench --version

コマンド構造

sysbench [testname] [options] {prepare | run | cleanup}
フェーズ目的
prepareテストが必要なデータ/ファイルを作成
runベンチマークを実行
cleanupテストデータ/ファイルを削除

一般的なグローバルオプション

オプション説明
--threads=Nワーカースレッドの数
--time=NN 秒間実行(0 = イベントが完了するまで)
--events=N合計イベントをキャップ
--rate=Nイベント/秒をターゲット(レート制限)
--report-interval=NN 秒ごとに中間統計を印字
--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-modeseqrdseqwrrndrdrndwrrndrw
--file-block-sizeI/O ブロックサイズ
--file-fsync-freqfsync 周波数

主要メトリック: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_writeoltp_read_onlyoltp_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/レイテンシーをスケール監視

リソース