MariaDB (mysql)을 sysbench로 벤치 마크
소개
DB의 버전 업을 할 때나, 파라미터 변경을 할 때, 성능이 열화되어 있지 않거나, 노린 대로 성능이 향상되고 있는지를 확인하는 것이 중요합니다. 이번에는 sysbench라는 도구를 사용해 보았습니다.
sysbench란?
DB의 벤치마크로도 자주 사용되지만, 서버의 CPU, memory, fileio를 계측할 수도 있습니다. DB에 대해서는 oldp(OnLine Transaction Processing)를 사용하여 계측합니다.
sysbench 버전
환경은 CentOS 6.7입니다. yum에서는 epel 리포지토리를 추가하면 install 할 수 있습니다. 설치 방법은 생략합니다.
# sysbench --version
sysbench 1.0.9
1.0.9를 사용했습니다. 1계와 그 이전에는 거동이 상당히 다르기 때문에 주의.
테스트용 데이터베이스 작성
사전에 테스트를 위한 데이터베이스와 사용자를 만들어 둡시다. sysbench는 기본적으로 sbtest 사용자로 연결됩니다.
MariaDB [(none)]> create database sbtest;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sbtest |
| test |
+--------------------+
5 rows in set (0.01 sec)
MariaDB [(none)]> GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY 'sbtest';
Query OK, 0 rows affected (0.00 sec)
테스트용 테이블 작성
자, 다음은 테스트용 테이블 작성이지만 여기에서 sysbench를 사용합니다.
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=1000000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable prepare
DB의 벤치마크로도 자주 사용되지만, 서버의 CPU, memory, fileio를 계측할 수도 있습니다. DB에 대해서는 oldp(OnLine Transaction Processing)를 사용하여 계측합니다.
sysbench 버전
환경은 CentOS 6.7입니다. yum에서는 epel 리포지토리를 추가하면 install 할 수 있습니다. 설치 방법은 생략합니다.
# sysbench --version
sysbench 1.0.9
1.0.9를 사용했습니다. 1계와 그 이전에는 거동이 상당히 다르기 때문에 주의.
테스트용 데이터베이스 작성
사전에 테스트를 위한 데이터베이스와 사용자를 만들어 둡시다. sysbench는 기본적으로 sbtest 사용자로 연결됩니다.
MariaDB [(none)]> create database sbtest;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sbtest |
| test |
+--------------------+
5 rows in set (0.01 sec)
MariaDB [(none)]> GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY 'sbtest';
Query OK, 0 rows affected (0.00 sec)
테스트용 테이블 작성
자, 다음은 테스트용 테이블 작성이지만 여기에서 sysbench를 사용합니다.
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=1000000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable prepare
# sysbench --version
sysbench 1.0.9
사전에 테스트를 위한 데이터베이스와 사용자를 만들어 둡시다. sysbench는 기본적으로 sbtest 사용자로 연결됩니다.
MariaDB [(none)]> create database sbtest;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sbtest |
| test |
+--------------------+
5 rows in set (0.01 sec)
MariaDB [(none)]> GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY 'sbtest';
Query OK, 0 rows affected (0.00 sec)
테스트용 테이블 작성
자, 다음은 테스트용 테이블 작성이지만 여기에서 sysbench를 사용합니다.
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=1000000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable prepare
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=1000000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable prepare
기타 접속 정보는 환경에 맞추어 주십시오.
테스트 실시
실행으로 실행합니다.
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=100000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=8 run
스레드 수를 지정할 수 있습니다. 기본값은 1입니다.
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=100000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=8 run
sysbench 1.0.9 (using system LuaJIT 2.0.4)
Running the test with following options:
Number of threads: 8
Initializing random number generator from current time
Initializing worker threads...
Threads started!
SQL statistics:
queries performed:
read: 365400
write: 104362
other: 52187
total: 521949
transactions: 26087 (434.71 per sec.)
queries: 521949 (8697.58 per sec.)
ignored errors: 13 (0.22 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.0093s
total number of events: 26087
Latency (ms):
min: 3.52
avg: 18.40
max: 72.39
95th percentile: 24.38
sum: 479986.45
Threads fairness:
events (avg/stddev): 3260.8750/10.51
execution time (avg/stddev): 59.9983/0.00
60초간 실행한 결과가 나옵니다. 성능 지표에는 transactions의 값을 보면 좋을 것입니다.
script화
prepare/run/clean을 실행할 수 있도록 script화했습니다.
sysbench.sh#!/bin/sh
LUA=/usr/share/sysbench/oltp_read_write.lua
SIZE=1000000
usage()
{
echo "Usage: ./sysbench.sh <prepare|run|cleanup> <num of threads>"
exit "${1}"
}
#chack argumets
if [ "${1}" = "" -o $# -gt 3 ]; then
usage 1
elif [ "${2}" = "" ]; then
THREADS=1
else
THREADS=${2}
fi
sysbench ${LUA} --db-driver=mysql --table-size=${SIZE} --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=${THREADS} ${1}
이 run을 한층 더 랩 해, thread수를 변화시켜 실행하는 script입니다.
run.sh#!/bin/sh
DATE=`date '+%Y%m%d%H%M'`
mkdir $DATE
for thread in 1 2 4 8 16 64 256
do
./sysbench.sh run ${thread} >> ${DATE}/sysbench_read_write_${thread}.log
done
또한 각 스레드 수에 대한 결과의 트랜잭션 수를 표시하는 스크립트입니다.
result.sh#!/bin/sh
usage()
{
echo "Usage: ./result.sh <result's directory>"
exit "${1}"
}
#chack argumets
if [ "${1}" = "" -o $# -gt 2 ]; then
usage 1
fi
grep transaction ${1}/*.log | sort -t _ -nk3 | awk '{print $3}'
결론
DB의 버전 업시나, 파라미터 변경시에 벤치마크를 실시할 수 있으면 안심이군요.
덤: MariaDB 버전 간 비교
MariaDB의 5.5, 10.0, 10.1, 10.2의 각 최신판을 clean install한 결과로, thread수를 바꾸어 실시해 보았습니다.
5.5.45
10.0.33
10.1.28
10.2.10
1
21516
19136
18413
18942
2
24803
28070
24875
26851
4
23361
20814
20271
19981
8
24338
24357
22879
23146
16
25256
27744
24751
26371
64
24425
26731
24579
25566
maxcon의 default가 151이므로 256에서는 측정할 수 없습니다. 5계와 10계에서 경향이 다른 것 같은 생각도 합니다만, 내부 구조에 밝은 것은 아니기 때문에, 이 결과로부터의 고찰은 특별히 없습니다.
Reference
이 문제에 관하여(MariaDB (mysql)을 sysbench로 벤치 마크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chaspy/items/d15ddd55ad11a555474d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=100000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=8 run
# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --table-size=100000 --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=8 run
sysbench 1.0.9 (using system LuaJIT 2.0.4)
Running the test with following options:
Number of threads: 8
Initializing random number generator from current time
Initializing worker threads...
Threads started!
SQL statistics:
queries performed:
read: 365400
write: 104362
other: 52187
total: 521949
transactions: 26087 (434.71 per sec.)
queries: 521949 (8697.58 per sec.)
ignored errors: 13 (0.22 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.0093s
total number of events: 26087
Latency (ms):
min: 3.52
avg: 18.40
max: 72.39
95th percentile: 24.38
sum: 479986.45
Threads fairness:
events (avg/stddev): 3260.8750/10.51
execution time (avg/stddev): 59.9983/0.00
prepare/run/clean을 실행할 수 있도록 script화했습니다.
sysbench.sh
#!/bin/sh
LUA=/usr/share/sysbench/oltp_read_write.lua
SIZE=1000000
usage()
{
echo "Usage: ./sysbench.sh <prepare|run|cleanup> <num of threads>"
exit "${1}"
}
#chack argumets
if [ "${1}" = "" -o $# -gt 3 ]; then
usage 1
elif [ "${2}" = "" ]; then
THREADS=1
else
THREADS=${2}
fi
sysbench ${LUA} --db-driver=mysql --table-size=${SIZE} --mysql-host=localhost --mysql-password=sbtest --time=60 --db-ps-mode=disable --threads=${THREADS} ${1}
이 run을 한층 더 랩 해, thread수를 변화시켜 실행하는 script입니다.
run.sh
#!/bin/sh
DATE=`date '+%Y%m%d%H%M'`
mkdir $DATE
for thread in 1 2 4 8 16 64 256
do
./sysbench.sh run ${thread} >> ${DATE}/sysbench_read_write_${thread}.log
done
또한 각 스레드 수에 대한 결과의 트랜잭션 수를 표시하는 스크립트입니다.
result.sh
#!/bin/sh
usage()
{
echo "Usage: ./result.sh <result's directory>"
exit "${1}"
}
#chack argumets
if [ "${1}" = "" -o $# -gt 2 ]; then
usage 1
fi
grep transaction ${1}/*.log | sort -t _ -nk3 | awk '{print $3}'
결론
DB의 버전 업시나, 파라미터 변경시에 벤치마크를 실시할 수 있으면 안심이군요.
덤: MariaDB 버전 간 비교
MariaDB의 5.5, 10.0, 10.1, 10.2의 각 최신판을 clean install한 결과로, thread수를 바꾸어 실시해 보았습니다.
5.5.45
10.0.33
10.1.28
10.2.10
1
21516
19136
18413
18942
2
24803
28070
24875
26851
4
23361
20814
20271
19981
8
24338
24357
22879
23146
16
25256
27744
24751
26371
64
24425
26731
24579
25566
maxcon의 default가 151이므로 256에서는 측정할 수 없습니다. 5계와 10계에서 경향이 다른 것 같은 생각도 합니다만, 내부 구조에 밝은 것은 아니기 때문에, 이 결과로부터의 고찰은 특별히 없습니다.
Reference
이 문제에 관하여(MariaDB (mysql)을 sysbench로 벤치 마크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chaspy/items/d15ddd55ad11a555474d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
MariaDB의 5.5, 10.0, 10.1, 10.2의 각 최신판을 clean install한 결과로, thread수를 바꾸어 실시해 보았습니다.
5.5.45
10.0.33
10.1.28
10.2.10
1
21516
19136
18413
18942
2
24803
28070
24875
26851
4
23361
20814
20271
19981
8
24338
24357
22879
23146
16
25256
27744
24751
26371
64
24425
26731
24579
25566
maxcon의 default가 151이므로 256에서는 측정할 수 없습니다. 5계와 10계에서 경향이 다른 것 같은 생각도 합니다만, 내부 구조에 밝은 것은 아니기 때문에, 이 결과로부터의 고찰은 특별히 없습니다.
Reference
이 문제에 관하여(MariaDB (mysql)을 sysbench로 벤치 마크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chaspy/items/d15ddd55ad11a555474d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)