오라클 성능 고도화 원리와 해법 II (2012년)
소트 수행 원리 0 0 59,040

by 구루비스터디 소트튜닝 Sort Area 소트수행원리 PGA UGA CGA [2018.04.01]


소트 수행 원리

Sort area


할당 방식
  • Sort 수행하면서 공간이 부족 할 때 마다 Chunk단위(DB Block Size) 로 할당


참조 파라메터
  • workarea_size_policy: 세션마다 사용하는 소팅 영역 크기, Default: Auto
  • sort_area_retained_size: 데이터 정렬 끝낸 후 유지할 소트 영역 크기(결과집함 Fetch, 다음 수행 단계로 결과집합 전달하기 전까지 유지)
  • 이 크기 초과 시 Disk(TEMP TBS) 저장 후 Fetch 시 다시 읽음
  • Default: 0 (결과집합 전체를 유지)


Sort Area 종류
  • PGA - 서버 프로세스가 할당받는 공간
    • 프로세스 종속적인 고유 데이터 저장 공간
    • 타 프로세스와 공유하지 않아 Latch 없어 SGA 보다 빠름


  • UGA - 각 세션이 할당받는 공간
    • 전용 서버 방식일 경우 PGA 내부 존재(공유일 경우 SGA)
    • 마지막 Row Fetch 시 할당공간 반환 됨


  • CGA(Call global area)
    • 한번의 DB Call 시에 사용되는 공간, 끝나면 바로 PGA 반환(다음 Call 에도 계속 참조되는 데이터는 UGA 로)
    • Parse, Execute, Fetch call 시에 매번 할당됨(Recursive call 일 경우도 동일)


Sort area 할당 위치
  • Insert, Update, Delete - UGA
    • Execute call 이 끝나면 모든 데이터 처리 완료하고 커서가 닫히기 때문에 Call 을 넘어서 저장 할 필요 없음


  • SELECT
    • 중간 졍렬: CGA(처음 Fetch call에서만 사용하므로)
    • 최종 정렬: UGA(계속 이어지는 Fetch call 에서 사용해야 하므로 UGA 할당)
    • sort_area_retained_size 제약 있으면 CGA에서 정렬 후 이 사이즈만큼의 공간을 UGA 로...
    • 이후 Fetch call 에서 Array 단위만큼 조금씩 전송


소트 수행 분류


메모리(PGA) 처리 가능 여부 따른 분류
  • Memory Sort(Interal Sort)
  • Disk Sort(External Sort)


소트 수행 상 분류
  • 양이 많을 때는 중간 소팅 결과값을 TEMP TBS 에 저장 후 중간 결과값을 머지 해서 최종 결과 생성
  • Sort run - 임시 저장한 중간 결과 값


Optimal Sort : Memory Sort


Onepass : Disk Sort
  • 소트 영역이 TEMP TBS 에 저장한 각각의 Sort Run 에서 하나의 Chunk 씩 읽을 수 있으면 추가 Disk I/O 없이 단발성 Disk Sort 만으로 가능함



Multipass : Disk Sort
  • 각각의 Sort Run 에서 Chunk 하나씩 빼서 읽는 것도 안되면 Disk 에서 읽은 데이터를 다시 Disk 에 정렬하는 작업을 반복



소트 수행 측정


Trace
  • Statistics 트레이스 통계에서 sort(memory), sort(disk) 항목 참조하면 됨
  • Physical read >= Consistance gets + db block gets: Trace 의 Disk 블록 수가 Memory 블록 수를 초과할 수 없으나, Sort I/O 까지 Disk I/O 로 계산 됨
  • Buffer 에 데이터가 다 올라와 있어도 Sort로 인한 Disk I/O 발생 가능
  • Sort I/O 는 Disrect path 이므로 일반적으로 가벼움


소팅 참조 가능한 뷰
  • v$sysstat (sesstat, mystat)
  • v$sort_segment
  • v$sort_usage
  • v$temp_extent_pool


소트 튜닝은

  • 모델측면 검토
  • 소팅 발생 안하게 SQL
  • 인덱스 이용한 소팅 대체
  • 소트 Area 사이즈 튜닝


"구루비 데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 고도화 원리와 해법 II " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3297

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입