* 결론
- innoDB의 버퍼풀 사이즈가 충분해야 innoDB의 성능이 나온다
- innoDB가 버퍼풀이 충분하다면 MyISAM보다 성능이 더 좋다.
- 쿼리 튜닝및 제한이 선행되야한다. (인덱스 최적화 등)
*. 테스트
- 파일소트, 풀스캔 등등이 많아서 MyISAM을 InnoDB로 테이블 1개를 복사해서 쿼리 테스트
- 약 2G의 데이터 사이즈.
- MyISAM에서 4.183 sec짜리 select count(*) 는 innoDB에서 0.965초 (인덱스 상황 똑같음)
- 다만 innoDB가 버퍼에 올라가 있지 않은 경우 읽어오리기 때문인지, 초기 속도가 느리다.
- myisam 에서 파일 소트해서 목록 가져오는 것은 기본 인덱스로는 이상하게 느려져서 풀스캔하도록 강제로 변경해서 동작 -> 파일소트 1.47초
innoDB에서는 기본 인덱스 계산으로 타게함 -> 파일 소트 없음 1.243 초
*. 문제점
- innoDB의 버퍼풀사이즈가 작다. 4G인데도..계속 100% 사용중이다.
- 8G로 늘려서 다시 테스트 해보고 싶은데, 운영 DB라서 이부분은 이후 일정 잡고 다시 진행 해보자.
- 버퍼풀 100%라서 경합이 일어나 조금만 휴식을 줘도 버퍼풀에서 테스트 하던 테이블 정보가 내려가 버린다.
- 현재 상황에서 디스크 용량 이슈도 있어서 많은 테이블 변경은 불가하다.
*. 개선할점
- 버퍼풀 사이즈를 확보하자
- 설정을 늘리던지, log 성 테이블(불필요하게 버퍼를 차지하는)을 innoDB에서 제거하던지 하자
- 버퍼풀 사용량을 70~80%대로 유지해야한다.(현재 100%)
- 디스크를 좀 더 큰 걸로 바꾸자
- 서버 이전 시 현 디스크의 1.5에서 2배까지는 보유해야한다.
- my.conf 설정 최적화 하자
- 기본 설정으로 된 것이 많아서 지금 손댈 수 없는 것들이 많다.
- 서버 이전 때 변경하자. (사전 테스트 필수)
- DBMS 업그레이드 하자.
- 버전이 너무 낮아서 뭘 체크하고 싶어도 지원이 안되네.
- 파티셔닝 생각하자, 2G의 데이터는 한번에 처리하기에 너무 크다. 분산 시키면 좀 더 효율적으로 읽어 올것이다.
- 다만 이건 사용 쿼리에 맞춰 처리해야해서... 내가 손 댈 수가 없네
- 테스트가 필요하다.
*. 모니터링 값
SQL > SHOW ENGINE INNODB STATUS;
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 4739128146; in additional pool allocated 1046528
Dictionary memory allocated 1667512
Buffer pool size 262144
Free buffers 95
Database pages 252214
Modified db pages 171273
Pending reads 1
Pending writes: LRU 0, flush list 0, single page 0
Pages read 380231238, created 2269116, written 83571969
1179.09 reads/s, 2.57 creates/s, 908.34 writes/s
Buffer pool hit rate 997 / 1000
# vmstat 1
wa 시간이 간간히 보이지만, 무시하자.
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 129404 137404 131896 8968552 0 0 6812 796 11082 6909 21 10 69 0 0
5 0 129404 110752 131896 8994344 0 0 9668 716 9931 4990 21 9 70 0 0
6 0 129404 113992 131896 8992004 0 0 12468 4764 9912 4832 19 9 71 1 0
6 0 129404 97228 131908 9007236 0 0 9936 5976 8904 4076 22 11 67 0 0
6 1 129404 90640 131908 9014356 0 0 8892 852 10142 4424 26 14 60 0 0
4 0 129400 84580 131908 9021100 0 0 8220 724 12552 6052 24 13 63 1 0
5 0 129400 82836 131900 9022836 0 0 7436 868 9349 4670 20 8 71 1 0
7 1 129400 89896 131900 9014484 0 0 8268 936 12491 6932 25 12 63 1 0
8 0 129400 82836 131908 9021372 0 0 4936 808 14478 8271 34 15 50 0 0
# free -m
8GB는 더 설정할 수 있다. (8G를 전부 설정하면 안된다! 스왑 쓰게되어 역 효과다)
total used free shared buffers cached
Mem: 15886 15807 79 0 128 8810
-/+ buffers/cache: 6867 9019
Swap: 2047 125 1922