SAP의 프로세스 개요에서 순차 읽기와 직접 읽기의 차이점과 오해하기 쉬운 부분


SAP 시스템에서 프로세스 개요를 확인하는 트랜잭션코드는 SM50 입니다.

프로세스 개요를 통해 현재 실시간으로 실행되고 있는 프로세스를 확인할 수 있습니다.

어떤 프로그램(레포트)이 실시간으로 실행되고 있는지, 해당 프로그램이 현재 어떤 테이블을 액세스해서 읽거나 쓰고 있는지 확인할 수 있습니다.
그리고 실행 시간을 통해 얼마나 오랜 시간 동안 실행되고 있는지도 확인이 가능합니다.

아래 화면을 보면 실시간 읽고 있는 테이블과 수행 방식이 표시되고 있습니다. 
수행을 보면 “순차 읽기“와 “직접 읽기“가 표시되는 것을 알 수 있습니다.

SAP의 프로세스 개요에서 순차 읽기와 직접 읽기의 차이점과 오해하기 쉬운 부분


이번 글에서는 SAP의 프로세스 개요에서 순차 읽기와 직접 읽기의 차이점과 오해하기 쉬운 부분에 대해 설명해 보겠습니다.

SAP 프로세스 개요의 “순차 읽기”에 대한 오해

일반적으로 “순차 읽기(Sequential Read)“는 테이블을 읽을 때 인덱스(Index)가 사용되지 않고 전체 테이블을 스캔해서 순차적으로 읽는다는 의미입니다. 따라서 성능 저하의 큰 원인이기도 합니다.

하지만 SAP 프로세스 개요에서 표시되는 “순차 읽기”는 일반적인 개념의 순차 읽기와 조금 다른 의미로 사용됩니다.

프로세스 개요의 순차 읽기(Sequential Read)“도 대부분 인덱스를 사용해서 읽고 있으며, “직접 읽기(Direct Read)“라고 해서 모두 인덱스를 사용해서 바로 읽는 것은 아닙니다.

따라서 수행이 순차 읽기“라고 해서 무조건 테이블을 읽는 수행 속도가 느려진다는 의미로 해석하면 안됩니다.
다음 단락에서 두 가지 수행 유형에 대해 좀 더 자세히 설명해 보겠습니다.

SAP 프로세스 개요의 “순차 읽기”와 “직접 읽기”의 차이점(의미)

직접 읽기

  • 직접 읽기는 데이터베이스(DB)의 테이블(Table)에서 데이터를 가져올 때 최대 한 줄을 읽어오는 액세스를 의미합니다.
  • 테이블의 Primary Key 전체를 Where 조건으로 사용하면 당연히 1건의 자료만 읽게 됩니다. (예를 들면 자재명을 가져올 때, 고객명을 가져올 때, 지정된 문서번호에 대해 1건의 문서를 읽을 때 등)
  • 또는 SELECT COUNT와 같은 쿼리문을 사용하는 경우에도 결과는 1건의 결과 값만 반환 됩니다.
  • 이렇게 SELECT문의 결과로 반환 되는 데이터가 1건의 자료를 가져올 때 “직접 읽기“로 표시됩니다.


순차 읽기

  • 순차 읽기는 “직접 읽기” 이외의 다른 모든 테이블의 읽기를 의미합니다. 즉, 둘 이상의 행이 반환되는 쿼리문에 대해 “순차 읽기”로 표시됩니다.
  • 앞서 오해에 대한 설명에서 언급했지만 순차 읽기도 대부분 인덱스를 사용해서 수행하는 것을 쿼리 추적을 통해 알 수 있습니다. 즉, 인덱스의 사용 여부를 구분하는 의미가 아님을 알 수 있습니다.
  • 따라서 프로세스 개요(SM51) 화면에서 대부분 “순차 읽기”로 표시되는 이유도 여기에 있습니다.


결론적으로 정리하면

  • 프로세스 개요에 나타나는 “순차 읽기”를 마치 성능 저하인 것처럼 판단하여 “직접 읽기”로 바꾸기 위해 고민할 필요가 없습니다.
  • 단지 프로세스가 실행 중이고 테이블에서 데이터를 읽어오는 쿼리를 수행하고 있음을 보여주는 의미로만 판단하시면 됩니다.
    즉, 인덱스 처리와는 아무런 상관이 없습니다.
  • 하지만 “직접 읽기” 즉, 1건만 읽어오면 될 쿼리문을 잘못 구현해서 “순차 읽기” 즉, 여러건 읽어와서 다시 1건을 찾는 2중 작업이 생기는 읽이 없도록 쿼리문을 구현하는 것은 충분히 고민해야 할 부분입니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기