mysql에서 트랜잭션 격리 수준과 잠금에 관한 한 가지 질문이 있습니다.READ COMMITTED 잠금 대기 시간 초과가
나는 하나 개의 쿼리가 잠금 시간 제한 오류가 계속 있습니다
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
쿼리는 기본적으로 특정 date_id 레코드를 삭제하려고합니다. BTW, date_id뿐만 아니라 인덱싱됩니다. 하지만 대부분의 경우 일치하는 레코드가 없으므로 아무 것도 삭제하지 않습니다.
조사한 결과 같은 테이블에서 범위를 선택하는 범용 장기 실행 쿼리가 원인 일 수 있음을 발견했습니다. 그러나, 나를 혼란스럽게하는 것은 "READ COMMITTED"라는 격리 수준에서 트랜잭션을 실행하는 것입니다. 그래서 자물쇠가 필요한 이유와 타임 아웃 할 수있는 이유에 대해 전혀 알지 못합니다 (특히 일치하는 레코드가없는 것으로 간주하십시오)
감사합니다.
'SHOW INNODB STATUS'를 사용하여 어떤 종류의 SQL을 차단하는지 확인하십시오. –
InnoDb 테이블 또는 MyIsam 테이블을 사용합니까? MyIsam 작성자는 독자를 차단하고 반대의 경우도 간단한 SELECT 문을 사용하여 쿼리와 관련된 모든 테이블에 잠금을 설정하고 작성자를 차단합니다. – krokodilko