2009-11-13 5 views
5

이 질문은 이전 질문의 연속과 같습니다. Am I right that InnoDb is better for frequent concurrent updates and inserts than MyISAM?테이블이 MyISAM에서 InnoDb로 변경 될 때가 되었습니까?

하지만 이번에는 구체적인 질문이 있습니다.
많은 동시 업데이트 (삽입)가없는 경우 MyISAM이 InnoDb보다 빠르다는 것을 알고 있습니다. 동시 업데이트가 많은 경우 MyISAM 테이블이 잠기고 다른 모든 클라이언트가 대기해야합니다.

1)하지만 MyISAM에서 InnoDb로 변경해야하는시기는 언제입니까? 1 초마다 1 번 업데이트합니까? 10 초마다 업데이트됩니까? 1 초마다 100 번 업데이트됩니까?
2) 구체적인 예를 들면, 보통 다른 웹 사이트에서 분당 몇 가지 업데이트가있는 웹 사이트의 표 중 하나를 InnoDb로 변경하는 것이 더 낫겠지 만 때로는 2-3 회의 업데이트가있을 수 있습니다 둘째?

답변

3

귀하의 질문에 귀하가 언급 한 이전 질문에서 거의 대답했다고 생각합니다.

1) 테이블을 만들 때. InnoDB는 단순히 행 레벨 잠금보다 많은 이점을 제공합니다. 업데이트를 수행하는 여러 SQL 클라이언트가있는 경우 속도가 빠르며 데이터 손실/손상 위험이 적고 참조 무결성이 떨어집니다. TPS (초당 트랜잭션 수)가 적기 때문에 성능 차이는 분명하지 않지만 InnoDB 더 안정적이며 더 잘 확장됩니다.

2) 2-3 TPS만으로도 InnoDB와 MyISAM 사이에 큰 차이가 나타나지 않습니다. 반 고대 하드웨어에서도.

참고로 최신 디스크 드라이브는 초당 ~ 200 건의 업데이트 트랜잭션을 처리 할 수 ​​있어야합니다.

나는 InnoDB, MVCCACID을 읽는 것이 좋습니다.

+0

나는 InnoDb의 장점을 이해하지만 공유 웹 호스팅에서 성능과 "밝기"가 우선 순위라고 생각한다. 그렇지 않으면 나는 항상 InnoDb를 항상 사용할 것입니다. – nightcoder

+0

@nightcoder : 그러면 항상 InnoDB를 사용해야합니다. 큰 그림에서, 그것은 MyISAM보다 "더 가볍습니다". – tommym

1

가능한 경우 한 테이블 씩 변경할 필요가 없습니다.

전체 서버를 변경하십시오. 그렇게하면 myisam-workload가 아닌 innodb 전용 작업 부하에 맞게 서버를 조정할 수 있습니다. 두 개는 서로 호환되지 않습니다 (메모리 버퍼는 특정 엔진에 할당되며 메모리를 공유 할 수 없습니다).

16G 램을 가지고 있다고 가정하면, MyISAM 테이블이 없다면 innodb 버퍼 풀에 약 12G를 사용하고 싶을 것입니다.

마찬가지로 MyISAM 테이블 만있는 경우 innodb를 완전히 끄고 myisam 키 캐시에 절반 이하 (예 : 6G)를 부여해야 할 수 있습니다.

혼합 된 myisam-innodb 서버는 메모리 조정을 절충해야합니다.

또한 테이블을 변경할 때마다가 아니라 한 번만 성능 테스트를 수행하려고합니다.

"MyISAM이 InnoDb보다 빠르다는 것을 알고 있습니다."라고 말하는 것은 종종 단순화 된 것보다 훨씬 단순합니다.

서버용으로 적절하게 InnoDB를 튜닝하고 적절한 서버 등급 하드웨어를 실행하는 경우 InnoDB는 대부분의 쿼리에서 MyISAM과 경쟁 할 수 있어야합니다 (전체 테이블 스캔은 제외하지만, 권리).

귀하의 데이터가 "사소한 농담"크기가 아니라면 말입니다.

innodb의 삽입/업데이트 속도가 훨씬 느리다면 내구성이 훨씬 우수하다는 것을 명심하십시오. MyISAM과 거의 동일한 내구성을 가지면 잘하면 성능이 좋을 것입니다 .

+0

글쎄, 우리의 주 서버에서 우리는 InnoDb만을 사용합니다. 하지만 공유 호스팅의 웹 사이트에 대해 묻는 중입니다. 공유 호스팅의 MySql 서버가 모든 호스팅 사용자의 모든 데이터베이스에 공통된 설정을 가지고 있기 때문에 아이디어가 실제로 적용되지 않는 것 같습니다. – nightcoder

+0

공유 호스팅을 사용하는 경우 성능을 기대할 수 없습니다. 귀하의 데이터베이스가 작기를 바랍니다. 그렇지 않으면 성능이 저하 될 것입니다. 공유 호스팅을 사용하면 바쁜 사이트 나 대규모 데이터베이스를 호스팅 할 수 없습니다. 이러한 사이트에서 성능은 일반적으로별로 중요하지 않습니다. – MarkR

+0

음, 우리는 매일 500Mb의 데이터베이스와 수백 명의 방문자를 보유하고 있습니다. 쿼리는 충분히 복잡 할 수 있습니다. 하지만이 사이트는 괜찮습니다. 어쩌면 우리 호스텔과 운이 좋을 수도 있습니다. – nightcoder

관련 문제