INSERT ... SELECT를 사용하여 잠금 대기 시간 초과를 방지하는 중
InnoDB를 가지고 있습니다.books
내 앱을 위한 테이블.하루에 몇 번씩 아주 많은 수의 독립적인 사람들이INSERT
그리고.UPDATE
쿼리가 에 대해 실행됩니다.books
테이블.
앱에 대한 수신 요청은 다음을 기반으로 임시 테이블을 생성합니다.books
사용하여INSERT INTO [tmp table] (SELECT FROM books ...)
.
의 MySQL 문서에 따르면 이 구문은 다음과 같이 잠깁니다.books
온도 테이블이 채워질 때까지.
이러한 선택, 삽입 및 업데이트의 잠금 조합books
테이블이 주기적으로 MySQL을 오버로드하여 잠금 대기 시간 초과를 발생시킵니다.
저는 이 페르코나 기사에서 제안을 시도했습니다.SELECT
부터books
아웃파일로, 하는 것.INSERT
별책으로이렇게 하면 선택한 잠금이 방지되지만 로드 속도가 너무 느립니다.
제가 다른 대안을 놓쳤나요?INSERT ... SELECT
그것은 잠기지 않을 것입니다.books
성능에 영향을 미치지 않는 테이블?
저는 MySQL 초보자이고 아마 문제를 잘못 이해했을 것입니다.
INSERT INTO [tmp table] (SELECT FROM books ...)
에 잠금을 설정하면 안 됩니다.books
의 테이블 뿐인tmp_table
트랜잭션 격리 수준이 직렬화되지 않은 경우.
업데이트는 InnoDB가 트랜잭션 끝까지 모든 행에 잠금을 유지할 필요가 없도록 READ COMMITED 분리 수준에서 실행할 수 있습니다(WHERE 부분이 인덱스 열로만 구성된 경우에만 작동함).
언급URL : https://stackoverflow.com/questions/54373405/preventing-lock-wait-timeouts-with-insert-select
'programing' 카테고리의 다른 글
안드로이드.뷰부풀리기예외:이진 XML 파일: 클래스 조각을 채우는 동안 오류가 발생했습니다. (0) | 2023.08.15 |
---|---|
점 표기 문자열을 사용하여 객체 자식 속성 액세스 (0) | 2023.08.15 |
Access-Control-Allow-Origin 헤더로 여러 도메인을 처리하도록 Apache를 구성하는 방법은 무엇입니까? (0) | 2023.08.15 |
하위 창에서 인쇄 미리 보기가 열릴 때 Google Chrome이 Ajax 요청을 차단합니다. (0) | 2023.08.15 |
Python에서 로깅을 위한 타임스탬프 인쇄 (0) | 2023.08.15 |