programing

MySQL: 트랜잭션 내에서 테이블 잘라내기?

jooyons 2023. 7. 24. 22:27
반응형

MySQL: 트랜잭션 내에서 테이블 잘라내기?

InnoDB 테이블이 있습니다. 10분마다 60,000에서 20,000개의 레코드를 다시 채워야 합니다.이 시점까지 우리의 접근 방식은 다음과 같습니다.

  1. 자동 커밋 해제
  2. 테이블 잘라내기
  3. 선택 쿼리 및 추가 계산 수행(PHP 사용)
  4. 새 레코드 삽입
  5. 저지르다

그러나 잘라내기 작업이 수행되면 데이터가 즉시 삭제되고 사용자 인터페이스에서 더 이상 사용할 수 없습니다.약 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

반응형