MyISAM과 InnoDB 간단 테스트

* 결론

  1. innoDB의 버퍼풀 사이즈가 충분해야 innoDB의 성능이 나온다
  2. innoDB가 버퍼풀이 충분하다면 MyISAM보다 성능이 더 좋다.
  3. 쿼리 튜닝및 제한이 선행되야한다. (인덱스 최적화 등)

 

*. 테스트

  1. 파일소트, 풀스캔 등등이 많아서 MyISAM을 InnoDB로 테이블 1개를 복사해서 쿼리 테스트
  2. 약 2G의 데이터 사이즈.
  3. MyISAM에서 4.183 sec짜리 select count(*) 는 innoDB에서 0.965초 (인덱스 상황 똑같음)
  4. 다만 innoDB가 버퍼에 올라가 있지 않은 경우 읽어오리기 때문인지, 초기 속도가 느리다.
  5. myisam 에서 파일 소트해서 목록 가져오는 것은 기본 인덱스로는 이상하게 느려져서 풀스캔하도록 강제로 변경해서 동작 -> 파일소트 1.47초
    innoDB에서는 기본 인덱스 계산으로 타게함 -> 파일 소트 없음 1.243 초

 

*. 문제점

  1. innoDB의 버퍼풀사이즈가 작다. 4G인데도..계속 100% 사용중이다. 
    1. 8G로 늘려서 다시 테스트 해보고 싶은데, 운영 DB라서 이부분은 이후 일정 잡고 다시 진행 해보자.
  2. 버퍼풀 100%라서 경합이 일어나 조금만 휴식을 줘도 버퍼풀에서 테스트 하던 테이블 정보가 내려가 버린다.
    1. 현재 상황에서 디스크 용량 이슈도 있어서 많은 테이블 변경은 불가하다.

 

*. 개선할점

  1. 버퍼풀 사이즈를 확보하자
    1. 설정을 늘리던지, log 성 테이블(불필요하게 버퍼를 차지하는)을 innoDB에서 제거하던지 하자
    2. 버퍼풀 사용량을 70~80%대로 유지해야한다.(현재 100%)
  2. 디스크를 좀 더 큰 걸로 바꾸자
    1. 서버 이전 시 현 디스크의 1.5에서 2배까지는 보유해야한다.
  3. my.conf 설정 최적화 하자
    1. 기본 설정으로 된 것이 많아서 지금 손댈 수 없는 것들이 많다.
    2. 서버 이전 때 변경하자. (사전 테스트 필수)
  4. DBMS 업그레이드 하자.
    1. 버전이 너무 낮아서 뭘 체크하고 싶어도 지원이 안되네.
  5. 파티셔닝 생각하자, 2G의 데이터는 한번에 처리하기에 너무 크다. 분산 시키면 좀 더 효율적으로 읽어 올것이다.
    1. 다만 이건 사용 쿼리에 맞춰 처리해야해서... 내가 손 댈 수가 없네
    2. 테스트가 필요하다.



*. 모니터링 값


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

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📅 달력형