27.6 XA 트랜잭션 제약
XA 트랜잭션 지원은 InnoDB
스토리지 엔진에 한정되어 있습니다.
"외부 XA '의 경우 MySQL Server가 자원 관리자 역할을 수행 클라이언트 프로그램이 트랜잭션 관리자 역할을 수행합니다. "내부 XA '의 경우 MySQL 서버의 스토리지 엔진이 자원 관리자로 기능하고 서버 자체가 트랜잭션 관리자 역할을 수행합니다. 내부 XA 지원은 개별 스토리지 엔진의 기능에 의해 제한되어 있습니다. 내부 XA는 여러 스토리지 엔진이 관여하는 XA 트랜잭션을 처리하기 위해 필요합니다. 내부 XA 구현에서는 스토리지 엔진이 테이블 핸들러 레벨에서 2 단계 커밋을 지원하는 필요하며, 현재 이것은 InnoDB
에만 적용됩니다.
XA START
는 JOIN
및 RESUME
절은 지원되지 않습니다.
XA END
는 SUSPEND [FOR MIGRATE]
어구는 지원되지 않습니다.
xid
값 bqual
부분이 글로벌 트랜잭션의 XA 트랜잭션마다 달라야한다는 요구 사항이 현재 MySQL XA 구현의 제한 사항입니다. 이것은 XA 사양에 의한 것이 아닙니다.
XA 트랜잭션이 PREPARED
상태에 도달하면, MySQL 서버가 (예를 들어, Unix의 kill -9) 강제 종료되거나 비정상적으로 종료되거나 한 경우에도 서버가 재시작 한 후에 트랜잭션을 계속할 수 있습니다 . 그러나 클라이언트가 다시 연결하고 트랜잭션을 커밋하면 트랜잭션이 커밋되지도 바이너리 로그에 기록되지 않습니다. 이것은 데이터와 바이너리 로그의 동기화가 없어진 것을 의미합니다. XA는 복제와 함께 안전하게 사용할 수 없습니다.
PREPARED
상태에 도달하는 것도 포함 보류중인 XA 트랜잭션을 서버가 롤백 할 수 있습니다. 이것은 클라이언트 연결을 종료하고 서버가 부팅을 계속하거나 클라이언트가 연결하고 서버가 정상적으로 종료하는 경우에 발생합니다. (후자의 경우 서버는 각 연결 종료라는 표시에서 연결된 PREPARED
XA 트랜잭션을 롤백합니다.) PREPARED
XA 트랜잭션을 커밋 또는 롤백 할 일 필요가 있습니다 만, 이것은 바이너리 로깅 메커니즘을 변경하지 않고 할 수 없습니다.