Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

14.2. 트랜잭션 관리

14.2.1. 트랜잭션 검색 및 관리

관리 CLI는 트랜잭션 레코드를 검색하고 조작하는 기능을 지원합니다. 이 기능은 JBoss EAP의 관리 API와 TM 간의 상호 작용에 의해 제공됩니다.

TM은 오브젝트 저장소라는 영구 스토리지에 있는 각 보류 중인 트랜잭션 및 트랜잭션에 대한 정보를 저장합니다. 관리 API는 오브젝트 저장소를 log-store 라는 리소스로 노출합니다. 프로브 작업은 트랜잭션 로그를 읽고 각 레코드에 대한 노드 경로를 생성합니다. 로그 저장소를 새로 고쳐야 할 때마다 프로브 작업을 수동으로 호출할 수 있습니다. 트랜잭션 로그가 표시되고 빠르게 사라지는 것은 정상입니다.

로그 저장소 새로 고침

다음 명령은 관리형 도메인에서 프로필 기본값 을 사용하는 서버 그룹의 로그 저장소를 새로 고칩니다. 독립 실행형 서버의 경우 명령에서 profile=default 를 제거합니다.

/profile=default/subsystem=transactions/log-store=log-store:probe
모든 준비 트랜잭션 보기

준비된 트랜잭션을 모두 보려면 먼저 로그 저장소를 새로 고칩니다( 로그 저장소 새로 고침참조) 파일 시스템 ls 명령과 유사하게 작동하는 다음 명령을 실행합니다.

ls /profile=default/subsystem=transactions/log-store=log-store/transactions

또는

/host=master/server=server-one/subsystem=transactions/log-store=log-store:read-children-names(child-type=transactions)

각 트랜잭션이 고유 식별자와 함께 표시됩니다. 개별 트랜잭션에 대해 개별 작업을 실행할 수 있습니다( Transaction 관리참조).

14.2.1.1. 트랜잭션 관리

트랜잭션의 속성 보기

JNDI 이름, EIS 제품 이름 및 버전 또는 해당 상태와 같은 트랜잭션에 대한 정보를 보려면 read-resource 작업을 사용합니다.

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
거래 참여자의 세부 정보 보기

각 트랜잭션 로그에는 참가자 라는 하위 요소가 포함되어 있습니다. 이 요소에 대한 읽기 리소스 작업을 사용하여 트랜잭션 참가자의 세부 정보를 확인합니다. 참가자가 JNDI 이름으로 식별됩니다.

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=java\:\/JmsXA:read-resource

결과는 다음과 유사할 수 있습니다.

{
   "outcome" => "success",
   "result" => {
       "eis-product-name" => "ActiveMQ",
       "eis-product-version" => "2.0",
       "jndi-name" => "java:/JmsXA",
       "status" => "HEURISTIC",
       "type" => "/StateManager/AbstractRecord/XAResourceRecord"
   }
}

여기에 표시된 결과 상태는 HEURISTIC 상태로 되어 복구할 수 있습니다. 자세한 내용은 트랜잭션 참여자 복구를 참조하십시오.

특수한 경우 오브젝트 저장소에 고립된 레코드, 즉 로그에 해당 트랜잭션 레코드가 없는 XAResourceRecords를 만들 수 있습니다. 예를 들어 TM이 기록되기 전에 준비되었지만 중단된 XA 리소스는 도메인 관리 API에 액세스할 수 없습니다. 이러한 레코드에 액세스하려면 관리 옵션 expose-all-logstrue 로 설정해야 합니다. 이 옵션은 관리 모델에 저장되지 않으며 서버를 다시 시작할 때 false 로 복원됩니다.

/profile=default/subsystem=transactions/log-store=log-store:write-attribute(name=expose-all-logs, value=true)

이 대체 명령을 사용하면 집계된 트랜잭션의 참여자 ID를 표시할 수 있습니다.

/host=master/server=server-one/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-children-names(child-type=participants)
트랜잭션 삭제

각 트랜잭션 로그는 트랜잭션을 나타내는 트랜잭션 로그를 삭제하기 위한 삭제 작업을 지원합니다.

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:delete

이는 거래의 모든 참가자도 삭제됩니다.

거래 참여자 복구

각 거래 참여자는 복구 작업을 사용하여 복구를 지원합니다.

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:recover

트랜잭션 참여자의 상태가 HEURISTIC 인 경우 복구 작업에서 상태를 PREPARE 로 전환하고 주기적으로 복구 프로세스를 수행하여 커밋을 재생하도록 요청합니다.

커밋이 성공하면 참가자가 트랜잭션 로그에서 제거됩니다. 로그 저장소 에서 프로브 작업을 실행하고 참여자가 더 이상 나열되지 않았는지 확인하여 이를 확인할 수 있습니다. 이것이 마지막 참가자인 경우 거래도 삭제됩니다.

트랜잭션 참가자의 상태 새로 고침

복구가 필요한 경우 복구를 시도하기 전에 새로 고침 작업을 사용하여 복구가 계속 필요한지 확인할 수 있습니다.

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:refresh

14.2.2. 트랜잭션 통계 보기

트랜잭션 관리자 통계가 활성화된 경우 트랜잭션 관리자가 처리된 트랜잭션에 대한 통계를 볼 수 있습니다. 트랜잭션 관리자 통계를 활성화하는 방법에 대한 자세한 내용은 트랜잭션 관리자 구성 을 참조하십시오.

관리 콘솔 또는 관리 CLI를 사용하여 통계를 볼 수 있습니다. 관리 콘솔에서 런타임 탭에서 트랜잭션 하위 시스템으로 이동하여 트랜잭션 통계를 사용할 수 있습니다. 관리 CLI에서 include-runtime=true 를 사용하여 읽기-리소스 작업에 통계를 볼 수 있습니다. 예를 들면 다음과 같습니다.

/subsystem=transactions:read-resource(include-runtime=true)

다음 표에서는 사용 가능한 각 통계 및 해당 설명을 보여줍니다.

표 14.2. 트랜잭션 Cryostat 통계

통계설명

number-of- Cryostats

이 서버에서 트랜잭션 관리자가 처리하는 총 트랜잭션 수입니다.

number-of-committed- Cryostats

이 서버에서 트랜잭션 관리자가 처리하는 커밋된 트랜잭션 수입니다.

number-of-aborted- Cryostats

이 서버의 트랜잭션 관리자가 처리하는 중단된 트랜잭션 수입니다.

number-of-timed-out- Cryostats

이 서버에서 트랜잭션 관리자가 처리하는 시간 초과 트랜잭션 수입니다. 시간 초과 트랜잭션 수는 중단된 트랜잭션 수로 계산됩니다.

number-of-heuristics

heuristic 상태의 트랜잭션 수입니다.

number-of-inflight-transactions

시작되었지만 아직 종료되지 않은 트랜잭션 수입니다.

number-of-application-rollbacks

실패가 애플리케이션인 실패한 트랜잭션 수입니다.

number-of-resource-rollbacks

실패가 리소스인 실패한 트랜잭션 수입니다.

14.2.3. 트랜잭션 오브젝트 저장소

트랜잭션에는 개체를 저장할 위치가 필요합니다. 오브젝트 스토리지 옵션 중 하나는 JDBC 데이터 소스입니다. 성능이 특별한 문제가 있는 경우 JDBC 오브젝트 저장소는 파일 시스템 또는 ActiveMQ 저널 오브젝트 저장소보다 느릴 수 있습니다.

중요

트랜잭션 하위 시스템이 트랜잭션 로그의 스토리지 유형으로 Apache ActiveMQ Artemis 저널을 사용하도록 구성된 경우 JBoss EAP의 두 인스턴스는 동일한 디렉터리를 사용하여 저널을 저장할 수 없습니다. 애플리케이션 서버 인스턴스는 동일한 위치를 공유할 수 없으며 각각 고유 위치를 구성해야 합니다.

참고

트랜잭션 오브젝트 저장소를 손실하면 데이터 일관성이 손실될 수 있습니다. 따라서 오브젝트 저장소를 안전한 드라이브에 배치해야 합니다.

JDBC Datasource를 트랜잭션 오브젝트 저장소로 사용

다음 단계에 따라 JDBC 데이터 소스를 트랜잭션 오브젝트 저장소로 사용합니다.

  1. 예를 들어 TransDS 와 같은 데이터 소스를 만듭니다. 자세한 내용은 Create a non-XA 데이터 소스 만들기를 참조하십시오. 오브젝트 저장소가 제대로 작동하려면 데이터 소스의 JDBC 드라이버 가 JAR 배포가 아닌 코어 모듈로 설치해야 합니다.
  2. 데이터 소스의 jta 속성을 false 로 설정합니다.

    /subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)
  3. jdbc-store-datasource 속성을 사용할 데이터 소스 이름으로 설정합니다(예: java:jboss/datasources/TransDS ).

    /subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)
  4. use-jdbc-store 속성을 true 로 설정합니다.

    /subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)
  5. 변경 사항을 적용하려면 JBoss EAP 서버를 다시 시작합니다.
트랜잭션 JDBC 저장소 속성

다음 표는 JDBC 개체 스토리지와 관련된 모든 사용 가능한 속성을 식별합니다.

표 14.3. 트랜잭션 JDBC 저장소 속성

속성설명

use-jdbc-store

트랜잭션에 대한 JDBC 저장소를 활성화하려면 이 값을 true 로 설정합니다.

jdbc-store-datasource

스토리지에 사용되는 JDBC 데이터 소스의 JNDI 이름입니다.

jdbc-action-store-drop-table

시작 시 작업 저장소 테이블을 삭제하고 다시 생성할지 여부입니다. 기본값은 false입니다.

jdbc-action-store-table-prefix

작업 저장소 테이블 이름의 접두사입니다.

jdbc-communication-store-drop-table

시작 시 통신 저장소 테이블을 삭제하고 다시 생성할지 여부입니다. 기본값은 false입니다.

jdbc-communication-store-table-prefix

통신 저장소 테이블 이름의 접두사입니다.

jdbc-state-store-drop-table

시작 시 상태 저장소 테이블을 삭제하고 다시 생성할지 여부입니다. 기본값은 false입니다.

jdbc-state-store-table-prefix

상태 저장소 테이블 이름의 접두사입니다.

ActiveMQ Journal Object Store 사용

다음 단계에 따라 ActiveMQ 저널 오브젝트 저장소를 사용합니다.

  1. use-journal-store 속성을 true 로 설정합니다.

    /subsystem=transactions:write-attribute(name=use-journal-store,value=true)
  2. 변경 사항을 적용하려면 JBoss EAP 서버를 다시 시작합니다.