2026/09/08

오늘의 이야기

Oracle OFFSET 성능 최적화와 Keyset 페이징


페이징



 


OFFSET은 데이터가 많아질수록 성능이 급격히 떨어집니다. 대용량 환경에서는 Keyset Pagination(Seek 방식)을 사용하고, 정렬 컬럼에 적절한 인덱스를 추가하는 것이 가장 효과적인 방법입니다.




OFFSET 성능 문제



  • OFFSET-FETCH 방식은 지정된 OFFSET만큼 데이터를 건너뛰기 위해 정렬 후 스캔을 수행합니다.

  • 데이터가 수백만 건 이상이면 TEMP 공간 사용과 CPU 부하가 급격히 증가합니다.




페이징 방식 비교





























방식 장점 단점 성능 특성
ROW_NUMBER 정렬 순서 보장, 임의 페이지 접근 가능 전체 정렬 비용 발생 대량 데이터에서 성능 저하
OFFSET-FETCH SQL 문법 간결, 직관적 OFFSET 커질수록 성능 급격히 저하 수백만 건 이상에서 비효율적
Keyset Pagination 불필요한 데이터 건너뛰지 않음, 일정한 성능 임의 페이지 접근 불가, 마지막 키 값 필요 대량 데이터에서도 안정적



Keyset 페이징 샘플 코드


1페이지 (처음 50개)


SELECT *
FROM orders
ORDER BY created_at, order_id
FETCH FIRST 50 ROWS ONLY;

2페이지 이후 (Seek 방식)


SELECT *
FROM orders
WHERE (created_at, order_id) > (:lastCreatedAt, :lastOrderId)
ORDER BY created_at, order_id
FETCH FIRST 50 ROWS ONLY;

100번째 페이지 접근


SELECT *
FROM orders
WHERE (created_at, order_id) > (:lastCreatedAt_99, :lastOrderId_99)
ORDER BY created_at, order_id
FETCH FIRST 50 ROWS ONLY;



운영 전략



  • 순차 탐색: Keyset 본연의 방식, 성능 최적

  • 중간 키 값 캐싱: 임의 페이지 접근 가능, 애플리케이션에서 관리 필요

  • ROW_NUMBER 혼합: 특정 페이지 점프 가능, 대량 데이터에서는 성능 저하




결론



  • 소규모 데이터(10만 건 이하) → OFFSET-FETCH도 실용적

  • 대규모 데이터(100만 건 이상) → 반드시 Keyset Pagination + 인덱스 최적화

  • 엑셀 다운로드, 로그 조회 등 대량 처리 → Keyset 방식이 안정성과 성능 모두 우수





댓글 없음:

댓글 쓰기

오늘의 이야기

Oracle OFFSET 성능 최적화와 Keyset 페이징 페이징   OFFSET 은 데이터가 많아질수록 성능이 급격히 떨어집니다. 대용량 환경에서는 Keyset Pagination(Seek 방식) 을 사...