문서번호 : 11-2300378
Document Information
•
최초 작성일 : 2024.04.24
•
최종 수정일 : 2024.05.23
•
이 문서는 아래 버전을 기준으로 작성되었습니다.
◦
Sysbench v1.0.20
◦
SingleStore (버전 무관)
Goal
SingleStoreDB 성능 측정을 위해 Sysbench를 SingleStore에 맞게 변경하여 사용한다.
Solution
Sysbench 란?
•
오픈소스 소프트웨어
•
Linux 시스템 용으로 설계된 스크립트 가능한 다중 스레드 벤치마킹 도구
•
C 바이너리 이며 LuaJIT 스크립트를 사용하여 벤치마크를 실행
•
MySQL과 같은 데이터베이스 벤치마크에 가장 자주 사용되지만 일반 테스트를 위해 데이터베이스 서버를 포함하지 않는 임의로 복잡한 워크로드를 생성하는 데에도 사용할 수 있음
•
CPU, 메모리, I/O 및 데이터베이스 성능 테스트 에 대한 테스트를 제공하는 다목적 벤치마크
•
컴퓨터 하드웨어를 벤치마킹하는 직접적인 방법을 제공하는 기본 명령줄 유틸리티
•
Debian, Ubuntu, CentOS 및 Arch Linux와 같은 대부분의 주요 Linux 배포 저장소에 패키지로 제공됨:
1. 시스템 구성
1.1. SingleStore 설치
내용 생략 : 별도 매뉴얼에 따라 진행
1.2. Sysbench 설치
내용 생략 : 별도 매뉴얼에 따라 진행
•
TIP
◦
▪
localhost로 설정시 mysql.socket 파일을 통한 Unix Domain Socket 방식으로 통신하려함, 파일이 존재하더라도 이것은 MySQL 전용임
◦
Oracle Linux RPM설치 일 경우
1.
repository 정보의 오류가 있으므로, 등록된 yum repository의 정보를 일부 수정해야함 (2024.04.25 기준)
a.
편집대상 : /etc/yum.repos.d/akopytov_sysbench.repo
b.
편집내용 : baseurl 경로상의 /ol/ ⇒ /el/ 로 변경
2.
MySQL libs 를 별도 설치 필요
•
mysql-libs.x86_64 패키지 또는 이를 포함한 mysql 전체, devel 패키지 등 설치
본 가이드에서는
설치된 Sysbench의 벤치마킹 스크립트들이 /usr/share/sysbench디렉토리에 있음을 가정
2. Sysbench 포팅 개요
Sysbench의 모든 Query는 MySQL에 맞춰져 있습니다. 이를 SingleStore에 맞게 변경합니다.
2.1 포팅 내용 요약
•
oltp_common.lua파일에는 사전에 실행될 공통 모듈이 구현되어 있음
◦
테이블 생성 / 데이터 생성 및 적재 / 벤치마킹 Query 정의 등
•
모든 벤치마킹 스크립트에서 oltp_common.lua가 importing 됨
•
그러므로, oltp_common.lua를 복제하여 벤치마킹 케이스(Rowstore용, Columnstore용)에 맞게 수정한 별도의 파일 생성
•
Columnstore 테이블의 경우 OPTIMIZE TABLE .. FULL;을 수행하여 모든 데이터가 디스크로 Flush되도록 함
•
벤치마킹 케이스에 따라 해당 스크립트 파일을 oltp_common.lua 에 링크하면 편리함
2.2. 테이블 스키마
•
생성 테이블 개수 : 1개
•
테이블명 : sbtest<번호> / 테이블 수량에 따라 채번됨
•
컬럼수 : 4개
•
기존 테이블 스키마 (MySQL 일때)
CREATE TABLE sbtest1 (
id bigint(11) NOT NULL AUTO_INCREMENT,
k int(11) DEFAULT '0' NOT NULL,
c char(120) DEFAULT '' NOT NULL,
pad char(60) DEFAULT '' NOT NULL,
PRIMARY KEY (id)
);
CREATE INDEX k_1 ON sbtest1(k);
Bash
복사
•
SingleStore Columnstore 테이블로 변경
◦
SORT KEY (id) 추가
CREATE TABLE sbtest1 (
id bigint(11) NOT NULL AUTO_INCREMENT,
k int(11) DEFAULT '0' NOT NULL,
c char(120) DEFAULT '' NOT NULL,
pad char(60) DEFAULT '' NOT NULL,
sort key (id), -- 추가된 INDEX
PRIMARY KEY (id)
);
CREATE INDEX k_1 ON sbtest1(k);
Bash
복사
•
SingleStore Rowstore 테이블로 변경
◦
CREATE 구문에 ROWSTORE 구문 추가
CREATE ROWSTORE TABLE sbtest1 (
id bigint(11) NOT NULL AUTO_INCREMENT,
k int(11) DEFAULT '0' NOT NULL,
c char(120) DEFAULT '' NOT NULL,
pad char(60) DEFAULT '' NOT NULL,
PRIMARY KEY (id)
);
CREATE INDEX k_1 ON sbtest1(k);
Bash
복사
3. sysbench를 이용한 SingleStore 벤치마킹
본 가이드에서는
설치된 Sysbench의 벤치마킹 스크립트들이 /usr/share/sysbench디렉토리에 있음을 가정
3.1. SingleStore용 벤치마킹 스크립트 업로드
•
다음 2개 파일을 시스템의 Sysbench 설치 디렉토리(/usr/share/sysbench)에 업로드
◦
SingleStore Columnstore 테이블 사용
◦
SingleStore Rowstore 테이블 사용
◦
SingleStore Rowstore Reference 테이블 사용
•
참고 : 변경 포인트
위의 두개 파일의 변경 내용은 다음과 같음
◦
oltp_common.lua 파일내 create_table 함수
▪
CREATE TABLE 구문 변경
▪
Columnstore 테이블의 경우 마지막에 “OPTIMIZE TABLE” 수행 추가
3.2. 기존 벤치마킹 스크립트 백업 (oltp_common.lua → oltp_common.lua.org)
•
$ mv /usr/share/sysbench/oltp_common.lua /usr/share/sysbench/oltp_common.lua.org
Bash
복사
3.3. 케이스별 벤치마킹 진행
•
절차 요약
1.
벤치마킹 케이스에 해당하는 벤치마킹 스크립트로 전환
a.
아래 [벤치마킹 스크립트(lua) 전환 방법] 참고
2.
벤치마킹 진행
a.
데이터 준비 (prepare) → 측정 (run) → 클린업 (cleanup)
##########
## 예시 ##
##########
# 데이터 준비 (prepare)
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host='sdb-ag1' --mysql-port=3306 \
--mysql-user=root --mysql-password='memsql' \
--mysql-db=sysbench --db-driver=mysql --tables=100 \
--table-size=100000000 --threads=4 --time=300 \
--mysql-ignore-errors=all --db-ps-mode=disable prepare
##########
# 측정 (모드만 수정 prepare -> run)
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host='sdb-ag1' --mysql-port=3306 \
--mysql-user=root --mysql-password='memsql' \
--mysql-db=sysbench --db-driver=mysql --tables=100 \
--table-size=100000000 --threads=4 --time=300 \
--mysql-ignore-errors=all --db-ps-mode=disable run
##########
# cleanup (모드만 수정 run -> clenup)
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host='sdb-ag1' --mysql-port=3306 \
--mysql-user=root --mysql-password='memsql' \
--mysql-db=sysbench --db-driver=mysql --tables=100 \
--table-size=100000000 --threads=4 --time=300 \
--mysql-ignore-errors=all --db-ps-mode=disable cleanup
Bash
복사
3.
다른 케이스에 대해 1, 2 반복 실행
•
벤치마킹 스크립트(lua) 전환 방법
◦
미리 생성해둔 common lua 파일에 대해 oltp_common.lua 링크 파일 생성
# (주의) 링크파일일 경우 링크파일 삭제
$ [ -L /usr/share/sysbench/oltp_common.lua ] && \rm -i /usr/share/sysbench/oltp_common.lua
# Columnstore 사용으로 전환
$ ln -s /usr/share/sysbench/oltp_common_s2_columnstore.lua /usr/share/sysbench/oltp_common.lua
# Rowstore 사용으로 전환
$ ln -s /usr/share/sysbench/oltp_common_s2_rowstore.lua /usr/share/sysbench/oltp_common.lua
# Rowstore Reference 사용으로 전환
$ ln -s /usr/share/sysbench/oltp_common_s2_rowstore_ref.lua /usr/share/sysbench/oltp_common.lua
Bash
복사
튜닝포인트 : 영향을 미치는 요소들
•
데이터베이스 파티션의 수
◦
vCPU 대비 비율 조정 (Leaf노드의 총 vCPU수와 동일 → 1/2 → 1/4)
CREATE DATABASE sysbench PARTITIONS <파티션수>;
Bash
복사
•
테이블 사이즈 (table_size = 100,000,000 이상 권장)
•
조회 레코드 수 (range_size = 100(기본값) → 500 → 1000 → 5000 → .. 순으로 측정 권장)
벤치마킹 타입별 최고 성능 조건 (경험)
다음은 러프한 벤치마킹을 수행후 경험을 요약함
•
read_only : 파티션수가 작을 수록 좋으며, Rowstore Reference 테이블일때 최고
•
read_write : 파티션수가 적당히 많을 수록 (core대비 1:1 정도), client thread 적당히 많을때
◦
시험 클러스터 규모 : 32core/128GB (4unit, 3개 host/node 구성)
▪
32개 파티션, 80개 thread일때 최고 성능 (더 많은 파티션, thread는 시험되지 않음)
▪
cpu 사용률 : 95%
▪
Sysbench 기동 host : MA
References
History
일자 | 작성자 | 비고 |
2024.04.24 | kkh | 최초작성 |
2024.05.23 | kkh | 벤치마킹 타입별 최고 성능 조건 (경험) 내용 추가 |