월: 2017 3월

Sysbench 1.0.4

2006년 부터 중단되었던 sysbench 가 2017년 2월 1.0 으로 재탄생 (오늘 1.0.4 가 나옴)

https://fosdem.org/2017/schedule/event/sysbench/

FOSDEM 2017 슬라이드, 비디오 참고

sysbench 가 할 수 있는 일은 ..
– 파일 I/O 성능 측정
– 스케쥴러 성능 측정
– 메모리 할당과 메모리 전송 속도 측정
– POSIX 쓰레드 구현 성능 측정

– 데이터베이스 서버 성능 측정

오랫동안 메인터넌스가 되고 있지 않던 툴인데 이번에 많은 부분에서 향상되었다고 함

– 더 나은 성능과 확장성

LuaJIT+FFI, 한개 이상 쓰레드로 돌릴 수 있음, concurrencykit, 뮤텍스mutex 없음, 공유 카운터 없음
– 커맨드라인 syntax 향상
구버전에서 옵션들이 sysbench 에서 글로벌옵션 형태로 Lua 스크립트로 export 되었으나,
이제 Lua 스크립트 자체에서 옵션들을 정의하고 sysbench 에서 validate 할 수 있음
– Plain Lua가 아니라 LuaJIT+FFI(Foreign Functions Interface)를 써서 순수한 Lua 코드에서 외부 C 함수 호출, C 데이터구조 사용을 허용
– 새로운 SQL API
향상된 성능, 쓰레드당 다중 커넥션 생성, 결과 세트results sets 받아서 추가 처리가 가능해짐
– 레이턴시 히스토그램 표기(–histogram)
– 에러 후킹Error Hook:
구 버전에서 단순히 에러번호 skip 했던 것 외에도 에러코드를 훅킹해서 커넥션을 다시 붙인다던지 하는 로직 처리 가능
– 커스텀 커맨드
prepare, run, cleanup, help 로 고정되어있던 명령어 외 스크립트가 자신만의 커맨드를 선언할 수 있음, 커스텀 커맨드를 병렬 처리 가능
– 커스텀 리포트
CSV, JSON 등으로 아웃풋 찍기, 결과를 Prometheus/Graphite/기타에 저장 연동

아직까지는 안되는 것, 미비한것:
Oracle, Drizzle, libattachsql 드라이버 미지원, PostgreSQL 드라이버 부족함

추가로 개선 예정인 부분들:
문서화, 패키징, syslinkbench, 몽고DB 드라이버, MySQL X Protocol

테스트//
syntax 가 다음과 같이 변경되어 있음

구버전) $ sysbench –test= [options…] command
신버전) $ sysbench [options]… [testname(path)] [command]

번들 제공되는 Lua 스크립트 옵션은 help 명령어로 확인

$ /usr/local/bin/sysbench /usr/local/share/sysbench/oltp_read_write.lua help
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta2)

oltp_read_write.lua options:

  –distinct_ranges=N           Number of SELECT DISTINCT queries per transaction [1]
  –sum_ranges=N                Number of SELECT SUM() queries per transaction [1]
  –skip_trx[=on|off]           Don’t start explicit transactions and execute all queries in the AUTOCOMMIT mode [off]
  –secondary[=on|off]          Use a secondary index in place of the PRIMARY KEY [off]
  –create_secondary[=on|off]   Create a secondary index in addition to the PRIMARY KEY [on]
  –index_updates=N             Number of UPDATE index queries per transaction [1]
  –range_size=N                Range size for range SELECT queries [100]
  –auto_inc[=on|off]           Use AUTO_INCREMENT column as Primary Key (for MySQL), or its alternatives in other DBMS. When disabled, use client-generated IDs [on]
  –delete_inserts=N            Number of DELETE/INSERT combination per transaction [1]
  –tables=N                    Number of tables [1]
  –mysql_storage_engine=STRING Storage engine, if MySQL is used [innodb]
  –non_index_updates=N         Number of UPDATE non-index queries per transaction [1]
  –table_size=N                Number of rows per table [10000]
  –pgsql_variant=STRING        Use this PostgreSQL variant when running with the PostgreSQL driver. The only currently supported variant is ‘redshift’. When enabled, create_secondary is automatically disabled, and delete_inserts is set to 0
  –simple_ranges=N             Number of simple range SELECT queries per transaction [1]
  –order_ranges=N              Number of SELECT ORDER BY queries per transaction [1]
  –range_selects[=on|off]      Enable/disable all range SELECT queries [on]

  –point_selects=N             Number of point SELECT queries per transaction [10]

패키지가 없으니 설치는 다음과 같이 진행
automake, libtool, mysql-devel 필요할 수 있음

$ ./autogen.sh
$ ./configure –with-mysql-includes=… –with-mysql-libs=…
$ make

$ make install

예를 들어 번들 OLTP R/W 성능 측정 Lua 스크립트를 돌릴려면 다음과 같이 진행

$ /usr/local/bin/sysbench –mysql-host=localhost –mysql-port=3306 –mysql-socket=/var/run/mysqld/mysql.sock –mysql-user=XXXX –mysql-password=’XXXXX’ –threads=8 –time=300 –warmup-time=10 –report-interval=1 –tables=5 –table_size=1000000 –histogram /usr/local/share/sysbench/oltp_read_write.lua prepare

$ /usr/local/bin/sysbench –mysql-host=localhost –mysql-port=3306 –mysql-socket=/var/run/mysqld/mysql.sock –mysql-user=XXXX –mysql-password=’XXXXX’ –threads=8 –time=300 –warmup-time=10 –report-interval=1 –tables=5 –table_size=1000000 –histogram /usr/local/share/sysbench/oltp_read_write.lua run

$ /usr/local/bin/sysbench –mysql-host=localhost –mysql-port=3306 –mysql-socket=/var/run/mysqld/mysql.sock –mysql-user=XXXX –mysql-password=’XXXXX’ –threads=8 –time=300 –warmup-time=10 –report-interval=1 –tables=5 –table_size=1000000 –histogram /usr/local/share/sysbench/oltp_read_write.lua cleanup

Lua 스크립트 자유롭게 수정해서 나만의 케이스 만들어 볼 수 있겠음

Advertisements