tom__bo’s Blog

MySQL!! MySQL!! @tom__bo

MySQL Benchmark-001 環境構築その1

今年の冬はお家ベンチマーク環境を暖房にする気持ちでベンチマークをやっていこうと思う。

まずは環境構築から。

環境

  • 2年前に組んだこの構成のPCが2台あるので、これを今回のベンチマークサーバにする
    • core i7 8700 (CPU 6core 12threads)
    • Memory 32GB
    • SSD: いろいろ試す予定
  • メモリは今32GBになってるけど今後検討(データサイズが大きくなると初期化に時間がかかるので)
  • Ubuntu 20.04 LTSをinstall

MySQL install

現時点で最新の8.0.22をインストールする。 (おうち環境なので、ほとんどrootやgrant all権限のユーザを使っています)

minimalのtarファイルを落としてきてディレクトリをいじりつつインストール

## prepare
mkdir /mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

## download & install
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar
tar xf mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar
xz -dc mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar.xz | tar xfv -
mv mysql-8.0.22-linux-glibc2.17-x86_64-minimal /mysql

cd /mysql
mv mysql-8.0.22-linux-glibc2.17-x86_64-minimal/* .
rm -rf mysql-8.0.22-linux-glibc2.17-x86_64-minimal/
chown -R mysql:mysql /mysql

## configure
mkdir logs
chown -R mysql:mysql logs

# set /etc/my.cnf
# see below (my.cnf)

## initialize & start
bin/mysqld --initialize --user=mysql
# bin/mysql_ssl_rsa_setup
# bin/mysqld_safe --user=mysql &

DBの初期化とかuser作成は適宜やる

my.cnf

install中に用意したmy.cnfは一旦こんな感じ。パラメータは今後変えていく

[mysqld]
basedir                   = "/mysql/"
datadir                   = "/mysql/data"

character_sets_dir        = "/mysql/share/charsets/"
plugin_dir                = "/mysql/lib/plugin/"

log_bin                   = "/mysql/logs/binlog"
log_bin_index             = "/mysql/logs/binlog.index"
relay_log                 = "/mysql/logs/relay-log"
relay_log_index           = "/mysql/logs/relay-log.index"

log_error                 = "/mysql/logs/mysqld.err"
general_log_file          = "/mysql/logs/general.log"
slow_query_log_file       = "/mysql/logs/slow.log"

innodb_buffer_pool_size   = 10GB

sysbench簡単なテスト

ほぼdefaultの設定だけど一旦sysbenchを流してみる

  • prepare

server-01でデータ用意

sysbench /usr/share/sysbench/oltp_read_write.lua \
--db-driver=mysql \
--tables=3 \
--table-size=1000000 \
--mysql-host=127.0.0.1 \
--mysql-user=sysbench \
--mysql-password=sysbench \
--mysql-db=sysbench \
--db-ps-mode=disable \
prepare

server-02からoltp_read_only

sysbench /usr/share/sysbench/oltp_read_only.lua \
--db-driver=mysql \
--tables=3 \
--table-size=1000000 \
--mysql-host=192.168.x.y \
--mysql-user=sysbench \
--mysql-password=sysbench \
--mysql-db=sysbench \
--db-ps-mode=disable \
--time=60 \
--threads=10 \
run
  • thread数を10 ~ 50で変化させた様子 (CPUとNetwork IO)

f:id:tom__bo:20201101230010p:plain

oltp_read_writeでthread数を10~70に変化させたときの様子

f:id:tom__bo:20201101230013p:plain

どちらも1Gb帯域のネットワークがボトルネックになっているように見える。 ここでは見ていないがDisk IOはチューニングすれば減らすこともできるので、CPUを使い切れないままネットワークの限界に引きづられるのは面白くない。

ということで次回は10Gb Network環境構築をします!