EJB 2.x 컨테이너 관리 지속(CMP) 엔티티 Bean의 경우,
데이터베이스에 CMP Bean의 지속적 속성을 갱신하는 방법을
지정하기 위해 지속 옵션으로 부분 조작을 수행하십시오.
부분 조작에 대해 NONE 또는 UPDATE_ONLY 값을 선택할 수 있습니다.
부분 조작의 기본 설정은 NONE입니다. 이 값을 선택하면 지속적 속성 필드의
서브세트만 변경되어도 데이터베이스에 대한 CMP Bean의 모든 지속적 속성이
데이터베이스에 저장됩니다.
부분 조작의 UPDATE_ONLY 옵션은 데이터베이스에 대한 갱신을
수정된 CMP Bean의 지속적 속성으로만 제한합니다.
Bean의 Setter 메소드가 해당 CMP 속성이 수정되었는지 여부를 판별합니다.
수정은 변경 중인 실제 값을 기반으로 하지 않습니다.
다시 말해, Setter 메소드가 호출되지만 이전 값과 새로운 값이 동일한 상태이면
CMP 속성이 확약되지 않은 것으로 간주됩니다.
Bean에 대해 구성된 액세스 목적 정책의 Bean 레벨에서 지속적 옵션으로 부분 조작을 지정할 수 있습니다.
부분 조작을 지정하는 방법에 대한 자세한 정보는 엔티티 Bean 2.x에 대한 Bean 레벨 액세스 목적 추가 주제를 참조하십시오.
기능상 이점
부분 갱신을 사용(부분 조작을 위해 UPDATE_ONLY 값 선택)하면
다음과 같은 기능상 이점을 포함하도록 설계되었습니다.
- 항상 모든 열이 갱신되면 CMP Bean에 맵핑된 테이블에서 항상 갱신 트리거가 시작됩니다.
이것은 데이터베이스가 불일치 상태에 있도록 합니다.
또한 특정 열이 갱신되는 횟수 또는 특정 열이 갱신되는 시간에 의해 결정되는 트리거 로직은
전체 갱신할 경우 올바르게 작동하지 않습니다.
부분 갱신을 사용하면 이러한 제한사항이 없어지고 CMP Bean과 함께 갱신 트리거를 사용할 수 있게 됩니다.
- 변경이 예상되지 않는 동시성을 위해 술부로 널 입력 가능 열을 사용하는 것을 지원합니다.
성능 이점
부분 갱신 사용은 다음과 같은 성능 이점을 포함하도록 설계되었습니다.
- 열의 서브세트만이 조회에 있으므로 조회 실행 시간이 단축됩니다.
여러 가지 열과 색인이 포함된 테이블의 경우 더 크게 향상될 수 있습니다.
예를 들어, 테이블에 수많은 색인이 있는 경우 갱신된 열의 영향을 받는 색인만
백엔드 데이터베이스에 의해 갱신되어야 합니다.
- 전송될 데이터가 줄어들기 때문에 네트워크 I/O가 감소됩니다.
- 변환기, 작성기 또는 기타 복잡한 변환을 포함하는 변경되지 않은 CMP 필드에서 처리 시간을 절약합니다.
다시 말해, 변환기, 작성기 또는 기타 복잡한 변환에 맵핑되는 CMP 필드와 같이
백엔드 데이터베이스에 사소하지 않게 맵핑된 CMP 필드의 경우
해당 CMP 필드가 변경되지 않은 상태로 남아 있으면 이 처리를 위한 실행 시간이 절약됩니다.
- 불필요한 갱신 트리거 시작을 제거합니다. 예를 들어, CMP 필드가
변경되지 않았으면 해당 열에 의존하는 트리거가 시작되지 않습니다.
성능 역효과
부분 갱신이 성능을 향상시키도록 설계되었지만 성능에 역효과를 줄 수도 있습니다.
부분 갱신 사용을 고려할 때 다음 요소도 고려하십시오.
- 수정될 수 있는 n개의 CMP 속성을 포함한 CMP Bean의 경우에
가능한 2n-1개의 다른 부분 갱신 조회가 있습니다.
Bean에 대해 부분 갱신을 사용하고 응용프로그램이 짧은 시간 동안 해당 Bean에 대해
여러 가지 다른 조합의 속성을 수정하는 중인 경우,
최대 2n-1개의 다른 부분 갱신을 생성할 수 있고
준비된 문장 캐시를 빨리 채웁니다. 결과적으로, 준비된 문장 핸들이 캐시에서 버려지고
일부 문장은 되풀이하여 준비됩니다. 이것은 성능을 감소시킵니다.
- 부분 갱신의 UPDATE_ONLY 값과
동일한 Bean에 대해 지속적 옵션인 일괄처리 선택란 둘 다를 선택하면
갱신 조회에 대한 일괄처리 갱신 성능에 영향을 미칠 수 있습니다.
이것은 각각의 부분 조회가 다르기 때문이며 동일한 부분 조회만이 일괄처리 갱신을 위해 그룹화됩니다.
기본적으로, 갱신 조회의 일괄처리 갱신은 사용 불가능합니다.
일괄처리 갱신에서 부분 갱신의 우선순위를 대체할 수 있는 방법에 대한 세부사항은 제한 섹션을 참조하십시오.
비슷한 부분 갱신 조회를 일괄처리 갱신으로 그룹화하는 데 server.xml 파일에 설정된
JVM(Java™ Virtual Machine) 등록 정보, -Dcom.ibm.ws.pm.grouppartialupdate=true를
사용할 수 있지만,
이것은 트랜잭션의 부분 조회가 거의 동일한 형태를 가지는 경우에만 도움이 될 수 있습니다.
일괄처리 갱신만 사용, 부분 갱신만 사용 또는 둘 다를 사용하는
것(grouppartialupdate 플래그가 true로 설정된 경우) 중에서
최적의 성능을 제공하는 것을 판별해야 합니다.
- CMP 필드가 수정된 것을 기반으로 런타임 동안 부분 갱신 조회가 동적으로 어셈블되므로
변경된 CMP 필드의 수에 비례하는 실행 시간의 비용이 있습니다.
제한
- 부분 갱신이 사용되면 일괄처리 갱신 성능을 잃게 될 수 있습니다.
기본 설정은 부분 갱신이 사용 가능할 때 모든 CMP Bean에 대한 갱신 조회의 일괄처리 갱신이 사용 불가능한 것입니다.
다시 말해, 부분 갱신이 일괄처리 갱신보다 높은 우선순위를 가집니다.
그러나 삭제 및 삽입 조회에 대한 일괄처리 갱신 작동이
부분 갱신에 영향을 받지 않고 변경되지 않은 상태로 남아 있습니다.
일괄처리 갱신에서 부분 갱신의 우선순위를 대체하려면 다음을 수행하십시오.
- server.xml 파일을 여십시오.
- -Dcom.ibm.ws.pm.grouppartialupdate 등록 정보 값을 true로 변경하십시오.
이 등록 정보가 true로 설정되고 부분 갱신이 선택되면 갱신 조회의 일괄처리 갱신이 비슷한 부분 조회를 그룹화합니다.
- SQLJ 또는 CMP/A에 대해서는 부분 갱신이 지원되지 않습니다.