'다른 테이블을 스토리지 엔진에 커밋' 상태에서 쿼리를 롤백할 수 있습니까?
7000만 행이 있는 InnoDB 테이블이 있으며, 몇 개의 열을 수정하고 추가하기 위해 다른 테이블 문을 실행하려고 시도하고 있습니다.쿼리가 테이블을 변경한 것 같으며, 이제 '다른 테이블을 스토리지 엔진으로 커밋' 상태입니다.
START TRANSACTION;
ALTER TABLE table
MODIFY COLUMN column1 int(11) NOT NULL DEFAULT 0,
MODIFY COLUMN column2 tinyint(1) NOT NULL DEFAULT 1,
ADD COLUMN column3 int(11),
ADD COLUMN column4 int(11) NOT NULL DEFAULT 1,
ADD COLUMN column5 varchar(255);
COMMIT;
이것은 밤새 실행되어 현재 19시간입니다.퍼포먼스 스키마가 유효하게 되어 있지 않기 때문에, 완료 예정 시간을 확인할 수 없습니다.내 관심사는 쿼리가 무엇을 하고 있는지, 그리고 쿼리가 종료되었을 경우 롤백되는지 여부입니다.tmp 테이블에 복사하거나 테이블 잠금을 기다리는 동안 발생하는 쿼리와 관련된 다른 질문들을 본 적이 있습니다.하지만 다른 테이블이 커밋되는 동안 꼼짝도 할 수 없습니다.
이 상태에서 쿼리를 종료해도 안전한지, 쿼리가 종료되면 정상적으로 롤백됩니까?
서버가 MariaDB 10.2를 실행하고 있다.
매뉴얼에서 다음 항목을 참조하십시오.
일부 문은 롤백할 수 없습니다.일반적으로 데이터베이스 작성 또는 삭제, 테이블 또는 저장된 루틴 작성, 삭제 또는 변경 등의 Data Definition Language(DDL; 데이터 정의 언어) 문이 포함됩니다.
이러한 문구를 포함하지 않도록 트랜잭션을 설계해야 합니다.트랜잭션 초기에 롤백할 수 없는 스테이트먼트를 발행한 후 나중에 다른 스테이트먼트가 실패하면 ROLLBACK 스테이트먼트를 발행하여 트랜잭션의 완전한 효과를 롤백할 수 없습니다.
MySQL 5.6에서 ALGORM=INPLACE 및 LOCK=NONE for InnoDB를 구현하였습니다.이전 테이블 정의에 따라 이 작업은 알고리즘=INPLACE를 의미하거나 알고리즘=COPY로 폴백될 수 있습니다.MariaDB 10.3(MDEV-11369)부터는 ADD COLUMN이 즉시 실행되며, 그 전에 테이블을 재구축해야 합니다.(ALGMARGM=INPLACE 구문은 매우 오해의 소지가 있습니다.)MariaDB 10.2.13 및 10.3.5(MDEV-11415)부터는 Algorithm=COPY가 개별 행에 대한 실행 취소 로그 레코드를 더 이상 쓰지 않으며, 롤백(클라이언트 연결이 끊기거나 서버가 중단된 경우)이 훨씬 더 빨라질 것입니다.
ALTER TABLE
는 DDL 문이며 실행 시 암묵적인 커밋이 발생합니다.즉, 롤백할 수 없지만 DDL을 중단하면(접속을 끊음으로써) 이미 적용된 변경이 제어된 방식으로 롤백됩니다.
「」를 하고 을 전제로 하고 .ALTER TABLE
작업(정의되지 않음)을 취소하는 것은 적어도 내가 아는 바로는 테이블의 새 복사본을 폐기하는 것이기 때문에 비교적 빨리 취소해야 합니다.
언급URL : https://stackoverflow.com/questions/49131991/can-you-rollback-a-query-in-state-committing-alter-table-to-storage-engine
'programing' 카테고리의 다른 글
Vue 유닛 테스트 - vue-test-utils 마운트를 사용할 때 Import된 서비스를 조롱합니다. (0) | 2022.09.21 |
---|---|
mysqldump를 시도할 때 "mysqldump 변수 'key_buffer_size=256M"이 표시됩니다. (0) | 2022.09.21 |
MySQL 명령줄 클라이언트의 자동 완성 (0) | 2022.09.21 |
Python의 해시 맵 (0) | 2022.09.21 |
ProceedingJoinPoint에서 메서드의 주석 값을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.21 |