2010-04-21 3 views
1

My MysQL 데이터베이스에는 여러 개의 MyISAM 테이블이 있으며 각 테이블에는 수백만 개의 행이 들어 있습니다. 데이터베이스에 삽입로드가 많아서 라이브 데이터베이스에서 SELECT를 발행 할 수 없습니다. 대신 쿼리를위한 데이터베이스의 복제본을 만들고 이에 대한 분석을 수행합니다.MySQL InnoDB는이 시나리오에 적합한가?

분석을 위해 여러 개의 병렬 쿼리를 실행해야합니다. 쿼리는 독립적 (즉, 쿼리의 결과는 함께 결합되지 않음)이지만 대부분 동일한 시간대에 동일한 테이블에서 작동합니다. 내가 아는 한, 전체 MyISAM 테이블은 각 쿼리에 대해 잠겨 있기 때문에 병렬 독립 쿼리가 느려질 것입니다. 이상적으로, 나는 "잠글 수 없음 (NO LOCKING)"을 지원하는 엔진을 선호합니다. MySQL이 그런 엔진을 가지고 있다고 가정하고 있으므로 InnoDB를 사용해야합니까? 나는 여기서 많은 것을 놓칠지도 모른다. 여기에 올바른 길을 제시하십시오.

감사

답변

1

MyISAM 읽기 잠금은 호환, 그래서 SELECT 쿼리는 서로를 잠글 수 없습니다.

복제본 데이터베이스에 대한 분석 쿼리를 쓰지 않고 읽기만 수행하면 MyISAM을 사용할 수 있습니다.

1

당신의 MyISAM에 충실하고 사용할 수 INSERT DELAYED :

클라이언트가 INSERT DELAYED 사용합니다

, 그것은 한 번에 서버에서 괜찮은를 가져오고 테이블이 아닌 경우 행이 삽입 대기 다른 스레드가 사용합니다.

INSERT DELAYED를 사용하는 또 다른 주요 이점은 많은 클라이언트의 삽입이 함께 묶여 하나의 블록으로 작성된다는 것입니다. 이것은 많은 별도의 인서트를 수행하는 것보다 훨씬 빠릅니다.

관련 문제