SQLP 준비 용어 및 개념 정리하는 포스팅입니다. 앞으로 공부하면서 계속 용어 정리 후 포스팅할 예정입니다.
[참고 서적]
친절한 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으로 처리
반응형
'개발자 일지 > DB' 카테고리의 다른 글
[친절한 SQL 튜닝 정리] 2장. 인덱스 기본 (3) | 2025.06.03 |
---|---|
[친절한 SQL 튜닝 정리] 1장. SQL 처리 과정과 I/O (2) | 2025.05.28 |
[SQLP 준비] 친절한 SQL 튜닝 후기 (1) | 2025.05.18 |
[책 후기] SQL레벨업 리뷰 및 정리 (1) | 2024.11.25 |
DB 튜닝 공부 (개념, 용어, 최적화 전략 등) (0) | 2024.09.27 |