> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 '잠금 대기 시간 초과' 오류를 해결하는 방법은 무엇입니까?

MySQL의 '잠금 대기 시간 초과' 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-09 13:03:10
원래의
420명이 탐색했습니다.

How to Resolve MySQL's

MySQL에서 "잠금 대기 시간 초과" 오류를 디버깅하는 방법은 무엇입니까?

MySQL 로그에서 "잠금 대기 시간 초과" 오류가 발생하면 트랜잭션이 대기 중임을 나타냅니다. 데이터베이스 항목에 대한 잠금입니다. 어떤 쿼리가 데이터베이스에 액세스하려고 시도하는지 알 수는 있지만 정확한 순간에 잠금을 유지하는 쿼리를 결정하는 것은 어려울 수 있습니다.

범인 식별

"트랜잭션"이라는 단어의 존재 오류 메시지는 문제가 있는 쿼리에 하나 이상의 InnoDB 테이블에서 하나 이상의 행을 수정하는 것이 포함되어 있음을 나타냅니다. 오류를 일으키는 쿼리에 액세스할 수 있으므로 액세스 중인 테이블이 잠재적인 원인인지 확인할 수 있습니다.

SHOW ENGINE INNODB STATUSG 사용

자세히 조사하려면 다음을 실행하세요. 명령:

SHOW ENGINE INNODB STATUS\G
로그인 후 복사

이것은 잠금 및 뮤텍스에 대한 정보를 제공합니다. 포함:

  • 영향을 받는 테이블
  • RW 공유 잠금 회전
  • RW 전용 잠금 회전
  • Mutex 회전 대기
  • 행 잠금 정보
  • 실행 취소 로그 항목

출력 예

예를 들어 클라이언트의 다음 출력은 문제를 보여줍니다.

Type: InnoDB
Name:
Status:

=====================================
110514 19:44:14 INNODB MONITOR OUTPUT
=====================================

Per second averages calculated from the last 4 seconds
----------
SEMAPHORES
----------

Mutex spin waits 0, rounds 11487096053, OS waits 7756855

RW-shared spins 722142, OS waits 211221; RW-excl spins 787046, OS waits 39353

------------------------
LATEST FOREIGN KEY ERROR
------------------------

110507 21:41:35 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

14 lock struct(s), heap size 3024, 8 row lock(s), undo log entries 1

MySQL thread id 3686635, query id 124164167 10.64.89.145 viget updating
DELETE FROM file WHERE file_id in ('6dbafa39-7f00-0001-51f2-412a450be5cc' )

...
로그인 후 복사

이 출력에는 "file" 테이블이 나타납니다. DELETE 쿼리가 해당 테이블의 행을 수정하려고 시도하므로 영향을 받는 테이블이 됩니다. 출력을 분석하면 잠금 경합을 일으키는 특정 테이블을 정확히 찾아낼 수 있습니다.

잠금 대기 시간 초과 늘리기

향후 이러한 오류가 발생하지 않도록 하려면 잠금 대기 시간 초과를 늘리는 것이 좋습니다. innodb_lock_wait_timeout 매개변수를 설정하여 InnoDB의 값을 설정합니다. 기본값은 50초입니다.

시간 초과를 영구적으로 늘리려면 /etc/my.cnf 파일에 다음 줄을 추가하세요.

[mysqld]
innodb_lock_wait_timeout=120
로그인 후 복사

또는 시간 초과를 임시로 조정할 수도 있습니다. 현재 세션 내에서:

SET innodb_lock_wait_timeout = 120;
로그인 후 복사

시간 초과를 늘리면 대기 중인 트랜잭션에 잠금을 획득하는 데 더 많은 시간이 부여됩니다. 시간 초과 오류 가능성을 줄입니다.

위 내용은 MySQL의 '잠금 대기 시간 초과' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿