세그먼트된 프로그램과 세그먼트되지 않은 프로그램의 선택

프로그램을 세그먼트된 프로그램과 세그먼트되지 않은 프로그램 중 어느 쪽으로 디자인할지 결정할 때는 다음 두 가지 사항을 고려해야 합니다.

첫 번째 사항은 스토리지 및 프로세서 사용과 같은 경합 자원에 대한 트랜잭션의 영향입니다. 두 번째 사항은 레코드 및 복구 가능 데이터 세트, 복구 가능 임시 데이터 큐 및 큐 삽입 항목과 같은 독점 사용 자원에 대한 영향입니다.

세그먼트되지 않은 프로그램은 동격의 세그먼트된 프로그램에 있는 트랜잭션의 합보다 더 오래 실행되므로 스토리지에 영향을 크게 줍니다. 그러나 각 트랜잭션마다 프로그램이 실행되는 대신 하나의 프로그램만 실행되므로 프로세서 오버헤드가 더 적습니다.

세그먼트되지 않은 프로그램은 동격의 세그먼트된 프로그램보다 더 긴 시간 동안 자원을 독점적으로 사용합니다. 이 이유로 인해 세그먼트된 프로그램은 더 빠르게 응답하지만, 복구 및 무결성을 중시하는 경우에는 세그먼트되지 않은 프로그램을 사용하는 것이 더 좋습니다.

호출 대상 프로그램에 양식이 있거나 converse 중에 데이터베이스를 잠궈야 하는 경우에는 프로그램을 세그먼트되지 않은 모드로 실행되도록 디자인해야 합니다.

다음 목록에는 세그먼트된 프로그램 및 세그먼트되지 않은 프로그램에 대한 고려사항이 포함되어 있습니다.
  • 세그먼트된 모드는 CICS®에서 트랜잭션을 시작하고 종료하는 데 더 많은 시간을 소요하므로 더 많은 프로세서 시간을 사용합니다.
  • 세그먼트되지 않은 모드는 사용자 대기 시간 중에 트랜잭션이 여전히 활성 상태이므로 더 많은 가상 스토리지를 사용합니다. 그러나 동적 트랜잭션 라우팅을 사용하면 CICS가 자동으로 다른 리젼을 시작하고 첫 번째 리젼이 제한되어 있는 동안에 다음 리젼에 트랜잭션을 전송할 수 있습니다.
  • 세그먼트되지 않은 모드는 사용자 대기 시간 중에 데이터베이스의 잠금과 같은 기타 자원도 사용할 수 있습니다. (이는 시스템 변수 converseVar.commitOnConverse를 1로 설정하여 해결할 수 있습니다.)
  • CICS 어카운팅 및 보안은 세그먼트되지 않은 트랜잭션보다 단위가 더 큰데, 크기가 작은 트랜잭션이 많은 것이 아니라 몇 개의 큰 트랜잭션이 있기 때문입니다.
  • 세그먼트되지 않은 트랜잭션이 많은 경우에는 CICS 종료가 더 어려울 수 있습니다. 세그먼트되지 않은 트랜잭션 중에 누군가가 휴식을 취하려 자리를 비워, 종료하기 전에 먼저 트랜잭션을 종료해야 하는 경우가 있을 수 있습니다. (이는 사용자가 지정된 시간 후 Enter를 누르지 않으면 트랜잭션이 제한시간을 초과하도록 하여 해결할 수 있습니다.)
  • 세그먼트되지 않은 프로그램의 프로그래밍은 다음 항목이 가능하므로 더 쉽습니다.
    • 호출 대상 프로그램에서 텍스트 양식을 사용합니다.
    • converse 간에 데이터베이스의 잠금 및 커서 위치를 유지합니다.
  • IMS™ 환경에 대해서는 세그먼트된 프로그램만 생성할 수 있습니다.

스토리지 경합이 문제가 되지 않는 시스템에서 프로그램을 실행하는 경우 세그먼트된 프로그램 또는 세그먼트되지 않은 프로그램 중 어느 쪽을 실행할 것인가에 대한 좋은 타협안은 converseVar.commitOnConverse 변수를 1로 설정하여 세그먼트되지 않은 모드로 실행하는 것입니다. 이 접근법은 기본 프로그램의 커미트를 각 converse마다 강제하며, 세그먼트되지 않은 모드의 좋은 성능 특성을 취하면서도 사용자 대기 시간 중에 파일이나 데이터베이스 자원을 묶어두지 않습니다.