Uncategorized

오픈소스 DBA 정신

Open Source DBA Ethos

좋은 글이 있어 퍼옴

오픈소스 DBA 란..!
1. 데이터베이스 뿐 만 아니라 시스템 전문가가 되어야 함
2. 회사와 커뮤니티에 기여할 수 있는 개발자도 되어야 함
3. 빠르게 움직여야 함
4. 하나의 답에 만족하지 않고 해답을 갈구 해야 함
5. 사내 다른 부서와 커뮤니티의 다른 회사와도 협력할 줄 알아야 함
6. 변화를 주도해나가야 함

  • We are system experts.  Open source DBAs know their operating system.  They are not only focused on the database.
  • We are developers.  We contribute to source code within our enterprises, and in many cases, in the community.  We create meaningful tools for our companies, and help solve problems inherent in “bleeding edge” technologies, making such technologies approachable in the enterprise.  We strive to bring continuous integration and seamless migration into places that are very difficult.
  • We move fast.  Open source DBAs, even in large enterprises, are always “moving the needle” towards higher performance, making changes as fast as our tools, our applications, and our organizations allow.
  • We strive for answers.  Open source DBAs are never satisfied by answers to (even old) questions in our technologies.  “One source of truth” is almost never the case.
  • We are collaborators.  We work together across team lines within our companies, and across companies in the community, to broaden our understanding.  We work across technologies to find the “best solution for the task”.
  • We are facilitators of change, not barriers to change.

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 스크립트 자유롭게 수정해서 나만의 케이스 만들어 볼 수 있겠음