SQLP
[친절한 SQL 튜닝] 6. DML 튜닝 [1]
2025.02.09
기본 DML 튜닝DML 성능에 영향을 미치는 요소인덱스무결성 제약조건절서브쿼리Redo 로깅Undo 로깅Lock커밋 데이터베이스 Call과 성능Parse Call : SQL 파싱과 최적화를 수행하는 단계Execute Call : SQL을 실행하는 단계Fetch Call : 데이터를 읽어서 사용자에게 결과집합을 전송하는 과정으로 SELECT문에서만 나타난다.User Call : 네트워크를 경유해 DBMS 외부로부터 인입되는 CallRecursive Call : DBMS 내부에서 발생하는 Call. 사용자 정의 함수/프로시저/트리거에 내장된 SQL을 실행할 때 발생한다. 데이터 Call이 많으면 성능은 느릴 수밖에 없다. 특히, 네트워크를 경유하는 User Call이 성능에 미치는 영향은 매우 크다.  인덱스..
SQLP
[친절한 SQL 튜닝] 4. 조인 튜닝
2025.02.03
NL 조인NL 조인은 '인덱스를 이용한 조인 방식'이라고 할 수 있다. 소트 머지 조인과 해시 조인도 각각 Sort Area와 Hash Area에 가공해 둔 데이터를 이용한다는 점만 다를 뿐, 기본적인 조인 프로세싱은 다르지 않다. NL 조인 수행 과정 분석각 단계를 모두 완료하고 다음 단계로 넘어가는 게 아니라 한 레코드씩 순차적으로 진행한다. 사원_X1 인덱스를 읽고 나서 테이블을 액세스하는 부분고객_X1 인덱스를 탐색하는 부분고객_X1 인덱스를 읽고 나서 테이블을 액세스하는 부분사원_X1 인덱스를 스캔하면서 추출한 레코드가 많으면 사원 테이블로 랜덤 액세스하는 횟수, 고객_X1 인덱스를 탐색하는 횟수, 고객 테이블로 랜덤 액세스하는 횟수가 전반적으로 많아진다.올바른 조인 메소드 선택OLTP 시스템..
SQLP
[친절한 SQL 튜닝] 3. 인덱스 튜닝
2025.02.02
테이블 액세스 초기화인덱스 ROWID는 논리적 주소이다.디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보를 담는다.\포인터가 아니다.메인 메모리 DB와 비교오라클은 테이블 블록이 수시로 버퍼캐시에서 밀려났다가 다시 캐싱되며, 그때마다 다른 공간에 캐싱되기 때문에 인덱스에서 포인터로 직접 연결할 수 없는 구조이다.메모리 주소 정보(포인터)가 아닌 디스크 주소 정보(DBA)를 이용해 해시 알고리즘으로 버퍼 블록을 찾아간다.I/O 메커니즘블록을 읽을 때는 디스크로 가기 전에 버퍼캐시부터 찾아본다. 읽고자 하는 DBA를 해시 함수에 입력해서 해시 체인을 찾고 거기서 버퍼 헤더를 찾는다.버퍼 헤더를 찾고, 거기서 얻은 포인터로 버퍼 블록을 찾아간다.테이블을 Full Scan 할 때는 익스텐트 맵을 통해 읽을..
SQLP
[친절한 SQL 튜닝] 7. SQL 옵티마이저 [2]
2025.01.23
7.2 옵티마이저에 대한 이해 7.2.1 옵티마이저 종류비용기반(Cost-Based) 옵티마이저(CBO)사용자 쿼리를 위해 후보군이 될만한 실행계획을 도출데이터 딕셔너리에 미리 수집해 둔 통계정보를 이용해 각 실행계획의 예상비용을 산정하고, 그중 가장 낮은 비용의 실행계획 하나를 선택하는 옵티마이저데이터량, 컬럼 값의 수, 컬럼 값 분포, 인덱스 높이, 클러스터링 팩터 등이 CBO가 사용하는 통계정보규칙기반(Rule-Based) 옵티마이저(RBO)각 액세스 경로에 대한 우선순위 규칙에 따라 실행계획을 만드는 옵티마이저통계정보를 전혀 활용하지 않고 단순한 규칙에만 의존하기 때문에 대량 데이터를 처리하는데 부적합함  7.2.2 옵티마이저 모드최적화 목표를 설정하는 기능으로서 아래 세 가지 옵티마이저 모드 중..
SQLP
[친절한 SQL 튜닝] 7. SQL 옵티마이저 [1]
2025.01.23
7.1 통계정보와 비용 계산 원리 7.1.1 선택도와 카디널리티선택도(Selectivity)란, 전체 레코드 중에서 조건절에 의해 선택되는 레코드의 비율을 말함.가장 단순한 '=' 조건으로 검색할 때의 선택도만 살펴보면, 컬럼 값 종류 개수(NDV)를 이용해 아래와 같이 구한다. 선택도 = 1 / NDV(Number Of Distinct Values)  카디널리티(Cardinality)란, 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수이며, 아래 공식으로 구한다.  카디널리티 = 총 로우 수 * 선택도 = 총 로우 수 / NDV 예를 들어, 상품분류 컬럼에 '가전', '의류', '식음료', '생활용품' 네 개의 값이 있을 때, 아래 조건절에 대한 선택도는 25%(1/4)다.만약 전체 레코드가 1..