DB/튜닝 (5) 썸네일형 리스트형 [개념 정리] 조인 튜닝 - 서브 쿼리 조인 쿼리 변환 옵티마이저는 SQL을 최적화에 유리한 형태로 변환, SQL을 의미적으로는 동일 하면서도 더 나은 성능이 기대되는 형태로 재작성 쿼리 블록 단위로(select 절 단위로) 최적화 수행 - 메인쿼리와 서브쿼리를 각각 최적화 하는 형식 -> 서브커리를 독립적으로 최적화 하는 작업이 전체 쿼리 실행에는 부조화 일 수도. 서브쿼리 조인 필터 오퍼레이션(중첩 서브쿼리-exists 해당) NL조인과 동일 처리 루틴(NL 처럼 부분 범위 처리도 가능) NL조인과 차이 메인쿼리 결과 집합이 서브쿼리쪽 집합 수준으로 확장되는 것을 방지하도록, 메인쿼리의 row가 서브쿼리의 한 row 와 조인에 성공하는 순간 진행 멈추고, 메인쿼리 다음 row 계속 처리. (Exists조건절일 때만 이겠지?) 캐싱 기능 : 쿼리.. [개념정리] 조인튜닝 - 소트머지조인, 해시 조인 소트머지조인과 해시조인은 PGA (process/program/private global area - 프로세스에 종속적인 고유 데이터를 저장하는 용도)를 사용해 SGA 버퍼캐시에서 데이터를 읽을 때 보다 훨씬 빠르게 대량의 데이터 조인을 처리 할 수 있다. SGA 에 캐싱된 데이터는 여러 프로세스가 공유 할 수 있지만, 동시 엑세스가 안된다. 프로세스간 엑세스를 래치(lock)로 직렬화 하고, 나아가 블록 읽을 때 버퍼 lock이 실행 되기 때문에 PGA에 비해 느릴 수 밖에 없다. 소트 머지 조인 : 조인 컬럼에 인덱스가 없거나 대량 데이터 조인이여서 인덱스가 효과적이지 않거나 NL은 대량 데이터 조인 시 성능이 매우 느림 - 조인 과정에서 액세스 하는 모든 블록을 랜덤 액세스 방식으로 '건건이' DB.. [개념정리] 조인 튜닝 - NL 조인 인덱스를 이용한 조인으로 인덱스 튜닝 원리 적용. Outer, Inner 테이블 모두 인덱스 사용(Outer 테이블크기가 작다면 Table Full Scan 이용할 수도), Inner 테이블은 인덱스 사용(인덱스 사용 안할 경우Outer 결과집합 건수만큼 Table Full Scan하며 조인 하기 때문) (옵티마이저 힌트 - use_nl(테이블 명 or alias)) Nl 조인은 그 수행 과정에 있어, 중첩 루프 처럼 Outer 테이블의 한 레코드씩 순차적으로 진행한다. NL 조인 특징 랜덤 액세스 방식 - 레코드 하나를 읽기 위해 블록 전체 Read (대량 데이터 조인시 NL조인 불리한 이유) 한 레코드씩 순차 진행 - 부분범위 처리가 가능한 상황에서 빠른 응답 인덱스 구성 전략 중요 - 조인 컬럼 인.. [개념정리] 인덱스 스캔 효율화 인덱스 선행컬럼이 조건절에 없거나, '='조건이 아닐 경우 스캔량이 비효율 적으로 많아진다. 인덱스 스캔 효율성 측정 SQL 트레이스에 인덱스 스캔과정에서 읽은 블록(cr 이 블록 개수 인데, 인덱스 리프 블록에는 평균 500개의 레코드가 담기므로, 읽은 블록 수 * 500 = 읽은 레코드 수) 수에 비해 얻은 레코드 수가 현저히 적다면 비효율 정도를 가늠 할 수 있다. 액세스 조건 / 필터 조건 인덱스 스캔 단계에 처리하는 조건절은 액세스 조건 / 필터 조건으로 나뉨 인덱스 액세스 조건 : 인덱스 스캔 범위를 결정하는 조건 (스캔 시작점을 결정, 리프블록 스캔 중 어디서 멈출지를 결정) 인덱스 필터 조건 : 테이블로 액세스 할 지를 결정하는 조건(p.183 c4가 테이블 액세스..? 여기서 테이블 액세.. [개념정리] 인덱스 인덱스 RowId에 대한 오해 인덱스를 통한 RowId로 테이블 액세스는 고비용연산 이다. -> Index Range Scan이 Table Full Scan보다 오래 걸릴 수 있다. RowId가 메인 메모리 DB 처럼 물리적으로 데이터와 바로 연결된 포인터가 아니라, 디스크 상에서 테이블 레코드를 찾아가기 위한 위치정보를 담는 논리적 주소이기 때문. 포인터의 역할을 할 수 없는 이유는? 테이블 블록이 LRU에 의해 캐싱되었다, 밀려났다 다시 캐싱되기를 반복, 그때마다 다른 공간에 캐싱되므로, 인덱스에서 포인터로 연결 할 수 없다. 읽어야 할 데이터가 일정량을 넘는 순간, 테이블 전체를 스캔 하는 것보다 오히려 느려진다.(인덱스 손익 분기점) Table Full Scan은 추출 건수와 상관없이 조회 성능이.. 이전 1 다음