반응형
'테이블 잠금 [table_name] 쓰기'를 했을 때 '메타달록'이 발생하였습니다.
나는 아래와 같이 했다.
-- connection 1
START TRANSACTION;
LOCK TABLES [table_name] WRITE;
-- connection 2
START TRANSACTION;
SELECT * FROM [table_name]; -- waiting for table metadata lock
나는 위의 상황을 이해할 수 없다.
WRITE LOCK은 SELECT 쿼리를 방해하지 않는다고 생각했습니다.
아래처럼 했을 때
-- connection 1
START TRANSACTION;
UPDATE [table_name] SET [column = value] WHERE id = 1;
-- connection 2
START TRANSACTION;
SELECT * FROM [table_name] WHERE id = 1; -- doesn't wait
SELECT는 보시는 것처럼 기다리지 않습니다.
그리고 WRITE LOCK도 UPDATE 조항처럼 기능한다고 생각했어요.
하지만 아닌 것 같은데..
이제 내가 뭘 잘못 알았다고?
쓰기 잠금은 행 수준 잠금과 같이 작동하지 않습니다.
https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html은 다음과 같이 기술하고 있습니다.
WRITE
잠금:
- 잠금을 유지하는 세션만 테이블에 액세스할 수 있습니다.잠금이 해제될 때까지 다른 세션은 액세스할 수 없습니다.
여기서 "접근"은 읽기 또는 쓰기를 의미합니다.
언급URL : https://stackoverflow.com/questions/54331479/metadatalock-occured-when-i-did-lock-tables-table-name-write
반응형
'programing' 카테고리의 다른 글
CodeIgniter의 액티브레코드가 있는 데이터베이스에 NOW() 삽입 (0) | 2022.09.22 |
---|---|
phpmyadmin에서 타임아웃을 해결하려면 어떻게 해야 하나요? (0) | 2022.09.22 |
& vs @ 및 =의 각도 차이는 무엇입니까?JS (0) | 2022.09.22 |
.inc란 무엇이며 왜 사용하는가? (0) | 2022.09.22 |
스크립트 시간 초과가 지났습니다. 가져오기를 완료하려면 동일한 파일을 다시 제출하십시오. 가져오기가 재개됩니다. (0) | 2022.09.22 |