MySQL에서 Lock wait timeout 초과 오류가 발생할 때 잠금을 유지한 특정 쿼리를 식별하는 방법
소개:
MySQL의 잠금 대기 시간 초과 오류는 쿼리를 시도하는 동안 잠금 대기 시간 초과가 발생했음을 나타냅니다. 잠긴 리소스에 액세스합니다. 이는 여러 쿼리가 동일한 데이터에 액세스하고 충돌하는 잠금으로 인해 하나의 쿼리가 다른 쿼리의 실행을 차단하는 시나리오에서 발생할 수 있습니다. 잠금 대기를 유발하는 특정 쿼리를 확인하면 문제를 해결하고 향후 발생을 방지하는 데 도움이 될 수 있습니다.
범인 쿼리 식별:
오류 로그에서 " 트랜잭션"은 데이터베이스에 액세스하려는 쿼리가 하나 이상의 InnoDB 테이블을 수정하고 있음을 나타내는 주요 지표입니다. 오류를 발생시킨 쿼리를 알면 관련 테이블을 식별할 수 있습니다.
SHOW ENGINE INNODB STATUSG 명령을 사용하면 영향을 받은 테이블과 잠금 상태에 대한 정보를 얻을 수 있습니다. 이 명령은 다음을 포함한 자세한 정보를 표시합니다.
출력 예:
The SHOW ENGINE INNODB STATUSG의 다음 출력은 특정 쿼리가 단독 잠금을 기다리고 있음을 보여줍니다. 첨부 테이블:
RW-excl spins: 787046, OS waits: 39353 ... Latest foreign key error (a full list is printed in the InnoDB error log when a foreign key error occurs): ... Transaction: TRANSACTION 0 606162814, ACTIVE 0 sec, process no 29956, OS thread id 1223895360 updating or deleting, thread declared inside InnoDB 499 mysql tables in use 1, locked 1 ... Foreign key constraint fails for table `backoffice`.`attachment`: , CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`file_id`) REFERENCES `file` (`file_id`) Trying to delete or update in parent table, in index `PRIMARY` tuple: ... But in child table `backoffice`.`attachment`, in index `PRIMARY`, there is a record:
해결 방법:
문제를 해결하려면 트랜잭션의 최대 시간을 지정하는 innodb_lock_wait_timeout 매개변수의 값을 늘릴 수 있습니다. 오류를 보고하기 전에 잠금을 기다리십시오. 이 시간 초과를 늘리면 트랜잭션이 완료되는 데 더 많은 버퍼 시간을 제공하고 잠금 시간 초과 오류 가능성을 줄일 수 있습니다.
innodb_lock_wait_timeout 설정:
시간 초과를 영구적으로 설정하려면 /etc/my.cnf에 다음 줄을 추가하고 다시 시작하세요. MySQL:
[mysqld] innodb_lock_wait_timeout=120
현재 세션의 시간 초과를 설정하려면 다음 쿼리를 실행합니다.
SET GLOBAL innodb_lock_wait_timeout = 120;
위 내용은 MySQL에서 '잠금 대기 시간 초과' 오류를 발생시키는 특정 쿼리를 식별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!