SAT는 ABAP 프로그램이 어디서 얼마나 시간을 쓰는지 측정하는 런타임 분석 도구입니다. 오랫동안 쓰이던 SE30의 후속으로 나왔고, 측정 방식과 결과 화면이 크게 개선되었습니다.
핵심은 단순합니다. 프로그램을 한 번 실행시키면서 모든 호출 지점의 소요 시간을 기록해 두었다가, 나중에 그 기록을 여러 각도로 뜯어보는 것입니다.
SE30도 대부분의 시스템에 그대로 남아 있습니다. 두 트랜잭션이 공존하는 시스템이 많으니, 팀에서 쓰는 쪽을 따르면 됩니다.
성능 문제를 만나면 가장 먼저 정해야 할 것은 범인이 ABAP인지 DB인지입니다. 이 판단에 쓰는 도구가 다릅니다.
어느 서브루틴·메서드·루프가 시간을 잡아먹는지 보여줍니다. 내부 테이블 처리, 반복 연산, 모듈화 단위 호출이 문제일 때 유효합니다.
어떤 SQL이 몇 번, 얼마나 걸려 실행됐는지 보여줍니다. 느린 쿼리, 반복 조회가 문제일 때 유효합니다.
실무에서는 SAT로 큰 그림을 보고, DB 쪽이 의심되면 ST05로 넘어가는 순서가 자연스럽습니다. SAT 결과에서 DB 관련 시간이 압도적이면 ST05 SQL 트레이스로, ABAP 처리가 압도적이면 그대로 SAT를 파고들면 됩니다.
SAT 초기 화면에서 측정 대상을 지정하고 실행합니다. 실행 방식은 크게 세 가지입니다.
측정이 끝나면 결과가 파일로 남고, 나중에 언제든 다시 열어볼 수 있습니다.
SAT에서 가장 자주 실수하는 지점이 여기입니다. 변형 설정에 따라 볼 수 있는 것이 완전히 달라집니다.
가장 중요한 설정입니다. 같은 코드가 1만 번 호출됐을 때, 이걸 한 줄로 합쳐서 보여줄지 1만 번을 다 남길지를 정합니다.
같은 호출을 하나로 합칩니다. 파일이 작고 측정 부하가 적지만, 호출 계층(어떤 경로로 불렸는지)을 볼 수 없습니다.
호출을 발생 순서대로 전부 기록합니다. 호출 계층 분석이 가능하지만 파일이 급격히 커지고, 긴 프로그램은 측정이 중간에 끊길 수 있습니다.
**"호출 계층이 안 보인다"**는 대부분 집계가 켜져 있어서입니다. 호출 경로를 추적해야 한다면 집계를 끄고, 대신 측정 구간을 최대한 좁히세요.
무엇을 기록할지도 고를 수 있습니다. 보통 아래 범주로 나뉩니다.
| 대상 | 설명 |
|---|---|
| ABAP 처리 | 서브루틴·메서드·함수 호출 등 모듈화 단위 |
| 내부 테이블 | LOOP, READ TABLE, SORT 등 내부 테이블 연산 |
| DB 접근 | Open SQL / ABAP SQL 문 |
| 시스템 커널 | 커널 내부 처리 |
전부 켜면 정확하지만 무겁습니다. 의심 가는 범주만 켜는 것이 실전에서 훨씬 낫습니다.
측정 파일이 무한정 커지지 않도록 최대 실행 시간과 최대 파일 크기 제한이 있습니다. 대량 배치를 측정하다 결과가 잘려 있다면 이 값을 의심해 보세요.
SAT 결과를 볼 때 반드시 구분해야 하는 두 값입니다.
A가 B를 부르고 B가 오래 걸렸다면, A의 총시간에도 B의 시간이 포함됩니다.
호출한 하위 단위의 시간을 뺀, 그 코드가 직접 쓴 시간입니다. 진짜 범인을 찾을 때 보는 값입니다.
총시간 상위 = 호출 경로의 위쪽일 뿐, 그 자체가 병목은 아닙니다. 최상위 프로그램의 총시간은 당연히 100%입니다. 실제로 고칠 대상은 순시간 상위에 있습니다.
| 화면 | 무엇을 보나 |
|---|---|
| Hit List (적중 목록) | 호출 단위별 시간·횟수 목록. 순시간으로 정렬해 상위부터 본다 |
| Call Hierarchy (호출 계층) | 어떤 경로로 호출됐는지 트리로 추적 (집계 끔 필요) |
| Profile | 프로그램·모듈화 단위 등 그룹 단위 집계 |
| DB Tables | 접근한 테이블별 통계 |
특히 STEP 2가 중요합니다. 같은 3초라도 원인이 다릅니다.
두 번째 경우가 훨씬 흔하고, 해결책도 완전히 다릅니다. 루프 안에서 반복 호출되는 구조라면 SQL 튜닝 시리즈 ④편에서 다루는 패턴과 이어집니다.
측정값은 절대적인 실행 시간이 아닙니다. 트레이스 자체가 오버헤드를 만들기 때문에, SAT로 잰 시간은 실제보다 느립니다. 절대값이 아니라 비율과 순위를 보세요.
| 도구 | 보는 것 | 언제 |
|---|---|---|
| SAT | ABAP 코드별 소요 시간 | "프로그램이 느린데 어디가 느린지 모르겠다" |
| ST05 | 개별 SQL 실행 내역 | "DB 접근이 문제 같다" |
| STAD | 단일 트랜잭션 실행 통계 | "이 실행이 전체적으로 어떻게 나뉘었나" |
핵심은 순시간 상위부터, 호출 횟수와 함께 보는 것입니다. 총시간만 보고 최상위 함수를 고치려 들면 시간만 버립니다.
화면 구성과 메뉴 명칭은 릴리스에 따라 다를 수 있습니다. 실제 시스템에서 확인하세요.
Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.