13.3.7 XA 트랜잭션
- 13.3.7.1 XA 트랜잭션 SQL 구문
- 13.3.7.2 XA 트랜잭션의 상태
XA 트랜잭션 지원은 InnoDB
스토리지 엔진에 사용할 수 있습니다. MySQL XA 구현은 X / Open CAE 문서 분산 트랜잭션 처리 : XA 사양에 따라 있습니다. 이 문서는 The Open Group에 의해 발행되고 있으며, http://www.opengroup.org/public/pubs/catalog/c193.htm 에서 구할 수 있습니다. 현재 XA 구현의 제한 사항은 섹션 D.6 "XA 트랜잭션 제약" 에 설명되어 있습니다.
클라이언트 측에 특별한 요구 사항은 아무것도 없습니다. MySQL 서버에 대한 XA 인터페이스는 XA
키워드로 시작하는 SQL 문으로 구성되어 있습니다. MySQL 클라이언트 프로그램은 SQL 문을 보내고 XA 문 인터페이스의 의미를 이해하고 할 수 있어야합니다. 이들이 최신 클라이언트 라이브러리에 링크되어있을 필요는 없습니다. 이전 클라이언트 라이브러리도 작동합니다.
현재 MySQL Connector에서 MySQL Connector / J 5.0.0은 XA SQL 문 인터페이스를 자동으로 처리하는 클래스 인터페이스를 사용하여 XA를 직접 지원합니다.
XA는 분산 트랜잭션, 즉 여러 개의 개별 트랜잭션 리소스가 글로벌 트랜잭션에 참여하는 것을 허용하는 기능을 지원합니다. 트랜잭션 자원은 종종 RDBMS이지만, 다른 종류의 자원이라도 괜찮습니다.
글로벌 트랜잭션은 그 자체로 트랜잭션 인 여러 작업이 포함됩니다 만, 그 모든 그룹으로서 성공적으로 완료하거나 모든 그룹으로 롤백되는지 중 하나 여야합니다. 기본적으로, 이것은 ACID 속성을 "1 수준에"확장함으로써 여러 ACID 트랜잭션을, 같은 ACID 속성을 가진 글로벌 조작의 구성 요소로 연계하여 실행할 수 있도록합니다. (그러나 분산 트랜잭션에 대해서는 SERIALIZABLE
격리 수준을 사용하여 ACID 특성을 실현해야합니다. 비 분산 트랜잭션에 대해서는 REPEATABLE READ
를 사용하면 충분하지만, 분산 트랜잭션에 대해서는 불 충분합니다.)
분산 트랜잭션의 몇 가지 예 :
응용 프로그램이 메시징 서비스를 RDBMS와 함께 통합 도구로서 기능하는 경우가 있습니다. 이 응용 프로그램은 같은 트랜잭션 데이터베이스를 포함하는 메시지 전송, 검색 및 처리를 할 트랜잭션이 모두 확실하게 글로벌 트랜잭션 내에서 실행되도록합니다. 이것은 "트랜잭션 이메일"라고 생각할 수 있습니다.
응용 프로그램이 MySQL 서버와 Oracle 서버 (또는 복수의 MySQL 서버) 등 다른 데이터베이스 서버 관련 작업을 수행합니다. 여기에서 여러 서버 관련 작업은 각 서버의 로컬 개별 트랜잭션이 아닌 글로벌 트랜잭션의 일부로 실행해야합니다.
은행 계좌 정보를 RDBMS에 보관하고 현금 자동 입출금기 (ATM)를 통해 현금을 출입하고 있습니다. ATM의 액션이 계좌에 제대로 반영되도록 보장하는 것이 필요하지만, 이것은 RDBMS뿐만 실행할 수 없습니다. 글로벌 트랜잭션 매니저가 ATM과 데이터베이스 리소스를 통합하여 금융 거래의 전체적인 일관성을 보장합니다.
글로벌 트랜잭션을 사용하는 응용 프로그램은 하나 이상의 리소스 매니저와 1 개의 트랜잭션 관리자가 포함되어 있습니다.
리소스 관리자 (RM)은 트랜잭션 리소스에 대한 액세스를 제공합니다. 데이터베이스 서버는 한 종류의 리소스 관리자입니다. 이것은 RM 의해 관리되는 트랜잭션을 커밋 또는 롤백 할 수 있어야합니다.
트랜잭션 관리자 (TM)는 글로벌 트랜잭션의 일부인 트랜잭션을 조정합니다. 이것은 이러한 각 트랜잭션을 처리하는 RM과 통신합니다. 글로벌 트랜잭션 내의 개별 트랜잭션은 글로벌 트랜잭션의 "브랜치"입니다. 글로벌 트랜잭션 브랜치는 나중에 설명되는 naming scheme에 의해 식별됩니다.
XA MySQL의 MySQL 구현은 MySQL 서버는 글로벌 트랜잭션의 XA 트랜잭션을 처리하는 리소스 관리자 역할을 할 수 있습니다. MySQL 서버에 연결하는 클라이언트 프로그램은 트랜잭션 매니저 역할을합니다.
글로벌 트랜잭션을 실행하려면 어떤 구성 요소가 관련되어 있는지를 알고 각 구성 요소를 커밋 또는 롤백이 가능한 지점에 가지고가는 것이 필요합니다. 각 구성 요소가 자신의 성공 능력에 대해보고하는 내용에 따라 그들 모두는 원자 그룹으로 커밋 또는 롤백해야합니다. 즉, 모든 구성 요소가 커밋하거나 모든 구성 요소가 롤백해야합니다. 글로벌 트랜잭션을 관리하려면 구성 요소 중 하나 또는 연결된 네트워크가 실패 할 수 있음을 고려할 필요가 있습니다.
글로벌 트랜잭션을 수행하는 과정에서는 2 단계 커밋 (2PC)가 사용됩니다. 이는 글로벌 트랜잭션 브랜치에 의해 실행되는 액션이 실행 된 후에 이루어집니다.
첫 번째 단계에서는 모든 브랜치가 준비됩니다. 즉, 이들은 TM에서 위탁의 준비를하도록 지시됩니다. 이것은 일반적으로 지점을 관리하는 각 RM이 해당 분기의 액션을 안정된 스토리지에 기록하는 것을 나타냅니다. 이 지점은이를 수행 할 수 있는지 여부를 나타 이러한 결과가 두 번째 단계에 사용됩니다.
두 번째 단계에서는 TM이 RM에 커밋 또는 롤백 중을해야 하는지를 알려줍니다. 모든 분기가 준비 될 때 커밋 수 있음을 나타하면 모든 지점이 커밋하도록 지시됩니다. 하나의 분기가 준비되었을 때 커밋 할 수없는 것을 보여 주었다 경우 모든 지점이 롤백하도록 지시됩니다.
경우에 따라서는 글로벌 트랜잭션에서 1 단계 커밋 (1PC)가 사용 될 수 있습니다. 예를 들어, 글로벌 트랜잭션이 하나의 트랜잭션 자원 (즉, 하나의 지점)으로 만 구성되어있는 것이 트랜잭션 관리자가 발견 된 경우 해당 리소스 준비와 노력을 한 번에 할 수 있도록 지시 할 수 있습니다.