본문 바로가기

반응형

전체 글

oracle - [Hint]병렬처리(APPEND) [Hint]병렬처리(APPEND) [Hint]병렬처리(APPEND) Insert 문에 append 힌트를 사용하게 되면 insert되는 테이블에 이미 존재하는 블록의 빈공간은 사용하지 않고 ROW들이 Append 되는데 새롭게 입력되는 데이터는 Database Buffer Cache를 거치지 않고 direct로 블록에 삽입 됩니다… 이 힌트는 모든 insert에 적용되는 것은 아니며 insert ~ select~ 에만 사용 가능한 힌트 구문 입니다. 참고로 데이터 삽입 시 데이터베이스 버퍼 캐시를 거치지 않고 바로 삽입되는 경우를 direct load라고 하는데 sql*loader와 같은 경우에 direct=y라고 하는 경우가 해당 됩니다. C:>sqlload scott/tiger control=emp... 더보기
oracle - [Hint]규칙 기반 옵티마이저(Rule-Based Optimizer) [Hint]규칙 기반 옵티마이저(Rule-Based Optimizer) 규칙 기반 옵티마이저(Rule-Based Optimizer) 오라클이 규칙 기반 옵티마이저로 동작하는 경우는 initSID.ora 파일에 OPTIMIZER_MODE=RULE or OPTIMIZER_MODE=CHOOSE 이면서 테이블이나 인덱스에 대한 통계 정보가 없는 경우 인데 DW(Data WareHouse)에서는 비용 기반 옵티마이저(Cost-Based Optimizer)가 스타쿼리, 파티션테이블, 구체화 뷰 등을 지원하므로 규칙기반 보다는 비용 기반 옵티마이저가 더 효율적 입니다. 물론 OPTIMIZER_MODE=FIRST_ROWS or FIRST_ROWS_n or ALL_ROWS라고 한다면 통계 정보의 유무와 관계없이 비용 기.. 더보기
oracle - [Hint]Oracle 9i(9.0.2)에서 사용가능한 힌트 [Hint]Oracle 9i(9.0.2)에서 사용가능한 힌트 ALL_ROWS AND_EQUAL ANTIJOIN APPEND BITMAP BUFFER BYPASS_RECURSIVE_CHECK BYPASS_UJVC CACHE CACHE_CB CACHE_TEMP_TABLE CARDINALITY CHOOSE CIV_GB COLLECTIONS_GET_REFS CPU_COSTING CUBE_GB CURSOR_SHARING_EXACT DEREF_NO_REWRITE DML_UPDATE DOMAIN_INDEX_NO_SORT DOMAIN_INDEX_SORT DRIVING_SITE DYNAMIC_SAMPLING DYNAMIC_SAMPLING_EST_CDN EXPAND_GSET_TO_UNION FACT FIRST_ROWS F.. 더보기
oracle - [Hint]Optimizer Mode를 변경하는 힌트(FIRST_ROWS) [Hint]Optimizer Mode를 변경하는 힌트(FIRST_ROWS) Optimizer Mode를 변경하는 힌트(FIRST_ROWS) 처음 로우가 가장 짧은 시간에 추출되도록 실행 계획을 수립하는 힌트 입니다. ALL_ROWS와 비교해 보시기를 바라며 SQL 문장에서 MAX, SUM, COUNT등과 같은 집합 함수를 사용하게 된다면 FIRST_ROWS 힌트는 무시되니 조심하세요~ 당연히 FIRST_ROWS 힌트가 제 성능을 발휘하기 위해서는 통계 정보가 생성되어 있어야 합니다. FIRST_ROWS 힌트는 당연히 하나만 가지고 오면 되니까 Full Table Scan보다는 index scan을 선호할 것이며 Interactive Application인 경우 best response time을 제공할 .. 더보기
oracle - [Hint]Optimizer Mode를 변경하는 힌트(CHOOSE) [Hint]Optimizer Mode를 변경하는 힌트(CHOOSE) Optimizer Mode를 변경하는 힌트(CHOOSE) CHOOSE 힌트인 경우 테이블에 통계 정보가 존재한다면 ALL_ROWS로 동작을 하며 없는 경우엔 RULE-BASED OPTIMIZER로 동작을 하며 CHOOSE, ALL_ROWS는 비용 기반 옵티마이저 환경에서 SQL문의 WHERE 조건을 만족하는 모든 행을 가장 빠르게 검색하는 실행 계획을 결정 합니다. 초기 파일에서 OPTIMIZER_MODE의 default 값은 CHOOSE 입니다. analyze table emp compute statistics analyze table dept compute statistics select /*+ CHOOSE */ e.empno, e... 더보기
oracle - [Hint]Optimizer Mode를 변경하는 힌트(ALL_ROWS) [Hint]Optimizer Mode를 변경하는 힌트(ALL_ROWS) Optimizer Mode 변경(ALL_ROWS) Optimizer_MODE 값인 ALL_ROWS, FIRST_ROWS, CHOOSE, RULE등을 initSID.ora or spfileSID.ora에 설정을 하게되면 전체 DB 시스템에 영향을 미치지만 단일 SQL문장에서 힌트 형태로 사용된다면 해당 쿼리 내에서만 영향을 줍니다. 먼저 ALL_ROWS에 대해 알아보도록 하죠^^ ALL_ROWS는 CBO에서의 default이며 전체 데이터를 가지고 오는데 최적의 경로를 찾으므로 FULL SCAN을 할 가능성이 많이 있습니다. 그러므로 OLTP성 업무보다 Batch성 업무에 적합하다고 할 수 있습니다. Oracle 9i, 10g의 경우 .. 더보기
oracle - [Hint]Optimizer Mode를 변경하는 힌트 (RULE) [Hint]Optimizer Mode를 변경하는 힌트 (RULE) Optimizer Mode를 변경하는 힌트 (RULE) 규칙 기반 옵티마이저(Rule-Based Optimizer)로 동작하여 실행 계획을 세우도록 하는 힌트인데 이 경우 테이블이나 인덱스의 통계 정보가 있다고 하더라도 무시하고 사용하지 않으며 규칙에 기반한 실행 계획을 세우게 됩니다. 옵티마이저는 순위가 매겨진 오퍼레이션에 근거하여 실행 계획을 세우며 순위가 높은 것이 우선 적용 됩니다. (어떤 규칙이 있는지 이전 강좌 “규칙 기반 옵티마이저”를 참고 하세요) 만약 SQL 문장에서 /*+ RULE INDEX(emp idx_ename */ 과 같이 RULE 힌트와 다른 힌트가 같이 사용된다면 RULE 힌트만 적용되니 이점 유념 하세요… s.. 더보기
oracle - [Hint]ACCESS 경로를 변경하는 힌트(USE_CONCAT) [Hint]ACCESS 경로를 변경하는 힌트(USE_CONCAT) [Hint]ACCESS 경로를 변경하는 힌트(USE_CONCAT) USE_CONCAT 힌트는 WHERE벌에 나타나는 OR를 UNION-ALL 연산을 이용하도록 실행 계획을 세우는 역할을 합니다. [형식] /*+ USE_CONCAT */ SELECT ename, sal FROM EMP WHERE ENAME = 'SMITH' OR JOB = 'CLERK' ----------------------------------------------------------------- Operation Object Name Rows Bytes Cost -----------------------------------------------------------.. 더보기
oracle - [Hint]ACCESS 경로를 변경하는 힌트(ROWID) [Hint]ACCESS 경로를 변경하는 힌트(ROWID) [Hint]ACCESS 경로를 변경하는 힌트(ROWID) 이 힌트 구문은 ROWID를 이용하여 테이블 스캔이 이루어 지도록 하는 것인데 간단히 예제만 보도록 하겠습니다. ROWID 힌트를 사용하지 않은 경우 입니다. SELECT * FROM emp WHERE rowid > 'AAAAtkAABAAAFNTAAA' AND empno > 0; Operation Object Name Rows Bytes Cost Object Node In/Out SELECT STATEMENT Optimizer Mode=ALL_ROWS 1 2 TABLE ACCESS BY INDEX ROWID SCOTT.EMP 1 40 2 INDEX RANGE SCAN SCOTT.PK_EMP .. 더보기
oracle - [Hint]ACCESS 경로를 변경하는 힌트(REWRITE) [Hint]ACCESS 경로를 변경하는 힌트(REWRITE) [Hint]ACCESS 경로를 변경하는 힌트(REWRITE) 이 힌트는 CBO에서 Matreriakized views에 대해 Query Rewrite가 일어나도록 하는 힌트인데 8i 이상부터 가능 합니다. REWRITE 힌트 구문에 VIEW가 인자로 와도 되고 안 와도 되는데 인자로 뷰 리스트를 주지 않는 경우 적절한 materialized view를 찾고 항상 비용(COST)과 관계없이 사용 합니다. Materialized views라는 것이 DW(Data WareHouse)에서 집계 데이터 등을 추출할 때 쿼리 수행속도를 빠르게 해주는 것인데 Oracle에서 Query Rewrite가 일어나기 위해서는 다음과 같은 조건이 만족 되어야 합니다.. 더보기

반응형