MySQL 대용량 데이터베이스 테스트 환경
테스트 환경
Intel Xeon (Quad) x2
RAM 8GB ECC
HDD MegaRAID / SA-SCSI x2 – RAID 1
CentOS 5.x + MySQL 5.0
환경 정보
1. 엔드 유저(클라이언트)의 수는 가변적이며 미들웨어에 요청을 보낸다.
2. 미들웨어는 2대의 서버로 클라이언트의 요청을 적절히 분배하여 DB서버로 전달해주는 역할을 한다.
3. DB 서버(1대)는 미들웨어에서 전달된 쿼리를 모두 처리한다.
4. MySQL의 데이터베이스와 테이블은 1개
5. 테이블 구조는 컬럼 5개, 인덱스는 단일컬럼 2개
테스트 목표
단일 DB 서버가 처리할 수 있는 한계를 가늠하기 위함
1. 초당 최소 1,000 ~ 3,000 건 이상의 쿼리를 처리할 것
2. 처리해야할 쿼리는 Insert (70%), Delete (30%)
3. 하루동안 삽입/삭제가 일어난 결과, 테이블에 누적되는 데이터량은 약 1천만건 내외
추가 목표
1. 원만하게 테스트가 진행될 시 포인트쿼리 수행으로 SELECT 성능 테스트
2. MyISAM, InnoDB, Memory(Heap) 타입의 테이블의 벤치마킹
테스트 방법
2대의 미들웨어에서 클라이언트의 요청을 받아 서버당 10개의 DB 컨넥션을 유지하며 Insert:Delete – 7:3의 비율로 실행됨. (DB 컨넥션은 총 20개로 고정)
테이블 구조
컬럼A – VARCHAR(10) : 인덱스 1
컬럼B
컬럼C
컬럼D – VARCHAR(64) : 인덱스 1
컬럼E
INSERT 쿼리 예시
INSERT INTO 테이블 VALUES (A,B,C,D,E),(a,b,c,d,e),(1,2,3,4,5),(!,@,#,$,%)….300개씩 반복
(미들웨어에서 클라이언트에게 입력값을 받아 300개씩 나누어 단일 INSERT 쿼리로 보냄)
DELETE 쿼리 예시
DELETE FROM 테이블 WHERE 컬럼D = ‘ABCDE!$%123559’;
SELECT 쿼리 예시
SELECT 컬럼B,컬럼C,컬럼E FROM 테이블 WHERE 컬럼A = ‘가나다라마바사’
테스트 진행 상황 및 결과에 대한 포스팅은 따로 정리해서 올리겠습니다.
아주 삽질에 삽질을..대운하 삽질했습니다..
공짜로는 대단한 제품인데 유상으로는 정말이지 욕나오는 DBMS ㅡ.ㅡ
결론 : 돈은 거짓말하지 않는다 ….
(근디 서버사양 좋다 우왕 부럽삼ㅋㅋㅋ)
Memory 타입 테이블은..성능이 아주 인상적이야..
초당 1,000건을 힘들어하던 놈이..
4-5,000건도 우습게 소화해버리더구만..