Search
Duplicate

Sysbench for SingleStore

문서번호 : 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
--mysql-host에 localhost 사용 불가
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 테이블 사용
oltp_common_s2_columnstore.lua
14.2KB
SingleStore Rowstore 테이블 사용
oltp_common_s2_rowstore.lua
14.1KB
SingleStore Rowstore Reference 테이블 사용
oltp_common_s2_rowstore_ref.lua
14.1KB
참고 : 변경 포인트
위의 두개 파일의 변경 내용은 다음과 같음
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
벤치마킹 타입별 최고 성능 조건 (경험) 내용 추가