728x90
반응형
SMALL

Data Base 163

pushing subquery, view merging, join 조건 pushdown

■ pushing subquery 1. 정의 - 실행 계획의 초기 단계에서 서브쿼리 필터링을 먼저 처리하여, 다음 수행 단계로 전달되는 행의 수를 줄일 수 있는 기능 - Unnesting되지 않은 서브쿼리의 처리 순서를 제어하여 최적화된 실행 계획을 구성하는 방법 중 하나이다. 2. 힌트 - `push_subq` 힌트는 Oracle Optimizer에게 서브쿼리를 최적화하는 방식을 알려주는 역할이다. - 이 힌트를 사용하면 서브쿼리의 필터링을 가능한 한 빨리 수행하도록 유도하여 효율적인 실행 계획을 생성할 수 있다. 3. 활용 - 서브쿼리가 Unnesting되지 않았을 때, 전체 테이블을 스캔하는 비효율적인 실행 계획을 방지하고자 할 때 Pushing Subquery를 사용한다. - Pushing Sub..

hash join

■ hash join 1. 정의 - 대량의 데이터에 대한 조인 연산에서 효과적으로 사용되는 조인 알고리즘 중 하나. - Nested loop join의 랜덤 액세스 부다과 Sort Merge Join의 정렬 작업 부담을 피하기 위해서 사용됨. 2. 동작원리 - 작은 쪽의 집합을 Build Table로 선택하여 Hash Table 을 생성. - 큰 쪽의 집합을 Probe 하여 Hash Table 을 탐색하여 조인 수행. - Hash Table은 Hash Area Size로 지정된 메모리 영역에 생성. 3. 조인 제약 조건 - Equal(=) 조건만 가능: Hash Join은 등호 조건에서만 사용 가능하며, 일반적으로 등호 조건에서 성능이 가장 좋음. 4. 효과적인 경우 - 작은 집합이 Build Table..

Sort Merge Join

■ Sort Merge Join(정렬 병합 조인) 1. 개념 및 설명 - 조인되는 건수가 많을때 효율적인 조인방법이다. - 대용량 데이터셋 간의 조인에서 사용되며, 정렬 작업에 대한 성능 문제가 발생할 수 있다. 2. 성능 및 힌트 - 조인 대상인 테이블이 크고 조인되는 건수가 많을때 유리하다. - sort에 대한 성능 문제가 있을 수 있으므로, 주의가 필요없다. - 사용가능한 힌트: 'use_merge()', 'leading()' 1) use_merge(): sort merge join 사용 힌트 2) leading(): 조인 집합 중 어느 쪽을 먼저 수행할지에 대한 힌트, 일반적으로 한 쪽 집합을 먼저 수행하는 것이 성능상 이점이 있다. 3. 주의사항 - 조인할 테이블이 대용량이거나 조인 건수가 많을..

join 실행 계획

# test # #) join 중의 data 확인 select /*+ gather_plan_statistics */ e.last_name, e.job_id, d.department_name, l.city from emp e, dept d, loc l where e.department_id = d.department_id and d.location_id = l.location_id and l.city = 'Seattle' and e.job_id = 'AD_VP'; #) 실행 계획 확인 select * from table(dbms_xplan.display_cursor(null, null, 'allstats last')); Id. 9 먼저 드라이빙 해줘야 한다. outer # 해결 방안_인덱스 설정 # #1)..

join 문, index 설정

#) 새로 샘플 테이블 생성. (nologging 조건으로 생성) create table hr.emp nologging as select * from hr.employees; create table hr.dept nologging as select * from hr.departments; create table hr.loc nologging as select * from hr.locations; #) 프로시저 생성 exec dbms_stats.gather_table_stats('hr', 'emp'); exec dbms_stats.gather_table_stats('hr', 'dept'); exec dbms_stats.gather_table_stats('hr', 'loc'); #) 생성 확인 select ..

sort operation, 정렬 작업, 실행 계획, join 순서

■ sort operation select /*+ gather_plan_statistics */ * from employees order by salary desc; select * from table(dbms_xplan.display_cursor(null, null, 'allstats last')); select /*+ gather_plan_statistics */ department_id, sum(salary) from employees group by department_id; select * from table(dbms_xplan.display_cursor(null, null, 'allstats last')); → HASH GROUP BY : 정렬 되지 않음. select /*+ gather_pl..

batch i/o, table prefetch, 옵티마이저

■ batch i/o - inner 쪽 인덱스와 조인하면서 중간 결과 집할을 만든 후에 inner 쪽 테이블과 일괄 (batch) 처리한다. - 힌트: nlj_batching(일괄 처리), no_nlj_batching(일괄처리 X) #) d.location_id = 2500 의 건수 | d.location_id에 index 확인 SELECT /*+ gather_plan_statistics leading(d, e) use_nl(e) */ e.last_name, e.first_name, e.salary, e.job_id, d.department_name FROM departments d, employees e WHERE e.department_id = d.department_id AND d.location_..

PGA, 자동 PGA 메모리 관리

■ PGA - SQL 수행 도중 데이터 정렬이 필요할 떄 오라클은 PGA 메모리에 sort area 를 할당하며 완료여부에 따라 두 가지 유형으로 수행된다. 1) 메모리 소트(in memory sort): 전체 데이터의 정렬 작업을 메모리 내에서 완료. internal sort 2) 디스크 소트 (to dist sort): 할당받은 sort area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용. external sort #) sort area 내에서 데이터 정렬을 마무리 하는 것이 최적이나(optimal), 양이 많을 때는 정렬된 중간 결과 집합(sort run이라고도 한다)을 temporary tablesapce의 temp segment 에 임시 저장한다. #1) optimal sort: sort..

B-Tree 구조, Bitmap 구조 인덱스, session_cached_cursors

■ B-Tree 구조 인덱스 1. 정의 - 우리가 자주 사용하는 index의 일반적인 형태 (root-branch-leaf) - Balanced tree 의 약자 - Binary tree 의 약자 - 즉, Balanced binary Search Tree 구조이다. (균형 이진 탐색 트리) - 테이블이 크고 대부분의 쿼리가 테이블에서 2~4% 미만의 행을 검색할 때 유용하다. 2. B-Tree 생성기준 1) where 조건절에 자주 사용되는 컬럼 2) 유일키값으로 구성되어 있는 컬럼 3) 열의 null값은 제외하고 인덱스 생성해야 함 (null은 스캔 안함) 4) order by 절에 자주 사용되는 컬럼 - 인덱스가 생성될 때 정렬되어서 생성되기 때문에 min, max 함수를 사용할때 cost가 적다 ■..

row chaining, row migration

■ ROW chaining 1) 정의: 한 블록에 저장할 수 있는 한 행의 크기가 블록 크기를 초과하여 해당 행이 여러 블록에 걸쳐 저장되는 현상. 2) 원인: 모델링 오류 또는 블록 크기를 작게 설정한 경우. 3) 문제점: 성능 저하 및 i/o 비용 증가. 4) 해결 방법: 모델링을 재고, 블록 크기를 조절하여 적절한 크기로 설정. # 테이블 row, block, 평균 바이트값 조회 select num_rows, blocks, avg_row_len from dba_tables where owner='HR' and table_name='EMP'; -- num_rows : row의 수 -- blocks : block의 수 -- avg_row_len : 한 행에 평균 바이트값 (체인화를 예방하기위해 확인해볼..

728x90
반응형
LIST