728x90
반응형
SMALL

분류 전체보기 342

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..

면접 후기_좋은 경험이였다..!

※ 기억나는 문제들 중 갖고 온 것들 1. SGA , Instance, Database 차이 ■ SGA (System Global Area) - SGA는 오라클 데이터베이스 인스턴스의 메모리 구조 중 하나로, 전체 데이터베이스 인스턴스에서 공유되는 메모리 영역이다. - SGA에는 여러 구성 요소가 있으며, 주요한 요소로는 버퍼 캐시, 공유 풀, 리두 로그 버퍼, 인스턴스 레지스터, 자원 관리자 등이 있다. - 데이터베이스 인스턴스에서 실행되는 모든 세션 및 백그라운드 프로세스에서 공유하는 공통 메모리이다. ■ Instance - Instance는 오라클 데이터베이스의 실행 환경을 나타내는 개념이다. - 물리적인 데이터베이스와 논리적인 데이터베이스를 포함하는 것으로, 메모리 구조(SGA), 백그라운드 프로..

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가 적다 ■..

728x90
반응형
LIST