2013-10-28 5 views
1

INSERT..ON DUPLICATE KEY UPDATE를 사용하여 여러 행 (일괄 처리)을 업데이트하는 중 교착 상태가 발생했습니다. MySQL은 모든 행을 하나의 일괄 처리로 잠 그거나, 한 번에 업데이트 할 행만 잠급니다. MySQL Developer Doc 따르면INSERT..ON DUPLICATE KEY UPDATE 문에서 잠금은 어떻게 작동합니까?

+0

http://dba.stackexchange.com/ –

+1

에 대한 더 나은 질문입니다. 자동 커밋을 사용하지 않으면 MySql은 모든 터치 된 행에 잠금을 설정하고 커밋 할 때 배치 된 잠금을 해제합니다. 교착 상태를 피하려면 레코드를 일관된 순서로 삽입하십시오 (삽입하기 전에 기본 키 값으로 레코드 일괄 처리). – krokodilko

답변

0

:

MySQL은 5.6.6, INSERT ... 이전의 모든 파티션을 고정 테이블 레벨 잠금을 이용하는 등의 MyISAM 같은 저장 엔진을 사용하여 파티션 테이블 DUPLICATE KEY UPDATE ON 표. (행 수준 잠금을 사용하는 InnoDB와 같은 저장소 엔진을 사용하는 테이블에서는 발생하지 않았으며 발생하지 않음) MySQL 5.6.6 이상에서는 이러한 키가있는 파티션 키 키가 업데이트 된 파티션 만 잠급니다. 자세한 정보는 18.6.4 절. "파티션 및 잠금"을 참조하십시오.

InnoDB은 인덱스를 사용하고 테이블 수준 잠금을 피할 것입니다 (테이블이 너무 작아서 MySQL이 테이블 수준 잠금을 직접 사용하지 않는 한).