SAT - ABAP 런타임 분석으로 병목 지점 찾기

SAT ABAP 런타임 분석 배너

SAT는 무엇인가

SAT는 ABAP 프로그램이 어디서 얼마나 시간을 쓰는지 측정하는 런타임 분석 도구입니다. 오랫동안 쓰이던 SE30의 후속으로 나왔고, 측정 방식과 결과 화면이 크게 개선되었습니다.

핵심은 단순합니다. 프로그램을 한 번 실행시키면서 모든 호출 지점의 소요 시간을 기록해 두었다가, 나중에 그 기록을 여러 각도로 뜯어보는 것입니다.

INFO

SE30도 대부분의 시스템에 그대로 남아 있습니다. 두 트랜잭션이 공존하는 시스템이 많으니, 팀에서 쓰는 쪽을 따르면 됩니다.

SAT와 ST05, 무엇을 언제 쓰나

성능 문제를 만나면 가장 먼저 정해야 할 것은 범인이 ABAP인지 DB인지입니다. 이 판단에 쓰는 도구가 다릅니다.

SATABAP 처리 시간을 본다

어느 서브루틴·메서드·루프가 시간을 잡아먹는지 보여줍니다. 내부 테이블 처리, 반복 연산, 모듈화 단위 호출이 문제일 때 유효합니다.

ST05DB 접근을 본다

어떤 SQL이 몇 번, 얼마나 걸려 실행됐는지 보여줍니다. 느린 쿼리, 반복 조회가 문제일 때 유효합니다.

실무에서는 SAT로 큰 그림을 보고, DB 쪽이 의심되면 ST05로 넘어가는 순서가 자연스럽습니다. SAT 결과에서 DB 관련 시간이 압도적이면 ST05 SQL 트레이스로, ABAP 처리가 압도적이면 그대로 SAT를 파고들면 됩니다.

측정 시작하기

SAT 초기 화면에서 측정 대상을 지정하고 실행합니다. 실행 방식은 크게 세 가지입니다.

방식 1현재 세션에서 실행가장 많이 쓰는 방식
방식 2다른 세션 측정이미 돌고 있는 작업
방식 3스케줄 측정배치 잡 등

측정이 끝나면 결과가 파일로 남고, 나중에 언제든 다시 열어볼 수 있습니다.

측정 변형(Variant)이 결과를 좌우한다

SAT에서 가장 자주 실수하는 지점이 여기입니다. 변형 설정에 따라 볼 수 있는 것이 완전히 달라집니다.

집계(Aggregation)

가장 중요한 설정입니다. 같은 코드가 1만 번 호출됐을 때, 이걸 한 줄로 합쳐서 보여줄지 1만 번을 다 남길지를 정합니다.

집계 켬가볍지만 순서를 잃는다

같은 호출을 하나로 합칩니다. 파일이 작고 측정 부하가 적지만, 호출 계층(어떤 경로로 불렸는지)을 볼 수 없습니다.

집계 끔다 보이지만 무겁다

호출을 발생 순서대로 전부 기록합니다. 호출 계층 분석이 가능하지만 파일이 급격히 커지고, 긴 프로그램은 측정이 중간에 끊길 수 있습니다.

TIP

**"호출 계층이 안 보인다"**는 대부분 집계가 켜져 있어서입니다. 호출 경로를 추적해야 한다면 집계를 끄고, 대신 측정 구간을 최대한 좁히세요.

측정 대상 제한

무엇을 기록할지도 고를 수 있습니다. 보통 아래 범주로 나뉩니다.

대상설명
ABAP 처리서브루틴·메서드·함수 호출 등 모듈화 단위
내부 테이블LOOP, READ TABLE, SORT 등 내부 테이블 연산
DB 접근Open SQL / ABAP SQL 문
시스템 커널커널 내부 처리

전부 켜면 정확하지만 무겁습니다. 의심 가는 범주만 켜는 것이 실전에서 훨씬 낫습니다.

실행 제한

측정 파일이 무한정 커지지 않도록 최대 실행 시간최대 파일 크기 제한이 있습니다. 대량 배치를 측정하다 결과가 잘려 있다면 이 값을 의심해 보세요.

결과 읽는 법

총시간과 순시간

SAT 결과를 볼 때 반드시 구분해야 하는 두 값입니다.

총시간 (Gross)자기 자신 + 호출한 것 전부

A가 B를 부르고 B가 오래 걸렸다면, A의 총시간에도 B의 시간이 포함됩니다.

순시간 (Net)자기 자신만

호출한 하위 단위의 시간을 뺀, 그 코드가 직접 쓴 시간입니다. 진짜 범인을 찾을 때 보는 값입니다.

총시간 상위 = 호출 경로의 위쪽일 뿐, 그 자체가 병목은 아닙니다. 최상위 프로그램의 총시간은 당연히 100%입니다. 실제로 고칠 대상은 순시간 상위에 있습니다.

주요 화면

화면무엇을 보나
Hit List (적중 목록)호출 단위별 시간·횟수 목록. 순시간으로 정렬해 상위부터 본다
Call Hierarchy (호출 계층)어떤 경로로 호출됐는지 트리로 추적 (집계 끔 필요)
Profile프로그램·모듈화 단위 등 그룹 단위 집계
DB Tables접근한 테이블별 통계

실전: 어디부터 보나

STEP 1Hit List순시간 내림차순
STEP 2호출 횟수 확인1건이 느린가 / 많이 부르나
STEP 3호출 계층 역추적누가 부르는가

특히 STEP 2가 중요합니다. 같은 3초라도 원인이 다릅니다.

  • 1번 호출에 3초 → 그 코드 자체가 느리다. 로직·쿼리를 고친다.
  • 3만 번 호출에 총 3초 → 코드는 빠르다. 호출 횟수를 줄이는 것이 답이다.

두 번째 경우가 훨씬 흔하고, 해결책도 완전히 다릅니다. 루프 안에서 반복 호출되는 구조라면 SQL 튜닝 시리즈 ④편에서 다루는 패턴과 이어집니다.

주의사항

WARNING

측정값은 절대적인 실행 시간이 아닙니다. 트레이스 자체가 오버헤드를 만들기 때문에, SAT로 잰 시간은 실제보다 느립니다. 절대값이 아니라 비율과 순위를 보세요.

  • 운영계에서는 신중하게 — 측정 부하가 있고, 파일 공간도 씁니다. 가능하면 개발·품질계에서 재현하세요.
  • 측정 구간을 좁히세요 — 프로그램 전체보다, 의심 구간만 도는 테스트 프로그램을 만들어 재는 편이 훨씬 정확하고 가볍습니다.
  • 한 번만 재지 마세요 — 첫 실행은 버퍼가 비어 있어 느립니다. 두세 번 돌려 안정된 값을 보세요.

정리

도구보는 것언제
SATABAP 코드별 소요 시간"프로그램이 느린데 어디가 느린지 모르겠다"
ST05개별 SQL 실행 내역"DB 접근이 문제 같다"
STAD단일 트랜잭션 실행 통계"이 실행이 전체적으로 어떻게 나뉘었나"

핵심은 순시간 상위부터, 호출 횟수와 함께 보는 것입니다. 총시간만 보고 최상위 함수를 고치려 들면 시간만 버립니다.

INFO

화면 구성과 메뉴 명칭은 릴리스에 따라 다를 수 있습니다. 실제 시스템에서 확인하세요.

Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.