포럼
myISAM vs innodb
2012.08.18 00:23
저의 경우에는 xe 최초 정식버전 사용할 때 부터 innodb를 사용했습니다.
그 이유는 웹 환경에서는 myISAM 보다는 innodb가 유리하다는 판단을 했기 때문입니다.
그런데 속도면에서 innodb가 myISAM보다 빠른가?
꼭 그렇지만은 않습니다.
정확한 버전은 생각나지 않지만 오래전 innodb 가 처음 발표되었을 때 테스트 해본 적 있습니다.
그때 결론은 "실 사용할 수 없다" 였습니다.
속도가 너무 느렸습니다.
그러던 중 xe가 innodb를 지원하기에 서버도 센트5 로 새로 구축된 상태라 mysql5.0에서 myISAM과 innodb로 테스트해보았습니다.
테스트라고 해봐야 myISAM과 innodb로 xe를 각각 설치한 상태에서 체감속도를 비교해 본 것 뿐입니다.
결론은 비슷하거나 innodb가 조금 느린 느낌이었습니다.
그런데 왜 innodb를 사용하기로 결정했을까요
innodb가 myISAM보다는 웹환경에서는 확실히 장점이 있다는 판단입니다.
그리고 innodb는 계속 발전해 나갈 것이니까요
관련 기술문서를 꽤 많이 읽었었는데 다 기억은 못하고 몇가지만 기술하면 다음과 같습니다.
첫째는 myISAM은 table-level lock으로 DML을 처리하고 innodb는 row-level lock 으로 처리한다는 것입니다.
이것은 많은 동시접속자가 게시글과 코멘트를 입력, 수정할 때 하나의 documents 테이블과 comments 테이블을 사용하는 xe에 있잇어서는 큰 장점이 됩니다.
둘째는 쿼리 캐시인데
myISAM은 쿼리캐쉬메모리를 늘리는 것만큼 비례해서 성능이 늘어나지 않습니다.
쿼리케시 히트율이 그리 효율적이 아니기 때문입니다.
같은 쿼리라도 토씨 하나라도 틀리면 사용할 수 없고 테이타가 입력, 수정될 때마다 쿼리케시를 flush시키기 때문입니다.
결국 myISAM은 고성능의 cpu와 고용량의 메모리보다는 빠른 하드디스크가 성능 향상에 도움이 된다는 것입니다.
이에 비하여 inno디비는 innodb buffer pool에 데이타와 인덱스를 캐시해두고
관련된 색인과 데이타가 있으면 캐시된 데이타를 활용하고 자주 사용되는 데이타는 버퍼에 남겨 두고 적게 사용되는 캐시에서 삭제, 자주 쓰이는 데이타로 캐시를 교체하는 메카니즘을 갖고 있기 때문입니다.
따라서 cpu의 코어수가 늘어날수록 메모리양이 충분할수록 성능이 비례해서 향상된다는 것입니다.
지금은 mysql5.5 innodb를 사용하고 있는데 myISAM과 비교는 해보지 않았지만 체감상 사이트가 느리지는 않습니다.
고비용스펙에 투자하는 것보다는 ssd의 안정성이 확보된다면 myISAM에 ssd를 사용하는 것이 성능향상에 더 기여 할 수도 있겠으나
고성능의 서버에 충분한 메모리를 확보할 수 있다면 innodb가 더 나을 것이라는 것이 개인적인 소견입니다.
여담:
1. mysql을 ssd에 설치하는 것이 유행처럼 되었는데 확실히 myISAM에서는 효과가 있는가 봅니다.
2. xe가 많이 최적화 되긴 하였지만 디비 특성에 맞게 더욱 쿼리가 최적화되었으면 하는 바람입니다.
댓글 4
-
delphiXE2
2012.08.18 03:22
-
criuce
2012.08.18 12:24
innodb 또다른 장점으로는 트랜잭션 지원에 있습니다.
사실 트랜잭션 지원 안하는 mysql은 기존에 dba들로부터 db취급도 못받았었거든요.
-
cherryfilter
2012.08.20 09:40
단순 벌크 테스트는 myisam이 더 유리할 수 있습니다.
다만 웹이란 환경이 벌크 테스트랑 다르게 수많은 비즈니스로직이 녹아 들어가 있기 때문에, innoDB가 결과적으로 유리할 수 밖에 없는 거죠 ^^
-
루아틱™
2012.08.20 18:00
저도 알기론 5.5 에서의 innodb 성능 myisam보다 월등한걸로 압니다. 적은 데이터 보다 많은 데이터를 이용해서 테스트해보세요 어느쪽이 빠른지?
다시 테스트 해 보십시오. 특히 5.5라니..
5.5에서 InnoDB의 성능은 주목할 만한 수준입니다.