본문 바로가기

오라클5

SQL 옵티마이저 SQL 옵티마이저 통계정보와 비용 계산 원리 #선택도(Selectivity) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율을 말한다. 선택도 = 1 / NDV (Number of Distinct Value, 컬럼 값 종류 개수) 상품분류 컬럼에 가전, 의류, 식음료, 생활용품 4개의 값이 있을 때 선택도는 1/4 = 25% 이다. #카디널리티(Cardinality) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수 카디널리티 = 총 로우 수 * 선택도 = 총 로우 수 / NDV 전체 레코드가 10만건이면, 카디널리티는 10만 / 4 = 2만 5천이다. 옵티마이저는 이렇게 카디널리티를 구하고, 그만큼의 데이터를 액세스하는 데 드는 비용을 계산해서 테이블 액세스 방식, 조인 순서, 조인 방식 .. 2022. 1. 30.
DML 튜닝 DML 튜닝 DML 성능에 영향을 미치는 요소 1. 인덱스 2. 무결성 제약 3. 조건절 4. 서브쿼리 5. Redo 로깅 6. Undo 로깅 7. Lock 8. 커밋 Redo Log 목적 1. Database Recovery (물리적인 디스크 오류) 2. Cache Recovery (정전 등 비정상적인 인스턴스 종료) 3. Fast Commit 사용자의 갱신내용이 메모리상의 버퍼블록에만 기록된 채 아직 디스크에 기록되지 않았지만 Redo 로그를 믿고 빠르게 커밋을 완료한다는 의미에서 이를 'Fast Commit'이라고 부른다. Redo 트랜잭션을 재현함으로써 과거를 현재 상태로 되돌리는 데 사용 Undo 트랜잭션을 롤백함으로써 현재를 과거 상태로 되돌리는 데 사용 Undo Log 목적 1. Transa.. 2022. 1. 22.
계층형 쿼리 계층형 쿼리 계층 쿼리 구조 Syntax START WITH - 계층 질의의 루트(부모행)로 사용될 행을 지정 한다. - 서브쿼리를 사용할 수도 있다. CONNECT BY - 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 할 수 있다. - PRIOR 연산자와 함께 사용하여 계층구조로 표현할 수 있다. - CONNECT BY PRIOR 자식컬럼 = 부모컬럼 : 부모에서 자식으로 트리구성 (Top Down) - CONNECT BY PRIOR 부모컬럼 = 자식컬럼 : 자식에서 부모로 트리 구성 (Bottom Up) - CONNECT BY NOCYCLE PRIOR : NOCYCLE 파라미터를 이용하여 무한루프 방지 - 서브쿼리를 사용할 수 없다. LEVEL Pseudocol.. 2022. 1. 18.
인덱스 튜닝 인덱스 튜닝 테이블 액세스 최소화 SQL 튜닝은 랜덤 I/O와의 전쟁이다. 인덱스 ROWID는 논리적 주소다. 디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보를 담는다. 인덱스 ROWID는 우편주소이고 우체부 아저씨가 일일이 찾아다니는 구조이다. 메모리DB의 경우는 전화통신 구조이다. 인덱스 손익분기점 1. Table Full Scan은 시퀀셜 액세스인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 랜덤 액세스 방식이다. 2. Table Full Scan은 Multiblock I/O인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 Sigle Block I/O 방식이다. Table Full Scan은 성능이 일정하다. 1000만건중 한 건을 조회하든, 10만건을 조회하든 차이가 거의 없다. .. 2021. 12. 5.