본문 바로가기
개발자 일지/DB

[SQLP 대비] Oracle 기반 DB 튜닝 용어 정리 Part 1

by 네빌링 2025. 5. 9.

SQLP 준비 용어 및 개념 정리하는 포스팅입니다. 앞으로 공부하면서 계속 용어 정리 후 포스팅할 예정입니다. 

 

[참고 서적]

 

친절한 SQL 튜닝(구매 바로가기)

 

친절한 SQL 튜닝 | 조시형 - 교보문고

친절한 SQL 튜닝 | 책 제목은 필자가 애청하는 라디오 프로그램 ‘손에 잡히는 경제’ 중 ‘친절한 경제’라는 코너에서 착안했다. 어려운 경제 이슈를 일반인 눈높이에 맞게 풀어서 설명해 주는

product.kyobobook.co.kr

 


  • 비트맵 인덱스(bitmap index)
    • 특정 컬럼 값에 대해 비트를 사용해서 인덱싱 하는 방법
    • 카디널리티가 낮은 컬럼(성별 등)이 유리
    • 빠른 검색과 논리 연산 가능(비트끼리 AND / OR 연산 등)

 

  • Index Skew
    • 인덱스 값이 특정 값에 몰려 있어서 인덱스 성능이 떨어지는 현상
    • 컬럼값 A,B가 있고 A 98% B 2%면 A값 조건 찾을 때 Full table scan이 더 나음

 

  • 히스토그램
    • 데이터 분포를 DB 옵티마이저가 이해할 수 있도록 도와주는 통계 정보
    • SGA(메모리영역)이 아니라 데이터 딕셔너리에 저장 됨(물리디스크에 저장 됨)

 

  • Index Fast Full Scan
    • select절과 where절의 컬럼들이 인덱스 구성에 모두 포함 되어 있는 경우 + order by 없는 경우(필요 없는 경우)
    • 인덱스를 정렬 없이 통째로 읽어서 빠르게 데이터를 가져오는 방법

 

  • Index Full Scan
    • 인덱스 트리구조를 순서대로 타면서 읽음(정렬 유지)
    • ‘ORDER BY 조건’에 조건이 이미 인덱스(정렬된)인 경우

 

  • Or Expansion
    • 조건에 Or이 있으면 인덱스 타기 힘듦
    • 옵티마이저가 Or을 기준으로 쿼리를 나눠서 인덱스 타도록 만듦 → 분리된 쿼리 결과를 UNION ALL로 처리함
    • 실행계획에서 ‘CONCATENATION’으로 나옴

 

  • PL/SQL
    • 프로시저, 함수 등 모두 포함
    • 컴파일시 바이트코드로 만든 후 PL/SQL 엔진으로 실행함
    • 오라클 Native 코드 내장 함수보다 느림
    • 실행시 매번 SQL 실행엔진과 PL/sQL 가상머신 사이에서 컨텍스트 스위칭 발생

 

  • Row Chaning
    • 하나의 데이터가 하나의 블록에 저장될 수 없어서 2개 블록에 저장되는 현상

 

  • Row Migration
    • 하나의 데이터 변경시 크기가 커져 해당 블록에 저장될 수 없는 경우, 기존 블록에 주소를 남기고 그 주소를 포인터로 새로운 블록에 데이터 옮기는 현상
    • 이순신을 을지문덕으로 변경시, 이순신 자리에 포인터주소를 놓고 을지문덕은 다른 블록(포인터가 가리키는)

 

  • 클러스터 팩터(Cluster Factor)
    • 인덱스 스캔을 통해 엑세스 된 데이터 개수 / 엑세스한 블록 수
    • 1에 가까우면 클러스터 팩터 불량(100개 데이터 접근 위해 100개 블록 접근)
    • 0에 근접하면 Row Chaining, Row Migration 발생 한 것으로 봐서 재구성 필요

 

  • HWM(High Water Mark)
    • 세그먼트에 할당된 익스텐트의 공간 중 이미 데이터 저장되어 사용되고 있거나, 아직 미사용 중이지만 오라클 데이터 블록으로 포맷 완료된 사용 가능한 공간을 구분하는 표식
    • 익스텐트에 insert하여 HWM까지 데이터가 차면, HWM Bump up 으로 뒤로 이동
    • 익스텐트 꽉차면 새로운 익스텐트
    • Truncate는 HWM을 맨 앞으로 이동하는거라서 엄청 빠름

 

  • 파티션 프루닝(Partition Prunning)
    • 파티션 테이블의 쿼리 조회시 불필요 파티션 스캔 안 하고 필요한 파티션만 읽는 최적화 기법
    • 파티션 키 컬럼이 함수 안에 있으면 Prunning 안 될 수 있음

 

  • PGA(Program Global Area)
    • 공유영역인 SGA(System Global Area)와 대조되는 비공유 메모리 개념
    • 오라클 프로세스마다 개별 할당 영역
    • 소트 조인 정렬시, 정렬 후 데이터를 PGA에 담아서 사용(Sort Area)
    • 빠르게 접근할 수 있는 영역
    • 동기화에 필수적인 Latch 처리과정이 없기에 빠름
    • PGA 저장이 꽉 차면 테이블스페이스 사용

 

  • NL조인의 Prefetch
    • 인덱스를 이용해 테이블 엑세스 하다가 디스크 I /O필요시(버퍼캐시에 데이터블록 없을시) 이어서 곧 읽을 블록까지 미리 읽어서 버퍼캐시에 적재하는 기법
    • 실행계획에서 Nested Loop 위쪽에 rowid에 의한 테이블 엑세스 접근 표시로 확인
    • Batch와 비교해서 학습 필요

 

  • COUNT(STOPKEY)
    • rownum 사용시 조건에 맞는 일정부분만 읽고 실행을 멈추는 실행계획

 

  • TOP N Query
    • 실행계획에 나오며 상위 N개 추출하는 쿼리
    • 인라인뷰에서 ORDER BY로 먼저 정렬 후 바깥에서 rownum으로 처리
반응형