2013-07-13 8 views
2

저는 현재 InnoDB Engine 인 테이블이 있습니다. 10-20 연결은 끊임없이 이러한 테이블에 데이터를 삽입합니다. AWS에서 MySQL RDS 인스턴스를 사용합니다. 미터법은 약 300 개의 쓰기 IOPS (초당 횟수)를 보여줍니다. 그러나 INSERT 연산은 테이블을 잠그고 누군가가 SELECT COUNT(*) FROM table;과 같은 쿼리를 수행하고자한다면 MySQL이 결과를 캐시하기 전에 문자 그대로 처음 몇 시간이 걸릴 수 있습니다.MyISAM Engine으로 전환하면 읽기 작업 속도가 향상됩니까?

저는 DBA가 아니며 DB에 대한 지식이 매우 제한적입니다. 그래서 MyISAM Engine으로 전환하면 READ 작업 시간을 개선하는 데 도움이 될까요?

답변

1

InnoDB에 대한 잘못된 쿼리가없는 SELECT COUNT (*)는 MyISAM처럼 행 수를 캐시하지 않으므로 do. 따라서이 특정 쿼리에 문제가있는 경우 예를 들어 통계 테이블에 어딘가에 카운트를 캐시해야합니다.

이 특정 유형의 쿼리를 제거한 후에는 InnoDB와 MyISAM 읽기 성능에 대해 이야기 할 수 있습니다. 일반적으로 쓰기는 InnoDB의 읽기를 차단하지 않습니다. MVCC를 사용합니다. 그러나 InnoDB 성능은 버퍼 풀에 대해 설정 한 RAM의 양에 따라 크게 좌우됩니다.

InnoDB와 MyISAM은 데이터 저장 방식이 매우 다릅니다. 그 중 하나에 대해 항상 최적화 할 수 있으며 차이점이 애플리케이션 설계에 도움이 될 수 있음을 알 수 있습니다. 일반적으로 InnoDB 테이블에서 MyISAM과 같이 좋은 퍼포먼스를 가질 수있다. where 절없이 카운트를 사용할 수 있으며 InnoDB 테이블 스캔은 MyISAM보다 느릴 수 있으므로 where 절에 적합한 인덱스를 항상 가져야한다.

+0

고맙습니다. – Vor

1

나는 현재 설정을 고수해야한다고 생각합니다. InnoDB는 MVCC 기술을 사용하기 때문에 행을 삽입 할 때 테이블을 잠글 수 없습니다. 반면, MyISAM은 새로운 행이 삽입 될 때 전체 테이블을 잠급니다.

글을 많이 작성했다면, InnoDB를 고수해야한다.

1

Innodb는 전반적으로 더 우수한 전반적인 엔진입니다. 거기에 몇 가지 benchmarks가 inniasb 조금 앞에서 myiasm에 읽기 작업을 넣어 있습니다. 그러나 사이트가이 성능 차이를 느낄만큼 충분히 크다면 다른 모든 효율성으로 인해 여하튼 innodb에 있어야합니다. 데이터베이스를 백업 할 때 테이블 수준 잠금을 사용할 경우 행 수준 잠금 대신 Innodb 만 사용됩니다.