시스템이야기2012. 6. 26. 19:20

전직 페이스북(facebook) 개발자 Eric Frenkiel과 Nikita Shamgunov가 만든 MemSQL.



MemSQLMemSQL


1. 특징을 간단히 살펴보자.

1) 개발자가 주장하기는  MemSQL 개발자에 따른 disk기반 DB보다 30배까지 빠르다고 한다.
   MemSQL은 초당 8만쿼리를 처리했고 MySQL은 초당 3천500쿼리를 처리해서 MySQL보다는 23배 빠르다고.

2) MemSQL은 메모리에 데이터를 유지하고 있어서 빠른 성능을 달성했다.

페이스북이 PHP코드를 C로 변환하여 성능을 향상시켰는데, 이 때 PHP -> C++로 변환한 툴이 'HipHop'이다. 이 HipHop툴처럼 MemSQL은 SQL을 C++로 변환하여
성능을 급격히 높였다. 개발자인 Frenkiel은 이렇게 말했다. "This is like HipHop for SQL"

3) MemSQL은 MySQL API와 인터페이스를 사용한다.

그래서 관리적 이슈도 없고, 어떤것도 새로 배울 것이 없다.

4) 하지만, 아직 지원 안되는게 있다. 그래도 나온지 얼마안된 DB가 위의 말대로의 성능만 내준다면, 앞으로 엄청난 물건이 될게 분명하다.

* UNSUPPORTED FEATURES


- Views
- Prepared Queries
- Stored procedures
- User Defined Functions
- Triggers
- Foreign keys
- Charsets other than utf8



5) MemSQL 투자자에 애쉬튼 커쳐(Ashton Kutcher)가 있다.

애쉬튼 커쳐는 IT에 관심이 많은 것 같다. 사진 공유 SNS인 Path(※ Path 공동창업자 중의 한명이 냅스터의 공동차업자 '숀 패닝')에도 투자를 했다. flipboard에도 투자하고.

2. 실제 사용해보기

MemSQL 사이트( http://memsql.com/ )에서 메일주소 입력하고 다운로드 받으면 된다.

- 64비트만 지원
- RHEL(또는 CentOS)의 경우 6.0 이상

바이너리 받아서 압축만 풀면 끝. 그리고, MySQL client 로 접속하니 정말 잘 되더라.


# ./memsqld -u root --port 3307 & <-- MemSQL 데몬 실행
#
# mysql -u root -h 127.0.0.1 -P 3307 --prompt="memsql> "
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 250
Server version: 5.5.8 MemSQL source distribution



쿼리를 실행하면 아래처럼 쿼리를 C++로 컴파일하게 된다. 그래서 초기 쿼리는 실행시간이 좀 걸리고, 그 이후는 MySQL보다 나은 성능을 보인다.
아래 'miliseconds'숫자는 생각보다 높긴한데, 실제 운영하는 DB서버라면 훨씬 낮은 수치를 보일 것이다.
맛보기 테스트를 하려고 듀얼코어, 4G 서버에서 설치한 것이다.


1688649195 2012-06-26 16:22:23 INFO: Query test.'select count(*) from test2' compiled in 669 miliseconds
2140046715 2012-06-26 16:29:55 INFO: Query test.'INSERT INTO test2(name, date) values (?, now())' compiled in 1369 miliseconds
3317465154 2012-06-26 16:49:32 INFO: Query test.'select name from test2 where id = @' compiled in 714 miliseconds
9867440156 2012-06-26 18:38:42 INFO: Query test.'update test2 set name = ^ where id = @' compiled in 1390 miliseconds


3. 성능은?

- php 5.3에서 microtime으로 시간 체크. 각 쿼리별로 5만회 실행한 시간 체크. 테스트는 3회씩.
- insert : INSERT INTO test2(name, date) VALUES ('aaaaa', now())
- select : SELECT name FROM test2 WHERE id = $i
- update : UPDATE test2 SET name = 'bbbbb' WHERE id = $i

테스트 환경은?

- 설정 튜닝이 제대로 되지 않은 상태에서 테스트가 이뤄졌고,
- MemSQL의 권장 메모리인 8G보다 적은 4G에서 테스트를 했다.
- 서비스에 투입할 수도 없는 상황이고,
- 서비스 환경에 근접하게 테스트 요청을 할 수도 없으므로

아래 수치는 성능이 MySQL보다 낫긴 낫구나라는 정도로만 이해해야 한다. 절대적인 것으로 봐서는 안된다. 정말 참고만.
수치상으로는 1.5~2배정도. 아래 수치 단위는 초.
서비스에서는 쿼리도 복잡하고, 다양한 쿼리가 한꺼번에 이뤄지므로 오히려 테스트 결과보다 성능이 더 나을 수 있을 것 같다.


1. INSERT

MemSQL 2.715 2.371 2.491
MySQL  4.004 3.974 3.982

2. SELECT

MemSQL 2.484 2.772 2.741
MySQL  4.271 4.296 4.088

3. UPDATE

MemSQL 2.380 2.527 2.177
MySQL  4.283 3.975 3.968


* 참고글 :
  Ex-Facebookers launch MemSQL to make your database fly (2012.6.18)

Posted by 좋은진호

댓글을 달아 주세요

시스템이야기2009. 6. 8. 12:41
MySQL 설정값(my.cnf) 튜닝하는게 어려웠죠? 그 튜닝값이 내 환경이 맞는 것인지도 확인하기 어려웠죠?
MySQL의 설정값이 현재 운영중인 환경에 적합한지를 쉽게 판단할 수 있도록 도와주는 스크립트가 있다.
MySQL Performance Tuning Primer Script 에서 Download 받을 수 있다.

이 스크립트는 "SHOW STATUS LIKE..."와 "SHOW VARIABLES LIKE..."정보를 얻어낸다. 바로 이 설정값과 운영에 따라 나온 수치를 비교하여 적정한 값을 권장해준다. DB서버는 반드시 운영중이어야 하며, 최소 2일 이상 운영한 상태를 권장하고 있다. 스크립트는 Linux, Solaris, FreeBSD, MacOS에서 사용 가능.

  • DB 업타임, 평균 QPS
  • Slow Query Log
  • Max Connections
  • Worker Threads
  • Key Buffer
  • Query Cache
  • Sort Buffer
  • Joins
  • Temp Tables
  • Table (Open & Definition) Cache
  • Table Locking
  • Table Scans (read_buffer)
  • Innodb Status  (사용중인 경우만)

결과는 몇초만에 나온다.

mysql tuning

[ MySQL Performance Tuning Primer Script 결과 일부 ]



Posted by 좋은진호

댓글을 달아 주세요

  1. debian 에 포함되어있는 mysqltuner 과 비슷한 스크립트인가 보군요...

    퍼가기로 퍼 갑니다.

    2009.06.11 10:11 [ ADDR : EDIT/ DEL : REPLY ]
    • debian에는 mysqltuner( http://wiki.mysqltuner.com/MySQLTuner )가 들어있나보군요. mysqltuner보다는 이 스크립트 결과 표시가 더 나은 듯. 아무튼 이런류의 스크립트로 설정 튜닝을 하고, 그 후 query, index, ... 등의 튜닝을 하면 효과가.

      다음 view 퍼가기로 하신거군요.

      2009.06.12 13:06 신고 [ ADDR : EDIT/ DEL ]
  2. 댓글기부

    댓글 한개에 200원 기부.. 좋네요. ^^;

    2012.01.20 15:02 [ ADDR : EDIT/ DEL : REPLY ]
    • 예. 감사합니다.
      그런데 댓글만으로는 기부금액이 적어서,
      댓글과 상관없이 일정 금액을 하고 있어요. ^^

      2012.01.25 18:14 신고 [ ADDR : EDIT/ DEL ]

IT이야기2008. 4. 16. 17:20
Santa Clara에서 열리고 있는 'MySQL Conference & Expo'에서 Sun은 MySQL 5.1이 정식버전(GA, General Availability)으로 될 것이라고 발표했다. 지금까지 정식버전(GA)은 5.0이며, 5.1은 RC(Release Candidate)버전 상태이다. 그만큼 5.1버전이 그만큼 5.1버전이 안정 상태에 접어들었다는 의미이다. 5.1 정식버전은 이번 분기말에에 나올 예정이다. 또한 MySQL Community Server, Enterprise Server, Embedded Server 등 3종류로 발표된다.

사용자 삽입 이미지

5.1은 5.1.23까지 나와 있고, 5.1 정식버전에 가장 가까운 상태의 RC 버전은 http://dev.mysql.com/downloads/ 에서 받을 수 있다.

http://www.mysql.com/news-and-events/press-release/release_2008_14.html
http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080415.1.xml (2개 URL모두 같은 내용)

* Table and Index Partitioning
* Row-Based and Hybrid Replication
* Event Scheduler
* New Upgrade Advisor in MySQL Enterprise Monitor


파티셔닝은 오라클 DB 등을 사용해보신 분은 알 것이다. 하나의 table인데, 물리적 DB파일은 여러개로 쪼개서 저장 가능하는 것. 예를들어 table은 하나인데, 2007년과 2008년이 다른 DB파일로 저장될 수 있다.
결국 select할 때 2007년을 조건으로 줄 경우에, 통 DB파일보다 빠른 결과를 얻을 수 있다.

그리고, row기반 리플리케이션. 현재까지는 DB전체 리플리케이션만 가능했다.

이벤트 스케쥴러는 DB내의 cron으로 이해하면 될 것이다. DB내에 주기적으로 반복되는 일을 스케줄러에 등록해주면, 자동으로 실행이 된다. 자정에 통계정보를 일괄처리해야 할 경우 스케줄러에 넣어주면 될 것이다.

Sun 발표내용에서는 웹크롤러인 spinn3r.com에 대한 얘기도 있다. spinn3r.com MySQL 5.1을 사용중이며, 대략 1일 1800만 URL을 인덱싱하고 있다.

We're using MySQL 5.1 in production for a Weblog discovery code database which indexes approximately 18 million URLs per day," said Kevin Burton, founder and CEO of Spinn3r.com.

덧붙여서 4월 29일(화) 그랜드 인터컨티넨탈 호텔에서 'Sun/MySQL Korea Launching Seminar'( http://www.theseminar.co.kr/sun/ )가 있다. 무료 세미나에 무료 주차권 제공. 덤으로 티셔츠까지. ^^

Posted by 좋은진호

댓글을 달아 주세요

  1. 알 수 없는 사용자

    파티셔닝기능이 눈에 띄네요.

    2008.04.17 15:43 [ ADDR : EDIT/ DEL : REPLY ]