2012-10-17 5 views
0

여러 호스트의 일부 테이블에 대량 레코드를 삽입하는 응용 프로그램이 있습니다. 문제는 하나의 테이블에 여러 레코드를 삽입하는 동안 테이블을 잠그고 다른 스레드는 완료 될 때까지 기다려야한다는 것입니다. 여러 스레드가 사용자 대기없이 동일한 테이블에 삽입을 커밋 할 수있는 방법이 있습니까? mysql에서 우리가 이것을 달성 할 수있는 방법이 있습니까? 다른 말로하면, 다중 스레드에서 대량으로 동시에 대량 삽입 할 수있는 mysql의 방법입니다. 삽입이 진행되는 동안 테이블을 업데이트하거나 같은 테이블의 여러 스레드에서 대량 업데이트를 허용하거나 허용하지 않습니다.mysql에 동시 삽입?

우리가 mysql에서 이것을 달성 할 수있는 방법이 있습니까?

감사합니다,

Nitesh 쿠마

+3

InnoDB 엔진을 사용하면 MyISAM과 같이 테이블 레벨의 행 레벨 잠금 장치를 제공합니다. –

+0

Innodb을 사용하고 있습니다. –

답변

1

은 이노와 MySQL은 고속 삽입을위한 good article 있습니다. 나는 그것을 통해 당신을 추천합니다.

기준의 일부 :

먼저 MySQL을 5.5 이노 디비 플러그인 우리가 40 % + CPU가 (OProfile은 당) 뮤텍스 스핀 락 낭비 볼 수있는 8 개 개의 동시 스레드의 MySQL 5.5.8에서 약 15 %로 내려 갔다 . 이 두 가지 모두 상당한 성능 향상을위한 여지는 물론 상당한 이익이 있음을 보여줍니다. Dmitri에는 MySQL 5.5 튜닝에 대한 좋은 제안이 있습니다. innodb_buffer_pool_instances=8과 함께 여러 버퍼 풀을 사용하는 것이 매우 중요했습니다.

두 번째 것 - 파티션. 불행하게도 MySQL 5.5는 쓰기 작업 부하에 대한 막대한 병목 현상을 남기고 있습니다. 인덱스 당 rw 잠금이 있기 때문에 한 번에 하나의 스레드 만 인덱스 항목을 삽입 할 수 있습니다. 이로 인해 심각한 병목 현상이 발생할 수 있습니다. 우리는 해쉬 partitioning 테이블 중 하나에 의해 2x + 더 나은 성능을 얻었고 나는 더 많은 코어로 이득이 더 높아질 것이라고 기대할 것입니다. PARTITION BY HASH (col) PARTITIONS 8은 우리가 사용한 것입니다. 이는 좋은 해결 방법 인 것처럼 보이지만 분할이 선택 쿼리의 성능에 큰 영향을 미칠 수 있음을 기억하십시오.