사용자 도구

사이트 도구


study:oracle:datadb:2week_1:chap2

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
study:oracle:datadb:2week_1:chap2 [2010/05/13 17:18]
newys
study:oracle:datadb:2week_1:chap2 [2010/05/13 21:00] (현재)
starlits
줄 56: 줄 56:
      =>컬럼값의 범위별로 분포도 보유하는 방법      =>컬럼값의 범위별로 분포도 보유하는 방법
      
-  - 컬럼값에 저장할 분포도의 종류는 버켓(Bucker)의 개수에 따라 결정+  - 컬럼값에 저장할 분포도의 종류는 버켓(Bucket)의 개수에 따라 결정
          
    · 넓이균형 히스토그램(Width_balanced Histogram) :버켓에 저장할 분포도는 컬럼값의 최소치와 최대치에 대해     · 넓이균형 히스토그램(Width_balanced Histogram) :버켓에 저장할 분포도는 컬럼값의 최소치와 최대치에 대해 
줄 111: 줄 111:
         * 시스템 통계(System statistics) : 해당 시스템이 가지고 있는 성능특성을 실제로 측정함으로 보다 정확한 정보를 옵티마이져에게 제공         * 시스템 통계(System statistics) : 해당 시스템이 가지고 있는 성능특성을 실제로 측정함으로 보다 정확한 정보를 옵티마이져에게 제공
         * 시스템 통계를 생성할 때는 지정한 기간동안 시스템에서 실제로 일어나고 있는 활동들을 모니터링하고 분석         * 시스템 통계를 생성할 때는 지정한 기간동안 시스템에서 실제로 일어나고 있는 활동들을 모니터링하고 분석
-        * 관련 프로시져(DBMS_STATS.GATHER_SYSTEM.STATS)를 수행시켜 통계정보를 수집해 주어야 함+        * 관련 프로시져(DBMS_STATS.GATHER_SYSTEM_STATS)를 수행시켜 통계정보를 수집해 주어야 함
     - 통계정보 교체하는 방법     - 통계정보 교체하는 방법
         * DBMS_STATS패지지의 ‘IMPORT_SYSTEM_STATS' 프로시져를 사용하면 간단         * DBMS_STATS패지지의 ‘IMPORT_SYSTEM_STATS' 프로시져를 사용하면 간단
줄 139: 줄 139:
      * OLTP형 업무처럼 배치처리 위주의 시스템이라면 ALL_ROWS를 지정하는 것이 좋다      * OLTP형 업무처럼 배치처리 위주의 시스템이라면 ALL_ROWS를 지정하는 것이 좋다
      * 옵티마이져 모드를 운영중에 바꾸는 것은 위험    => 옵티마이져 버전을 지정할 때 초기 설정 파라메터에 과거에 사용하던 버전을 지정 (OPTIMIZER_FEATURES_ENABLE 파라메터) / 실행계획 요약본을 생성 하여 이를 참조하게 하는 아우트라인(Outline)이용      * 옵티마이져 모드를 운영중에 바꾸는 것은 위험    => 옵티마이져 버전을 지정할 때 초기 설정 파라메터에 과거에 사용하던 버전을 지정 (OPTIMIZER_FEATURES_ENABLE 파라메터) / 실행계획 요약본을 생성 하여 이를 참조하게 하는 아우트라인(Outline)이용
-<code> + 
-OLTP [online transaction processing]  +== OLTP [online transaction processing] == 
-  정의 : 온라인 업무의 처리 형태의 하나이다. 터미널에서 받은 메시지를 따라 호스트가 처리를 하고, 그 결과를 다시 터미널에 되돌려주는 방법. +  
-  -- 네트워크상의 여러 이용자가 실시간으로 데이터베이스의 데이터를 갱신하거나 조회하는 등의 단위 작업을 처리하는 방식을 말한다. 주로 신용카드 조회 업무나 자동 현금 지급 등 금융 전산 관련 부문에서 많이 발생하기 때문에 ‘온라인 거래처리’라고도 한다. 이 방식의 특징은 기존 컴퓨터 통신에서 이용해 온 온라인 방식과 달리 다수의 이용자가 거의 동시에 이용할 수 있도록 송수신 자료를 트랜잭션(데이터 파일의 내용에 영향을 미치는 거래 ·입출고 ·저장 등의 단위 행위) 단위로 압축, 비어 있는 공간을 다른 사용자들이 함께 쓸 수 있도록 한 점이다. </code>+  정의 : 온라인 업무의 처리 형태의 하나이다. \\ 터미널에서 받은 메시지를 따라 호스트가 처리를 하고, 그 결과를 다시 터미널에 되돌려주는 방법. 
 +  - 네트워크상의 여러 이용자가 실시간으로 데이터베이스의 데이터를 갱신하거나 조회하는 등의 단위 작업을 처리하는 방식을 말한다.  
 +  - 주로 신용카드 조회 업무나 자동 현금 지급 등 금융 전산 관련 부문에서 많이 발생하기 때문에 ‘온라인 거래처리’라고도 한다.  
 +  - 이 방식의 특징은 기존 컴퓨터 통신에서 이용해 온라인 방식과 달리 다수의 이용자가 거의 동시에 이용할 수 있도록 \\ 송수신 자료를 트랜잭션(데이터 파일의 내용에 영향을 미치는 거래 ·입출고 ·저장 등의 단위 행위) 단위로 압축, \\ 비어 있는 공간을 다른 사용자들이 함께 쓸 수 있도록 한 점이다. </code>
  
 ===다.옵티마이져 모드와 관련된 파라메터 지정 === ===다.옵티마이져 모드와 관련된 파라메터 지정 ===
     * CURSOR_SHARING : SQL문장 내의 조건절에 있는 상수값들을 변수로 전환시켜 파싱     * CURSOR_SHARING : SQL문장 내의 조건절에 있는 상수값들을 변수로 전환시켜 파싱
 +       * FORCE, SIMILAR, EXACT (default)
 +       * EXACT는 대·소문자, 공백, 비교 상수값이 조금만 달라도 공유 못함
 +        * SIMILAR, FORCE는 조건절에 상수값을 변수로 인정하여 실행계획을 수립\\ 실행계획의 공유비율을 높임. 그러나 ‘ALTER SESSION’ 명령을 이용한 변경이 바람직함
 +        * 아우트라인 적용 시는 EXACT를 지정해서는 안됨  
     * DB_FILE_MULTIBLOCK_READ_COUNT : 전체 테이블을 스캔하거나 인덱스 고속전체스캔을 할 때 한번의 I/O에 읽어야 할 블록 수를 지정     * DB_FILE_MULTIBLOCK_READ_COUNT : 전체 테이블을 스캔하거나 인덱스 고속전체스캔을 할 때 한번의 I/O에 읽어야 할 블록 수를 지정
 +        * 운송단가와 같은 것, 옵티마이져가 비용을 계산할 때 중요하게 사용
 +        * 기본값은 8로 지정. 대용량의 배치처리를 위주라면 좀더 증가
     * OPTIMIZER_INDEX_CACHING : Nested Loops 조인이나 IN_List 탐침으로 수행되어 인덱스를 통해 반복해서 랜덤 액세스를 할 때 인덱스 블록들이 버퍼에 캐쉬되어 있을 확률을 나타냄     * OPTIMIZER_INDEX_CACHING : Nested Loops 조인이나 IN_List 탐침으로 수행되어 인덱스를 통해 반복해서 랜덤 액세스를 할 때 인덱스 블록들이 버퍼에 캐쉬되어 있을 확률을 나타냄
-    * OPTIMIZER_INDEX_COST_ADJ : 비용계산을 할 때 인덱스의 액세스 비중을 조정하는 역할을 담당하며 기본값은 100으로 되어 있음.+       * 기본값은 0으로 지정 
 +       * 메모리에 부담을 줄 수 있으므로 특정 세션에만 지정하는 것이 바람직함 
 +       * 인덱스가 적은 블록을 가지거나 특정 범위를 액세스하여 재사용률이 높다면 이 값을 증가  
 +    * OPTIMIZER_INDEX_COST_ADJ : 비용계산을 할 때 인덱스의 액세스 비중을 조정하는 역할을  
 +       * 100(기본값)은 계산된 비용을 그대로 적용한다는 의미, 10을 주었다면 1/10로 계산하겠다는 의미 
 +       * 인덱스를 액세스가 전체테이블 스캔으로 자주 나타나면 이 값을 조정 
 +       * 기본값으로 지정해 두고, 특정한 세션에 대해서만 선별적으로 적용 
 +    
     * 옵티마이져가 규칙기준에서 비용기준으로 넘어가면서 ‘CHOOSE'모드에 대응되는 대책 필요(WHY? 통계정보를 가지고 있지 않으므로)      * 옵티마이져가 규칙기준에서 비용기준으로 넘어가면서 ‘CHOOSE'모드에 대응되는 대책 필요(WHY? 통계정보를 가지고 있지 않으므로) 
       *  동적표본화 (Dynamic Sampling) : 소량의 표본을 동적으로 추출하여 통계정보로 활용       *  동적표본화 (Dynamic Sampling) : 소량의 표본을 동적으로 추출하여 통계정보로 활용
줄 171: 줄 187:
        * TRUE로 지정하면 ‘DEFAULT'이름의 카테고리로 아우트라인이 생성생성된 아우트라인을 사용하기 위해서는              USE_STORED_OUTLINES명령을 이용        * TRUE로 지정하면 ‘DEFAULT'이름의 카테고리로 아우트라인이 생성생성된 아우트라인을 사용하기 위해서는              USE_STORED_OUTLINES명령을 이용
        * 개별아우트라인을 사용하는 이유? 공식적으로 적용하기 미흡 or 조정필요시        * 개별아우트라인을 사용하는 이유? 공식적으로 적용하기 미흡 or 조정필요시
-         * 조정필요시 작업과정 <code>① 기존의 아우트라인에서 새로운 개별 아우트라인으로 복제 +         * 조정필요시 작업과정  
-   CREATE PRIVATE OUTLINE prv_01_1 FROM outln_1; +         기존의 아우트라인에서 새로운 개별 아우트라인으로 복제 \\  CREATE PRIVATE OUTLINE prv_01_1 FROM outln_1; 
-② 아우트라인을 수정할 수 있는 툴이나 DBMS_OUTLN_EDIT패키지에 있는 여러 프로시져를 갱신                        +        아우트라인을 수정할 수 있는 툴이나 DBMS_OUTLN_EDIT패키지에 있는 여러 프로시져를 갱신 \\  REFRESH_PRIVATE_OUTLINE 프로시져로 다시 한번 CREATE PRIVATE OUTLINE 명령으로 리플래쉬 
-   REFRESH_PRIVATE_OUTLINE 프로시져로 다시 한번 CREATE PRIVATE OUTLINE 명령으로 리플래쉬 +        -  생성된 개별 아우트라인을 검증하기 위해 USE_PRIVATE_OUTLINES을 TRUE로 지정하고 검증 
-③ 생성된 개별 아우트라인을 검증하기 위해 USE_PRIVATE_OUTLINES을 TRUE로 지정하고 검증 +        -  충분한 검증을 끝내고 공식적인 적용 \\ CREATE OR REPLACE OUTLINE outln_1 FROM PRIVATE prv_01_1; 
-④ 충분한 검증을 끝내고 공식적인 적용 +        적용이 되었으면 USE_PRIVATE_OUTLINES을 FALSE로 지정하여 자신의 개별 아우트라인 수행 종료</code>
-   CREATE OR REPLACE OUTLINE outln_1 FROM PRIVATE prv_01_1; +
-⑤ 적용이 되었으면 USE_PRIVATE_OUTLINES을 FALSE로 지정하여 자신의 개별 아우트라인 수행 종료</code>+
                          
 ===나. 아우트라인의 관찰 === ===나. 아우트라인의 관찰 ===
   - 생성된 아우트라인은 딕셔너리 테이블에 저장   - 생성된 아우트라인은 딕셔너리 테이블에 저장
   - 뷰를 통해 내용 확인 가능   - 뷰를 통해 내용 확인 가능
 +   * EX> USER_OUTLNES OR USER_OUTLINE_HINTS  (권한 USER ->ALL OR DBA)
 <code> <code>
 EX> select empno, ename, job, loc  EX> select empno, ename, job, loc 
줄 191: 줄 206:
 {{:study:oracle:datadb:2week_1:4.jpg|}} {{:study:oracle:datadb:2week_1:4.jpg|}}
  
 +  * 실제테이블인 OUTLN.OL$HINTS에서 확인
 +{{:study:oracle:datadb:2week_1:6.jpg|}}
  
 ===다. 옵티마이져 업그레이드 시의 적용=== ===다. 옵티마이져 업그레이드 시의 적용===
-  - 규칙기반에서 전환하는 경우 <code> +  - 규칙기반에서 전환하는 경우  
-① 현재의 규칙기준으로 수행되는 SQL에 대하여 특정 카테고리를 주고 아우트 라인 생성 +    현재의 규칙기준으로 수행되는 SQL에 대하여 특정 카테고리를 주고 아우트 라인 생성 \\ ALTER SESSION SET CREATE_STORED_OUTLINES =category_name; \\ 전체적으로 원한다면 ALTER SYSTEM 으로 한다. 
- ALTER SESSION SET CREATE_STORED_OUTLINES =category_name; +    수집기간을 적절하게 한다. 
-  전체적으로 원한다면 ALTER SYSTEM 으로 한다. +    아우트라인 생성을 종료시키려면 CREATE_STORED_OUTLINES파라메터를 'FALSE'로 지정 
-② 수집기간을 적절하게 한다. +    DBMS_STATS 패키지를 이용하여 통계정보 생성 
-③ 아우트라인 생성을 종료시키려면 CREATE_STORED_OUTLINES파라메터를 'FALSE'로 지정 +    옵티마이져 모드를 RULE에서 CHOOSE로 변경 
-④ DBMS_STATS 패키지를 이용하여 통계정보 생성 +    ALTER SESSION 명령어를 이용하여 USE_STORED_OUTLINES 파라메터에 앞서 생성해 두었던 카페고리를 지정하여 아우트라인 적용( ALTER SYSTEM)
-⑤ 옵티마이져 모드를 RULE에서 CHOOSE로 변경 +
-⑥ ALTER SESSION 명령어를 이용하여 USE_STORED_OUTLINES 파라메터에 앞서 생성해 두었던 카페고리를 지정하여 아우트라인 적용( ALTER SYSTEM) +
-</code>+
   -옵티마이저 버전 업그레이드    -옵티마이저 버전 업그레이드 
     * 위 ①~③번 수행후 애플리케이션을 수행하면서 테스트 실시     * 위 ①~③번 수행후 애플리케이션을 수행하면서 테스트 실시
     * 업그레이드 후 문제가 발생되면 아우트라인을 적용하여 과거 버전의 수행계획을 고수 ->향상된 옵티마이져 혜택 받지 못함->이전 버전에 대한 아우트라인을 생성할 때 분류별로 카테고리 생성     * 업그레이드 후 문제가 발생되면 아우트라인을 적용하여 과거 버전의 수행계획을 고수 ->향상된 옵티마이져 혜택 받지 못함->이전 버전에 대한 아우트라인을 생성할 때 분류별로 카테고리 생성
-  - 아우트라인 적용방법<code> +  - 아우트라인 적용방법 
-① 원하는 대상 SQL에 대해 원하는 실행계획을 아우트라인으로 생성 +    원하는 대상 SQL에 대해 원하는 실행계획을 아우트라인으로 생성 <code sql> 
-  ALTER OUTLINES outline_name CHANGE CATEGORY TO out_category_name; +ALTER OUTLINES outline_name CHANGE CATEGORY TO out_category_name; 
- +</code> 
-② ALTER SESSION SET USE_STORED_OUTLINES=our_category_name을 통해 아우트라인 적용</code>+    ALTER SESSION SET USE_STORED_OUTLINES=our_category_name을 통해 아우트라인 적용
  
  
study/oracle/datadb/2week_1/chap2.1273738732.txt.gz · 마지막으로 수정됨: 2010/05/13 17:18 저자 newys