MySQL: 트랜잭션 내에서 테이블 잘라내기?
InnoDB 테이블이 있습니다. 10분마다 60,000에서 20,000개의 레코드를 다시 채워야 합니다.이 시점까지 우리의 접근 방식은 다음과 같습니다.
- 자동 커밋 해제
- 테이블 잘라내기
- 선택 쿼리 및 추가 계산 수행(PHP 사용)
- 새 레코드 삽입
- 저지르다
그러나 잘라내기 작업이 수행되면 데이터가 즉시 삭제되고 사용자 인터페이스에서 더 이상 사용할 수 없습니다.약 30초 이내에 스크립트가 Commit 작업을 수행하고 테이블이 다시 채워지는 경우에도 사용자에게 이는 매우 당혹스러운 일입니다.
저는 아마도 제가 모든 작전을 마무리할 수 있을 것이라고 생각했습니다.Truncate트랜잭션에서 테이블이 비어 있는 시간을 줄일 수 있습니다.그래서 변했어요.SET AUTOCOMMIT=0START TRANSCATION.
이런! 이것은 원하는 효과와는 반대였습니다!이제 더TRUNCATE작업은 여전히 스크립트의 시작 부분에서 발생하지만 실제로 실행하는 데 훨씬 더 오래 걸립니다.INSERT으로, 거래내운영그의, ▁time▁the▁oper지▁byations그▁within까때,▁the▁that▁so,action그.COMMIT작업이 수행되고 테이블의 데이터를 다시 사용할 수 있습니다. 거의 10분이 지났습니다!
무엇이 이것을 유발할 수 있습니까?사실, 저는 어떠한 변화도 기대하지 않았습니다. 왜냐하면 저는 거래를 시작하는 것이 기본적으로 꺼진다는 인상을 받았기 때문입니다.Autocommit그나저나?
http://dev.mysql.com/doc/refman/5.1/en/truncate-table.html
URL에 5으로 "URL"은 MySQL 5.1.32입니다.TRUNCATE TABLEDDL이지 DELETE와 같은 DML이 아닙니다.은 즉을 합니다.TRUNCATE TABLE 암시적인 암적원될것입다니이인인시를 합니다.COMMIT거래 블록 한가운데에 있습니다.그래서, 사용합니다.DELETE FROM에서는 대신비하테는위에이블야 비워야 .TRUNCATE TABLE.
심지어.DELETE FROM tblname;롤백할 수 있습니다.롤백하는 데 시간이 걸릴 수 있으므로 InnoDB가 이러한 롤백 가능성에 대한 트랜잭션 시간을 처리하도록 적절하게 조정되었는지 확인하십시오.
이 작업을 수행하는 더 좋은 방법은 데이터를 새 테이블에 삽입한 다음 두 테이블 모두에서 이름 바꾸기를 사용하여 데이터를 스왑하는 것입니다.스왑에 필요한 이름은 한 번만 변경하면 됩니다. 이는 원자적인 작업이므로 새 데이터가 표시되는 경우를 제외하고는 사용자가 해당 작업이 발생한 것을 감지할 수 없습니다.그런 다음 이전 데이터를 잘라내거나 삭제할 수 있습니다.
당신의 설명으로는 당신의 시차를 설명할 수 없습니다.단 한 가지 생각나는 것은 삽입물을 실제로 하나의 트랜잭션으로 묶는 것이 아니라 반복한다는 것입니다.
SET AUTOCOMMIT=0과의 주요 차이점은 이미 0이면 아무 것도 하지 않는다는 것이며 START TRANSACTION과 마찬가지로 현재 트랜잭션 내에서 하위 트랜잭션을 시작한다는 것입니다.
TRUNCATE함축성이 있는COMMIT그래서 그 거래는 산성 거래가 아닙니다.위에서 언급한 내용입니다.
--
MySQL에서 귀하의 접근 방식을 사용하여 다음을 에뮬레이트합니다.OUTER JOIN전자 메일 주소별로 두 개의 테이블.결과는 신속하게 테이블에 저장됩니다.INNER JOIN이따가.
접근 방식에 이미 오래된 데이터가 있습니다(필요한 경우).DELETE여기 구식 데이터도 사용하지만 트랜잭션은 완전히 배제하는 또 다른 접근 방식이 있습니다.잠금이 적은 FTW.
그저.INSERT... ON DUPLICATE KEY UPDATE업데이트 시간을 표시합니다.대본이 끝나면,DELETE"업데이트 시간"이 오래된 항목입니다.
언급URL : https://stackoverflow.com/questions/5972364/mysql-truncate-table-within-transaction
'programing' 카테고리의 다른 글
| ng 빌드 중 호출 재시도 횟수가 예외를 초과했습니다. (0) | 2023.07.24 |
|---|---|
| 열의 인덱스 첫 번째 N자 (0) | 2023.07.24 |
| PowerShell을 시작하는 방법은 무엇입니까? (0) | 2023.07.24 |
| 중복 키 업데이트 시와 동등한 Oracle DB (0) | 2023.07.24 |
| 모건 로거는 어떻게 사용하나요? (0) | 2023.07.24 |