'Oracle/Tuning'에 해당되는 글 16건

  1. 2010.01.13 [펌]SQL*TRACE와 TKPROF
  2. 2010.01.13 Statistics, Waits
  3. 2010.01.12 Tuning Overview
  4. 2009.12.29 Automatic Performance Management
  5. 2009.12.26 Dynamic Performance View의 이름 / 설명
  6. 2009.12.24 Monitoring and Managing Memory
Oracle/Tuning2010. 1. 13. 22:18

튜닝의 도구 – SQL*TRACE와 TKPROF

Oracle의 SQL*TRACE는 사용자가 실행 한 SQL문에 대해 구문분석(Parsing), 실행(execute), 추출(fetch) 부분으로 나누어 각 단계에서 걸리는 Overhead와 시간 등의 통계 정보를 일정한 형태로 저장 합니다. EXPALIN PLAN에서 제공하는 정보와 더블어 CPU/IO의 필요량, 실행계획의 각 단계에서의 레코드 개수등의 정보도 확인 가능 합니다.  EXPLAIN PLAN 명령어와 함께 자주 사용되는 튜닝의 도구 입니다.

SQL*TRACE나 TKPROF를 실행 했을 때의 결과는 이해하기가 쉽지 않지만 강력한 튜닝의 도구 입니다. SQL*TRACE에 의해 분석되는 결과는 바이너리 형태로 운영체제의 파일 시스템에 생성 됩니다. 물론 바이너리 이므로 결과를 직접 눈으로 보면 이해가 되지 않지만 TKPROF 유틸리티를 이용하여 텍스트 파일 형태로 변환 시켜 확인이 가능 합니다.

SQL*TRACE의 결과는 데이터베이스 전체 또는 특정 세션에 대해 적용 할 수 있는 데이터베이스 전체에 트레이스를 적용하면 실제 Application 수행에 추가적인 부하를 가져오므로 특별한 경우를 제외하고 전체 데이터베이스 시스템에 TRACE를 거는 것은 삼가 해야 합니다. 대부분은 특정 세션에 대해서만 부분적으로 활성화 하여 사용 합니다.


SQL*TRACE의 사용

SQL TRACE를 사용하기 전에 몇 가지 설정이 필요한데 먼저 초기파일에서 USER_DUMP_DEST 파라미터를 확인해야 합니다. 이 매개변수는 TRACE를 실행 할 때 생성되는 파일의 위치를 설정 하는 것입니다. 또한 시간 정보를 TRACE 항목에 추가할려면 TIMED_STATISTICS 항목을 TRUE로 해야 하거나 SQL*Plus등에서는 alter session set timed_statistics=true 라고 해주어야 합니다. 아래에 자세히 확인 하도록 합니다.

TIMED_STATISTICS

시간 통계 정보에 대해 수집여부를 결정, 기본값은 false
세션레벨에서는 alter session set timed_statistics=true라고 하면 됩니다.

MAX_DUMP_FILE_SIZE

TRACE의 결과로 생기는 바이너리 파일의 최대 사이즈를 단위는 블록 입니다. 기본값은 500 블록 입니다. 또한 세션 레벨에서 다음과 같이 지정 가능 합니다. Alter session set max_dump_file_size = 800(800개의 시스템 블록)

USER_DUMP_DEST

TRACE의 결과로 생기는 바이너리 파일의 위치를 지정 합니다. 세션레벨에서는 alter session set user_dump_dest = “C:\oracle\admin\wink\udump” 등으로 지정 합니다.

위의 세개의 파라미터를 init.ora 파일에 지정하였다면 SQL*TRACE의 시작을 전체 데이터베이스에서 할건지 세션 레벨에서 할건지를 정할 수가 있습니다. 인스턴스 레벨에서 할려면 init.ora 파일에서 SQL_TRACE 항목을 TRUE로 설정하면 되구요 세션 레벨에서 할려면 alter session set sql_trace = true 라고 하면 됩니다.

자 이제 실습을 위해 위의 3개의 매개변수를 init.ora 에 설정토록 합니다.

MAX_DUMP_SIZE = 800
TIMED_STATISTICS = TRUE
USER_DUMP_DEST = C:\oracle\admin\wink\udump

다음을 따라 하도록 합니다.

SQL> conn / as sysdba
연결되었습니다.
SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup open
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.

SQL>conn scott/tiger

SQL> alter session set sql_trace=true;

세션이 변경되었습니다.

SQL> select job,avg(sal) from emp
  2  group by job
  3  having avg(sal) > (select avg(sal) from emp
  4  where job = 'SALESMAN');

JOB         AVG(SAL)
--------- ----------
ANALYST         3000
MANAGER   2758.33333
PRESIDENT       5000

session에서 trace를 중지

SQL> alter session set sql_trace=false;

SQL*Plus를 종료하고 c:\oracle\admin\wink\udump에 가보면 trc 파일이 생겼을 것
입니다. 저의 경우 DB SID가 wink이므로 wink_ora_3316.trc 와 같은 파일이 생겼습니다.

TKPROF를 이용하여 TRACE파일을 텍스트 파일로 변경 하기

TKPROF Utility를 이용하면 매우 유용한 분석 정보를 얻을 수 있습니다. 즉 TKPROF의 결과 파일은 트레이스가 실행되는 동안 프로세스에 의해 데이터베이스에서 실행된 작업에 대한 요약 정보 입니다.

텍스트 파일의 내용을 보면 PARSE, EXECUTION, FETCH시 작업을 실행 한 횟수, CPU 사용 시간, 검색된 행이 무엇인지, SQL이 수행된 총 소요시간, DISK IO 블록 수, 조건을 만족하는 전체 행의 수, 수행된 SQL문이 사용한 SGA 영역의 크기, SQL문장의 실행 계획, 해당 세션에서 작업했던 전체 작업에 대한 CPU, 메모리, 블록의 크기 등의 정보를 확인 할 수 있습니다.

SQL문을 해석하기 위해서는 아래의 단계가 필요 합니다.

파싱(parse)

SQL문을 실행 계획으로 번역 하는 것을 말합니다. 해당 SQL을 실행 하는데 필요한 적절한 권한, 컬럼이 있는지, 참조된 객체에 관한 확인 등의 작업이 이루어지게 됩니다.

실행(execution)

오라클에 의해 SQL문을 실제 실행 한 것을 말합니다.

추출/인출(fetch)

쿼리에 의해 추출된 레코드를 이여기 합니다.  Select 문에서만 이용 됩니다.


다음은 TKPROF의 통계 정보 컬럼 입니다.

Count : 분석, 실행, 추출을 몇번 했는지를 나타 냅니다.
CPU : 분석, 실행, 추출에 대한 CPU 처리 시간(CURSOR를 공유하면 분석단계의 처리 시간은 0 입니다.)
Elapsed : 분석, 실행, 추출 처리 단계별로 처리된 소요 시간
Disk : 테이블의 데이터를 읽기 위해 데이터 파일로부터 읽어 들인 블록 수
Query : SELECT로 데이터를 읽어 올 때 이미 다른 사용자에 의해 같은 데이터가 사용 되었다면 그 블록에서 데이터를 가져옵니다.
Current : 메모리에 저장된 데이터를 가지고 오기 위해 읽은 버퍼의 블록 수(update, insert, delete 후 select 했을 때)

TKPROF를 실행하기 위한 문법

Explain = 사용자계정/패스워드(명시된 사용자에 대해 EXPLAIN PLAN 실행)
Print = n (트레이스 파일내의 분석된 SQL문의 수를 n 만큼만 제한할 때 이용)
Record = 파일명(트레이스 파일내에 분석된 SQL문을 지정한 파일에 저장)
Sort=option(트레이스 파일내에 분석된 SQL문을 지정한 옵션에 의해 정렬)
Sys=[NO](트레이스 파일내에 생성된 SQL 문장 중에 오라클 서버가 내부적인 작업을 위해 실행한 SQL문장을 출력 시 포함 할건지를 결정)
Table=스키마.테이블명(실행 계획을 지정한 테이블에 저장)

이전의 SQL*TRACE에 의해 생긴 바이너리 파일을 TKPROF를 이용하여 분석을 해보도록 하겠습니다.

명령프롬픝에서 다음과 같이 실행 합니다.(TRACE 파일이 만들어진 곳에서 실행)

C:\oracle\admin\wink\udump>tkprof wink_ora_3316.trc sql1.tkp sys=no explain=scot
t/tiger

TKPROF: Release 9.2.0.1.0 - Production on 목 Dec 16 01:33:23 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

다음은 sql1.tkp 파일의 내용 입니다.



TKPROF: Release 9.2.0.1.0 - Production on 목 Dec 16 01:33:23 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Trace file: wink_ora_3316.trc
Sort options: default

********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
********************************************************************************

alter session set sql_trace=true


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        1      0.00       0.00          0          0          0           0

Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 59  (SCOTT)
********************************************************************************


아래는 사용자가 실행한 SQL 문장 입니다.

select job,avg(sal) from emp
group by job
having avg(sal) > (select avg(sal) from emp
where job = 'SALESMAN')

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0          6          0           3
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.01          0          6          0           3

Misses in library cache during parse: 1 이 값이 0이라는 의미는 실행한 SQL문이 이전에 실행 된적이 없었음을 나타 냅니다.
Optimizer goal: CHOOSE 옵티마이저 모드 입니다.
Parsing user id: 59  (SCOTT)

Rows     Row Source Operation
-------  ---------------------------------------------------
      3  FILTER  
      5   SORT GROUP BY
     14    TABLE ACCESS FULL EMP
      1   SORT AGGREGATE
      4    TABLE ACCESS FULL EMP


Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
      3   FILTER
      5    SORT (GROUP BY)
     14     TABLE ACCESS   GOAL: ANALYZED (FULL) OF 'EMP'
      1    SORT (AGGREGATE)
      4     TABLE ACCESS   GOAL: ANALYZED (FULL) OF 'EMP'

********************************************************************************

alter session set sql_trace=false


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.01       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.01       0.00          0          0          0           0

Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 59  (SCOTT)



********************************************************************************
아래의 TOTAL은 전체 작업 결과에 대한 분석 결과 입니다.

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          0          0           0
Execute      3      0.01       0.00          0          0          0           0
Fetch        2      0.00       0.00          0          6          0           3
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        7      0.01       0.01          0          6          0           3

Misses in library cache during parse: 1


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.01       0.00          0          3          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.01       0.00          0          3          0           1

Misses in library cache during parse: 0

    3  user  SQL statements in session.
    1  internal SQL statements in session.
    4  SQL statements in session.
    1  statement EXPLAINed in this session.
********************************************************************************
Trace file: wink_ora_3316.trc
Trace file compatibility: 9.00.01
Sort options: default

       1  session in tracefile.
       3  user  SQL statements in trace file.
       1  internal SQL statements in trace file.
       4  SQL statements in trace file.
       4  unique SQL statements in trace file.
       1  SQL statements EXPLAINed using schema:
           SCOTT.prof$plan_table
             Default table was used.
             Table was created.
             Table was dropped.
      54  lines in trace file.


출처 : http://insvelley.tistory.com/tag/trace

'Oracle > Tuning' 카테고리의 다른 글

Statspack  (0) 2010.01.15
Metrics, Alerts and Metric Baselines  (0) 2010.01.14
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Posted by 자수성가한 부자
Oracle/Tuning2010. 1. 13. 16:04
● Statistics
   ◎ Optimizer Statistics
       - Data
       - System
   ◎ Performance Statistics
       - Activity => Data 1. V$ 누적 -> statspack, AWR
                                2. Metric : 단위 시간당 통계
                                3. Sampled Data(ASH)
                                4. Trace file
                    v$statname : activity 관련 지표 전체를 보여주는 뷰
                    v$sysstat : 인스턴스 시작 이래로 있었던 activity의 누적
                    v$sesstat : 현재 연결중인 각 세션의 activity 누적
                    v$service_stats : 서비스 이름별 time model Activity의 누적
                    v$mystat : 내 세션의 Activity의 누적
       - Waits : v$event_name : 발생가능한 wait의 이름들
                    v$system_event, : 인스턴스 시작이래로 발생한 적인 있는 wait누적
                    v$session_event : 현재 세션의 wait누적
                    v$service_event : 서비스별 wait누적
                    v$session_wait :  현재 세션의 지금 wait의 누적
       - Others :

● Basic Tools
   ◎ EM Page
   ◎ Alert log
       : LOG_CHECKPOINTS_TO_ALERT = true 튜닝시에 도움이 되는 정보가 더 남는다.
   ◎ Trace file + event setting

      - server process

OS] conn system/oracle                                     
SQL> alter session set sql_trace = true;                 --  trace파일을 남기도록 sql_trace파일을 설정
SQL> select * 
         from scott.emp
         where empno = 7788;

SQL> ed trace

-------파일에 들어갈 쿼리-------
select
  d.value||'/'||p.value||'_ora_'||s.spid||decode(t.value,null,'','_'||t.value)||'.trc'
  as trace_file_name
from
  (
  select value
  from v$parameter
  where name = 'instance_name'
  ) p,
  (
  select value
  from v$parameter
  where name = 'user_dump_dest'
  ) d,
  (select value
  from v$parameter
  where name = 'tracefile_identifier'
  ) t,
  (
  select spid
  from v$process
  where addr = (
    select paddr
    from v$session
    where sid = (select sid from v$mystat where rownum = 1)
    )
  ) s
;

SQL> @trace                     -- trace파일을 찾는 쿼리 실행
SQL> !vi 파일명
tkprof를 이용해 위에서 남긴 trace파일을 사람이 보기 좋은 형태의 파일로 남길 수 있다.


   ◎ Dynamic Performance View
      - v$fixed_table을 질의하면 전체 목록을 볼 수 있다.
      - 읽기 일관성을 지원하지 않음.
      - 관련 파라미터 : statistics_level

Wait Events
- Free Buffer Wait
- Latch Free
- Buffer Busy Waits :  동시에 여러 프로세스가 동일 블록에 대해 Insert를 하거나 Update를 하는 경우
- Db File Sequential Read
- Db File Scattered Read : 멀티블록 I/O를 한번 수행할 때마다 물리적인 I/O가 끝나기를 기다리게 되며
- Db File Parallel Write : DBWR이 더티 블록를 기록하기 위한 I/O 요청을 보낸 후 요청이 끝나기를 기다리는 동안 발생하는 이벤트
- Undo Segment Tx Slot : 트랜잭션 슬롯을 얻지 못해 이용 가능한 슬롯이 생기기를 기다릴 때 발생하는 대기 이벤트
- Undo Segment Extension : 현재 undo공간이 없어서 늘리고 있는 중일 때 나타나는 지표
- log file switch completion : 서버 프로세스가 LGWR에 의해 로그 파일 스위치가 끝날 때까지 기다릴 때 발생하는 대기 이벤트

SQL> select * from v$event_name;
SQL> select * from v$session_wait;

parameter1, parameter2, parameter3 의 내용이 있다면 v$session_wait의 p1, p2, p3에 나오는 값이 의미하는 내용이다.


Time Model
: 어느 컴포넌트가 문제인가를 판단할 수 있는 유일한 척도가 time이다.
 DB Time = 실제로 cpu를 쓰는 시간 + wait시간.
 ADDM이 문제를 해결하는데 적용되어 있는 기법
 관련 dynamic views : v$sys_time_model, v$sess_time_model


기타 참고사항

- 10046 event
- 10053 event : optimizer의 결정 과정을 볼 수 있다.

- DBA_* : 읽기 일관성을 보장.

- undo : MVCC(MultiVersion Concurrency Control)를 지원하기 위한 매커니즘

- oradebug

'Oracle > Tuning' 카테고리의 다른 글

Metrics, Alerts and Metric Baselines  (0) 2010.01.14
[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Posted by 자수성가한 부자
Oracle/Tuning2010. 1. 12. 14:35
10g PTW(server tuning)의 개요

1. introduction
2. performance tuning : overview
3. statistics, wait
4. metric, alerts, metric baseline
5. statspack            ---------> perfstat 유저, 임의의 ts
6. AWR                   ---------> sys 유저, sysaux ts
7. performance page (EM)

instance tuning
8. shared pool
9. database buffer cache
10. ASMM

instance tuning + database tuning
11. redo log buffer, DBWR, LGWR

database tuning
12. tuning IO, SAME(Stripe And Mirror Everything) - RAID, ASM
13. PGA & Temp TS
14. extent & block

PTW의 사전 조건

1. 최소한이 자원이 갖춰져 있는 상황
2. SQL의 튜닝이 완료된 상태
3. workload의 분산


서버 튜닝이란?

(진단 결과를 해석할 능력이 있으면서)
목표에 맞는 performance가 발휘되도록 시스템의 여러 요소를 조절해가는 과정.


튜닝 질문

1. 누가 튜닝을 하나?  
  - 모든 사람 (DBA를 중심)

2. 무엇을 튜닝하나?
  - 모든 요소
     memory : 적당한 크기
                   SGA에 할당된 메모리의 크기가 너무 커도 재앙 -> sql의 동일 문장 검색시에 시간이 많이 걸림
     I/O : bandwidth - 전송용량

3. 어떻게 튜닝하나?  
  - Tools
    ① basic tool : dynamic performance views, statistics, metrics, EM
    ② AWR or statspack
    ③ ADDM
    ④ DBA scripts : In-house script

  - Methodology(방법론)
    ① 데이터의 수집 -> 데이터 분석 -> 가설 설정 후 솔루션 적용.
    ② Top-Down(proactive) : 이상이 있을 경우 처음부터 다시 검토를 반복하는 방식
        vs Bottom-up(Reactive)


General Tuning Session

1. 문제를 정의하고 목표를 세운다.
   ◎ 문제 정의
      : 비정상적으로 자원을 사용하는 프로세스 찾아냄
        -> 우선 순위를 결정.
        cf) ORACLE 성능분석 방법론   by 김한도
            - More Resource : 메모리, cpu 등의 추가
            - Ratio-Based Analysis (Hit Ratio) 
            - Wait Event Analysis
            - Time Model(10g~) 시간을 줄인다?
               : DB time = DB wait time + DB CPU time
                 두개의 요소(DB wait time, DB CPU time)가 고루 나타나야 좋은 시스템이다.

   ◎ 목표 설정
        
2. 현재 시점의 통계정보를 수집하고, baseline statistics {문제가 없던 시점의 통계(기준치)}과 비교
3. 원인을 찾는다.
4. 해결책을 세운다.
5. 변경을 한다.
6. 해결이 되었는지 검토, 해결이 안되었다면 다시 처음부터 시작


ADDM
: general tuning session의 전부 해결해 줄 수 있음.


Effective Tuning Goals
- Specific (구체적)
- Measurable (측정가능)
- Achievable (달성 가능성)


Tuning Objectives
- Minimizing response time (응답시간감소)
- Increase throughput (처리량 증가)
- Increase load capabilities (로드 용량 증가)
- Decrease recovery time (복구 시간 감소)

RDA (Remote Diagnostics Agent)
 : metalink note : 330363.1

statspack
 : sp*.sql 파일들을 통칭해서 일컫는 말


기타 참고사항


- ASH(Active Session History) : 세션이 하는 일을 1초에 한번 sampling



'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Automatic Performance Management  (0) 2009.12.29
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Monitoring and Managing Memory  (0) 2009.12.24
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 29. 15:20
● 튜닝의 핵심 활동
  ◎ Performance planning

  ◎ Server(instance + database) tuning
  ◎ SQL tuning

● Tuning is Iteration!
                  Education!

● Statistics (참고하러가기)
    : statistics_level 파라미터를 최소한 typical로 설정해 놓을 것.
      optimizer_dynamic_sampling - 직접적으로 optimizer에게 영향을 주는 파라미터,
      timed_statistics, timed_os_statistics

  ◎ Optimizer Statistics
      : 노력해야 함.(DBMS_STATS를 이용) -> 10g부터는 GATHER_STATS_JOB
    ○ Data statistics
    ○ System statistics

  ◎ Performance Statistics
     : 그냥 즐길 것. -> 누적, 휘발 -> ... -> 10g AWR + MMON + ADDM
    ○ Activity
    ○ Wait
    ○ Others

● 주요 튜닝대상.
  ◎ 한번에 많은 자원을 쓰는 쿼리
  ◎ 자주 쓰이는 쿼리

참조 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/toc.htm 
         (1장~3장은 필독)

'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Monitoring and Managing Memory  (0) 2009.12.24
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 26. 10:09
순서 Dynamic View Description
1 V$ACCESS 현재 데이터베이스내의 lock이걸린 object와 그 object를 access 하려는 session id.
2 V$ACTIVE_INSTANCES 현재 데이터베이스내의 Mount된 모든 인스턴스에대하여 인스턴스 이름과, 번호를 매치.
3 V$AQ 데이터베이스내의 모든 Queue에 대한 통계.
4 V$ARCHIVE Archive에 필요한 redo log file에 대한 정보. 각각의 행은 하나의 thread에 대한 정보이다.
V$LOG도 동일한정보.
5 V$ARCHIVE_DEST 현재의 instance에서, 모든 archive log destination, 현재값, mode, status. 
6 V$ARCHIVED_LOG archive log 이름을 포함하는 controlfile에 대한 archive log 정보, archive log 기록은
online중 redo log가 성공적으로 저장되었거나, clear(log가 clear되면, name칼럼은
null이 된다)된후 insert된다. 
7 V$BACKUP 모든 online 데이터파일의 backup 상태를 나타낸다. 
8 V$BACKUP_CORRUPTION 데이터파일의 backup 중 에러정보를 나타낸다.
에러들은 control 파일과 achived log backup 에 포함되지 않는다. 
9 V$BACK_DATAFILE control 파일에서 datafile과 controlfile 의 backup정보를 보여줌. 
10 V$BACK_DEVICE 지원되는 backup 디바이스정보. 
11 V$BACK_PIECE controlfile에서 backup piece에 대한 정보를 포함. 각각의 backup set 은 하나 또는 그이상의
backup piece로 구성된다. 
12 V$BACKUP_REDOLOG controlfile에서 backup set의 저장된 log에 대한 정보. Online redo logs는 곧바로 backup
되지 않는다. 먼저 disk에 저장된후 backup 된다. 저장된 log backup set 은 하나 또는
그 이상의 logs들로 구성된다. 
13 V$BACKUP_SET controlfile에서 backupset 정보를 보여줌. backup set 행은 backup set이 성공적으로 완료되었을
때 insert된다. 
14 V$BGPROCESS 백그라운드 프로세스 정보. 
15 V$BH 병렬서버 view이다. SGA내의 모든 버퍼에 대한 ping의 상태와 수를 나타낸다. 
16 V$BUFFER_POOL 인스턴스내에서 사용가능한 모든 버퍼풀에 대한정보. 
17 V$CACHE 병렬서버 view이다.
특정데이타베이스object에 관련된 현재의 인스턴스의 SGA내부의 각각의 block에 대한
block header에 대한 정보.
18 V$CACHE_LOCK 병렬서버view. platform-specific lock manager 식별자를 제외하면, V$CACHE와 유사하다. 
19 V$CIRCUIT 가상 circuit에 관한 정보이며, 가상circuit란 dispatcher와 server를 통한 데이터베이스와의
user 연결을 말한다. 
20 V$CLASS_PING 각각blockclass마다 ping된 블록의 수를나타낸다. 다른class블록의 충돌을 비교하기위해 사용. 
21 V$COMPATIBILITY 이전버전으로 downgrade를 방지하기위해 데이터베이스인스턴스에 의해 사용된특성들을 설명.
다른 인스턴스가 갖고있는 특성에 영향을 미치지 않으며, 데이터베이스가 완전히 정지한이후에도
존재하지 않는 일시적인 비호환성들을 포함할수도 있다. 
22 V$COMPATSEG 이전버전으로 되돌아가는 것을 막기위한 데이터베이스에서 사용되는 영구적인 특성들.
23 V$CONTROLFILE 컨트롤파일의 이름과 상태. 
24 V$CONTROLFILE_RECORD_SECTION 컨트롤파일의 record에 대한 정보. 
25 V$COPY_CORRUPTION 컨트롤파일로부터 데이터파일의 복사불량에 대한 정보. 
26 V$CURRENT_BUCKET 캐쉬내의 버퍼의 수가 감소할때 발생할 수 있는 캐쉬손실의 경우수를 예상하는데 유용. 
27 V$DATABASE control file 로부터 데이터베이스정보를 포함. 
28 V$DATAFILE 컨트롤파일로부터데이타파일에대한 정보를 포함. 
29 V$DATAFILE_COPY 컨트롤파일로부터 데이터파일의 복사에 대한 정보를포함. 
30 V$DATAFILE_HEADER 데이터파일헤더에 대한 정보. 
31 V$DBFILE 데이터베이스를 구성하는 모든 데이터파일. 대신에 V$DATAFILE 추천한다.
32 V$DBLINK 세션에 의해 open된 데이터베이스링크에 대한 설명이 데이터베이스링크들은 닫히기전에
commit되거나 rollback되어야만 한다.
33 V$DB_OBJECT_CACHE library cache에 cach된 데이터베이스오브젝트를 나타냄. 
34 V$DB_PIPES 데이터베이스내에 현재 운영중인 pipe에 대한 설명. 
35 V$DELETED_OBJECT 삭제된 archived 로그, 데이터파일 copy, 컨트롤파일에서 백업piece 에 대한 정보.
이뷰의 목적은 복구목록의 재동조작업을 최적화하는 것이다.
archived 로그나, 데이터파일 copy, 백업piece 등이 삭제될때는 해당하는 행이삭제되었음이
표시된다. 
36 V$DISPATCHER dispatcher 프로세스에 관한 정보. 
37 V$DISPATCHER_RATE dispatcher 프로세서에 관련된 확률통계. 
38 V$DLM_CONVERT_LOCAL lock 변환작업에 대한 경과시간. 
39 V$DLM_CONVERT_REMOTE 원격 lock변환작업에 대한 경과시간. 
40 V$DLM_LATCH DLM 잠금에 대한 통계. 각각의 잠금에 대한 통계보다는, 각 타입에 대한 총계를 포함. 개념적으로
IMM_GETS/TTL_GETS 값은 1에 가깝게 된다. 
41 V$DLM_LOCKS 병렬서버 view이다. 블록화되었거나, 다른 것을 블록화하고있는 lock manager에 알려진 모든
lock에 대한 정보. 
42 V$DML_MISC 잡다한 DLM 통계에 대한 정보. 
43 V$ENABLEDPRIVS 사용가능한 권한에 대한정보, 이들권한은 SYS.SYSTEM_PRIVILEGES_MAP테이블에 존재해야만 한다. 
44 V$ENQUEUE_LOCK 큐에 대기상태인 오브젝트에의해 소유된 모든 lock이 view의 칼럼은 V$LOCK의 칼럼과 동일하다.
자세한 것은 V$LOCK을 참고. 
45 V$EVENT_NAME wait event 에 대한 정보. 
46 V$EXECUTION 병렬 질의 실행에 대한 정보. 
47 V$EXECUTION_LOCATION 병렬 질의 실행 트리의 위치에 대한 자세한 정보. 
48 V$FALSE_PING 병렬서버view. ping에 실패지도 모르는 버퍼에 대한 정보. 즉, 10회이상ping된 다른 버퍼와
동일한 lock으로 잠겨있는 버퍼를 말한다. ping이 실패로 판명된 버퍼는 lock충돌을 감소시키기위해
1-44페이지의 "GC_FILES_TO_LOCK"에 다시 매핑된다. 
49 V$FILE_PING 데이터파일마다 ping된 블록수를 보여줌.
이정보는 현존하는 데이터파일에 대한 access패턴을 결정하는데 데이터파일블록을 PCM lock에
새로 매핑하는것을 결정하는데 사용된다. 
50 V$FILESTAT 파일 read/write 통계. 
51 V$FIXED_TABLE 데이터베이스내의 모든 동적실행테이블, views, 유도테이블. 실제테이블을 참조하는 약간의
V$테이블은 리스트에 없다. 
52 V$FIXED_VIEW_DEFINITION (V$로 시작하는)고정view에 대한 설명. 유의해서 사용해야한다. 
53 V$GLOBAL_TRANSACTION 현재 활동중인 트랜잭션에 대한 설명. 
54 V$INDEXED_FIXED_COLUMN index된 동적실행테이블(X$ table)의 칼럼에 대한 설명. X$ table은 경고없이 변경할수있다.
55 V$INSTANCE 현재의 인스턴스의 상태를 나타냄.
V$INSTANCE의 버전은 V$INSTANCE의 초기버전과 호환성이 없다. 
56 V$LATCH 하위 잠금에 대한 통계와 상위 잠금에 대한 요약통계. 즉, 상위잠금에 대한 통계는 그 하위잠금에
대한 각각의 통계를 포함한다. 
57 V$LATCHHOLDER 현재잠금에 대한 정보. 
58 V$LATCHNAME  V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한 정보. V$LATCHNAME의 행들은
V$LATCH의 행들과 1:1로 대응된다. 
59 V$LATCH_CHILDREN 하위잠금에 대한 통계를 포함.
V$LATCH의 칼럼에 child# 칼럼이추가되었다. LATCH#칼럼이 서로 동일하다면, 하위잠금이
동일한 상위잠금을 갖는 것이다. 
60 V$LATCH_MISSES 잠금을 획득하는데 실패한 시도에 대한 통계. 
61 V$LATCH_PARENT 상위잠금에 대한 통계.
V$LATCH_PARENT 칼럼은 V$LATCH칼럼과 동일하다. 
62 V$LIBRARYCACHE library cache의 실행과 활동통계. 
63 V$LICENSE license 한계에 대한 정보. 
64 V$LOADCSTAT 직접적재하는동안 컴파일된 SQL*loader 통계정보.
이테이블에대한 어떤 Select 문도 "no rows returned" 결과가 나오는데, 왜냐면, 동일한 시간에
데이터를 적재하면서, 쿼리를 날릴수 없기 때문이다. 
65 V$LOCK 현재 Oracle 서버에 의해 확립된 잠금에 대한 정보나 lock또는 latch에 대한 두드러진요청 
66 V$LOCK_ACTIVITY 병렬서버view이다. V$LOCK_ACTIVITY는 현재의 인스턴스의 DLM잠금동작을 나타낸다.
각각의 행은 잠금동작의 타입과 일치된다. 
67 V$LOCK_ELEMENT 병렬서버view이다.
버퍼캐쉬에 의해사용된 각각의 PCM잠금에 대해 v$LOCK_ELEMENT 에 한행이다.
잠금요소에 대응되는 PCM잠금의 이름은 'BL',indx,class등이다. 
68 V$LOCKED_OBJECT 시스템안의 모든 트랜잭션에 걸린 잠금을 나타낸다. 
69 V$LOCKED_WITH_COLLISIONS 병렬서버view이다. 여러버퍼를 보호하는 lock을 찾는데 사용되며, 그 버퍼들은 최소한 10회이상
각각 강제로 쓰여지거나, 강제로 읽혀진 버퍼들이다. 
70 V$LOG 컨트롤파일로부터 log 파일정보를 포함한다. 
71 V$LOGFILE redo log 파일정보. redo log 그룹과 멤버 파일명. 
72 V$LOGHIST 컨트롤파일로부터 log history정보를 포함. 지속적인 호환성을 포함하고 있다.
대신에 V$LOG_HISTORY의 사용을 권장한다. 
73 V$LOG_HISTORY 컨트롤파일로부터 log history 정보를 포함한다. 
74 V$MLS_PARAMETERS Oracle Server의 확정된 초기화파라미터를 나타냄. 
75 V$MTS multi-threaded server의 성능향상을위한 정보를 포함. 
76 V$MYSTAT 현재 세션에 대한 통계값포함. 
77 V$NLS_PARAMETERS 현재의 NLS 매개변수의 값들을 포함. 
78 V$NLS_VALID_VALUES 유효한 NLS 매개변수값. 
79 V$OBJECT_DEPENDENCY 현재 공유풀에 적재되어있는 package, procedure, cursor등에 관련되어있는 object를
결정하는데 사용된다. 예를들면, V$SESSION, V$SQL등과 조인하면, 현재 어떤 user가
실행중인 SQL문에서 어떤 테이블이 사용되었는지를 알아낼수가 있다. 
80 V$OFFLINE_RANGE 컨트롤파일로부터 offline된 datafile을 보여준다. DATAFILE행에 저장되어있는 각각의
데이터파일의 최종offline 간격을 보여줌. offline 간격은 테이블스페이스가 처음 offline normal,
또는 Read Only로 변경되고난이후 다시 online 또는 read-write로 변경된다음에 확정된다.
데이터파일이 스스로 Offline로 변경되거나 테이블스페이스가 OFFLINE IMMEDIATE로 변경되면,
offline간격은 확정되지 않는다. 
81 V$OPEN_CURSOR 각각 user 세션이 열렸있거나, 정지되어있는 cursor를 보여준다. 
82 V$OPTION Oracle Server와 같이 설치된 선택사항들. 
83 V$PARAMETER 초기화 파라미터에 대한 설명이다. 
84 V$PING 병렬서버view이다. 최소한 1번이상 ping된 블록만을 보여준다는 것을 제외하고
V$CACHE view와 동일하다. 특정 데이터베이스 object와 관련된 현재의 인스턴스내의
SGA에 있는 각각의 블록에대한 block header정보를 포함하고 있다. 
85 V$PQ_SESSTAT 병렬쿼리에 대한 session 통계를 포함. 
86 V$PQ_SLAVE 인스턴스내에 실행중인 parallel 쿼리서버에 대한 통계. 
87 V$PQ_SYSSTAT 병렬쿼리에 대한 시스템통계. 
88 V$PQ_TQSTAT 병렬쿼리 동작의 통계를 포함. 통계는 질의가 완료된후에 컴파일되며 세션이 살아있는동안 계속
남아있는다. 
89 V$PROCESS 현재 작업중인 프로세스에 대한 정보.
LATCHWAIT 칼럼은 프로세스잠금이 무엇을 기다려야하는가를 나타내며, LATCHSPIN 칼럼은
프로세스잠금이 동작되는 것을 나타낸다. 멀티프로세서의 경우 Oracle 프로세스는 잠금을
기다리기전에 실시한다. 
90 V$PWFILE_USERS password 파일로부터 유도해낸 SYSDBA, SYSOPER 권한을 부여받은 user. 
91 V$QUEUE 멀티쓰레드 메시지큐에 대한 정보. 
92 V$RECENT_BUCKET 대용량 캐쉬실행을 평가하기에 유용한 정보. 
93 V$RECOVER_FILE media 복구에필요한 파일의 상태를 나타냄. 
94 V$RECOVERY_FILE_STATUS 각각의 RECOVER명령에 대한 각 데이터파일에 대한 정보를 한행씩 포함.
Oracle프로세스가 복구를 수행하는데 유용한 정보임.
recover manager는 서버프로세스에 직접 복구를수행하도록 했을 때, recovery manager가 이
view에서 관련된정보를 참고할 수 있다.  다른user들에게는 유용하지 않다. 
95 V$RECOVERY_LOG 완벽한 media복구에 필요한 archived logs에 관한 정보. 이정보는 log history view인
V$LOG_HISTORY에서 유도된 것이다. 
96 V$RECOVERY_PROGRESS 데이터베이스복구작업이 중간에 멈추지않도록하는데 사용되며, 복구작업을 완료하는데
요구되는 시간을 측정하는데 사용된다. 
97 V$RECOVERY_STATUS 현재의 복구진행상태를 나타낸다. 단지 복구를 수행하는 Process 에대한 정보만이유용하다.
복구관리자가 서버프로세스에게 복구를 수행하라고 지시할때에, 복구관리자는 이view에서
관련정보를 참조할 수 있다. 다른 user에게는 불필요하다. 
98 V$REQDIST MTS dispatcher의 응답시간에 대한 그래프통계를 나타내며, time range는 버킷 number의
지수함수로 증가한다. 
99 V$RESOURCE 자원(resource)의 이름과 주소정보를 포함. 
100 V$RESOURCE_LIMIT System 자원의 부분적인 사용에 대한 정보. 자원의 소비를 모니터링함으로서 낭비를
방지하는데 사용된다.
101 V$ROLLNAME 모든 online중인 rollback segments의 이름. 데이터베이스가 open시에만 조회가능. 
102 V$ROLLSTAT 롤백세그먼트통계정보. 
103 V$ROWCACHE 자료사전활동에 대한 통계. 각각의 행은 하나의 자료사전cache 통계를 포함. 
104 V$SESSION 현재 open된 세션에 대한 정보. 
105 V$SESSION_CONNECT_INFO 현재의 세션에 대한 network 연결에 대한 정보. 
106 V$SESSION_CURSOR_CACHE 현재의 세션에 대한 cursor 사용에 대한 정보.
SESSION_CACHED_CURSORS 초기화파라미터에 대한 효율을 측정하지는 않는다. 
107 V$SESSION_EVENT 세션의 event 대기에 관한정보. 
108 V$SESSION_LONGOPS 장시간실행되는 작업에 대한 상태. SOFAR, TOTALWORK칼럼은 진행상태를 제공한다.
예를들어 다음요소(hach cluster creations, backup, recovery) 에 대한 작동상태를
모니터링할 수 있다. 
109 V$SESSION_OBJECT_CACHE  로칼서버의 현재사용중인 user세션의 object, cache통계정보. 
110 V$SESSION_WAIT 활동중인 세션이 대기하고있는 자원또는 이벤트이다. 
111 V$SESSTAT  user세션 통계이다. 통계number(statistic#)에 해당하는 통계name을 찾으려면,
V$STATNAME를 참고하면 된다. 
112 V$SESS_IO 각각의 user세션에 대한 I/O 통계이다. 
113 V$SGA System Global Area 에대한 간략한 정보.(name, size)
114 V$SGASTAT System Global Area에 대한 자세한 정보.(name, bytes, pool) 
115 V$SHARED_POOL_RESERVED Shared Pool내에 예약풀과 공간을 바꾸고자할 때 도움이 되는통계. 
116 V$SHARED_SERVER Shared Server processes 에 대한 정보를 포함. 
117 V$SORT_SEGMENT 주어진 인스턴스내의 각 sort세그먼트에 대한 정보. 테이블스페이스가 Temporary
타입일때만 update된다. 
118 V$SORT_USAGE sort 사용에 대해 기술한다. 
119 V$SQL Group by절이없는 공유sql영역에대한 통계이며 입력된 원래 sql문장의
각 child의 row를 포함. 
120 V$SQL_BIND_DATA 데이터가 이 서버에서 추출가능하다면 이 view를 조회하는 세션에 소유된 각 커서안에
있는 각각의 원격bind변수에 대한 클라이언트에 의해 보내진 데이터.
121 V$SQL_BIND_METADATA 이view를 조회하는 세션에 소유된 각커서안에 있는 각각의 원격bind변수에 대해
클라이언트에의해 제공되는 bind metadata. 
122 V$SQL_CURSOR 이 view를 조회하는 세션과 관련된 각 cursor에 대한 디버깅정보. 
123 V$SQL_SHARED_MEMORY 메모리 스냅샷에 공유된 커서에 대한 정보. 공유풀에 저장된 각SQL문은 관련된 하나또는
그이상의 하위object를 가지고 있다. 
124 V$SQLAREA 공유SQL영역에 대한 통계를 가지고있으며, Sql 문자열마다 한행을 포함한다.
메모리내에 존재하는, parse된, 실행을 대기하고있는 SQL문장에 대한 통계를 제공한다. 
125 V$SQLTEXT  SGA내부의 공유SQL 커서에 속해있는 SQL문장을 포함. 
126 V$SQLTEXT_WITH_NEWLINES 가독성이 증가되고, 공백을 포함한 SQL문장안에 newline과 tabs을 대체하지 않는다는
것을 제외하고는 V$SQLTEXT view와 동일하다. 
127 V$STATNAME V$SESSTAT와 V$SYSSTAT테이블에서 나타난 statistics에 대한 이름. 
128 V$SUBCACHE 현재 라이브러리 캐쉬메모리에 적재된 하위 캐쉬에 대한 정보. 모든 라이브러리캐쉬에 대해
언급하고있으며, 각 라이브러리 캐쉬object마다 각 적재된 하위 캐쉬에 대해 한행을 나타낸다. 
129 V$SYSSTAT 시스템 통계이다. 각 statistic number(statistic#)와 관련된 statistic의 이름을 찾기위해서는,
"V$STATNAME"를 보시오. 
130 V$SYSTEM_CURSOR_CACHE 시스템 전반적인정보라는 것을 제외하고, V$SESSION_CURSOR_CACHE와 유사한 정보를
나타낸다.
131 V$SYSTEM_EVENT 이벤트에 대한 총 wait정보. TIME_WAITED, AVERAGE_WAIT칼럼은 급속메커니즘을 지원하지
않는 플랫폼에서 0값을 포함할 것이다. 이런 플랫폼에서 DB를 운영중이고, 이칼럼이 wait time을
줄여주기를 원한다면, 파라미터파일의 TIMED_STATISTICS를 TRUE로 세팅하면된다.
단지 이렇게 하면, 시스템 성능에 약간의 마이너스효과를 가져올 것이다. 
132 V$SYSTEM_PARAMETER System parameter에 대한 정보. 
133 V$TABLESPACE 컨트롤파일로부터 테이블스페이스 정보를 나타내준다. 
134 V$THREAD 컨트롤파일로부터 thread 정보를 가져온다. 
135 V$TIMER  1/100 초로 나타낸 경과시간.
시간은 epoch가 시작된이후부터 측정되며, epoch는 OS의 특성이며, 값이 4bytes(약 497일)를
넘을때마다 0근처의 값이 된다. 
136 V$TRANSACTION 시스템내의 활동중인 트랜잭션. 
137 V$TRANSACTION_ENQUEUE 트랜잭션 오브젝트에 의해 소유된 lock를 나타냄. 
138 V$TYPE_SIZE 데이터블록용량을 측정하는데 사용되는 여러 데이터베이스컴포넌트들의 SiZe. 
139 V$VERSION Oracle Server의 core 라이브러리 컴포넌트의 Version수이다. 각 컴포넌트에 한 row가 있



[출처] [펌]V$ Dynamic View 정리|작성자 엑셥


'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Monitoring and Managing Memory  (0) 2009.12.24
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 24. 14:11

● Monitoring and Managing Memory

  ◎ SGA
     : 공유메모리 영역

       관련 파라미터의 분류



     ASMM (Automatic Shared Memory Management)
      SGA의 크기를 자동으로 조정해줌
      관련 파라미터 :
        SGA_TARGET (Auto-tuned Dynamic + Manually-tuned Dynamic + Manually-tuned Static{그림 참조))


      SGA_MAX_SIZE = 16G    : static

SQL> alter system set sga_max_size = 16g scope=spfile --> restartup


      SGA_TARGET   = 10G    : dynamic

SQL> alter system set sga_target=10G                 -- 증가시킬수 있는 최대값은 SGA_MAX_SIZE

     SGA_TARGET 변경에 따른 각 파라미터의 변경특성
     1. SGA_TARGET을 늘이거나 줄이면 auto-tuned dynamic만 늘거나 준다.
     2. manually tuned가 늘이거나 줄이면 auto-tuned dynamic이 영향을 받는다.
     3. auto-tuned dynamic중 각 파라미터의 크기를 줄이면 그 파라미터의 하한값만 변경되는 것.
     4. SGA_TARGET을 0으로 하면 ASMM이 off가 되고 각 파라미터 상태로 고정이 된다.
     

     MMAN (Memory Manager)
      이상적인 메모리의 분배를 위해 수분에 한번씩 메모리를 모니터링한다.

    ○ Database Buffer Cache
      - 데이터 블럭이 복사되는 메모리 영역.
      - 2k, 4k, 8k, 16k, 32k -> 잘 결정할 것
      - 집계를 주로 하는 프로그램의 경우는 데이터 블럭이 클수록 좋음.
      - 관련 파라미터 : DB_CACHE_SIZE
                      DB_KEEP_BUFFER_SIZE
                      DB_RECYCLE_BUFFER_SIZE
                      DB_BLOCK_SIZE(한번 정하면 못바꿈)
                      DB_CACHE_ADVICE

      - 자주쓰는 데이터 블럭의 데이터가 일부 영역에 caching되어 있다.
      - 저장되는 데이터와 사용하는 패턴에 따라 잘 결정해야함.
      - CR블럭 : 데이터베이스 블럭은 하나지만 읽기 일관성을 위해 존재하는 복사한 이미지
      - 블럭의 분류

        standard block


create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool default)
tablespace users5;
.......

db_cache_size  = 100m(캐쉬될 메모리의 크기)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool keep)
tablespace users5;
.........

db_keep_cache_size = 40m
(keep이란 메모리 영역의 한번에 캐쉬될 메모리의 크기. 정말 자주 사용되므로 메모리에 올려놓고 disk i/o를 줄임)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool recycle)
tablespace users5;
..............

db_recycle_cache_size = 20m
(recycle이란 메모리 영역의 한번에 캐쉬될 메모리의 크기,
keep영역보다는 덜 사용되지만 default보다는 많이 사용되는 데이터에 사용)

default, keep, recycle의 의미는 그냥 a,b,c와 같은 의미이다. 특별한 취급이 없음.



        non standard block

db_4k_cache_size = 20m  -- 이 파라미터가 설정되어 있어야 아래의 테이블 스페이스가 생성됨.
create tablespace ts4k
datafile ~~~~~ size 100m blocksize 4k;
 -- 이 데이터 파일은 데이터 블럭이 4k로 이루어짐
create table t1 (...) tablespace ts4k;


      - LRU lists(Least Recently Used Lists)
        : 가장 최근에 사용된 버퍼 캐쉬의 주소부터 오랫동안 사용이 안된 버퍼캐쉬의 순서로 저장되어 있는 리스트
          서버 프로세서가 주로 사용.

      - Checkpoint queue
        : 가장 오래된 dirty buffer부터 차례대로 들어가 있음.
          DBWR가 내려써야 할 순서

    ○ Shared pool
      - Library Cache
        : 최근에 사용된 SQL, 파싱된 SQL이 저장됨
      - Data Dictionary Cache
        : 최근에 사용된 metadata가 저장됨

    ○ Large pool
      - UGA(User Globalization Area)
        : 세션데이터. Shared Server Process들이 사용하는 메모리 영역
      - RMAN이 백업과 복원, 복구시 사용.
      - 설정을 해줘야 공간할당이 됨.할당이 안될 경우에는 shared pool을 사용.
        -> 경합을 줄이기 위해서는 공간할당을 해주는 것이 좋음

    ○ Java pool
      - jvm이 내장되어 있음
      - java의 클래스, method등이 저장 가능.

  ◎ PGA
    ○ 서버프로세스가 독자적으로 사용하는 메모리 영역이지만 대량의 데이터를 정렬해야 하는 상황에서는 disk i/o가 발생하므로
      다른 서버 프로세스에 영향을 줄 수 있음.

    ○ PGA의 크기는 SGA의 크기와 비교해서 결정
      OLTP 환경 - SGA:PGA = 8:2
      OLAP 환경 - SGA:PGA = 5:5

    ○ 관련 파라미터 : 
      - PGA_AGGREGATE_TARGET : 자동관리, 총량제
                               PGA_AGGREGATE_TARGET = 4G이더라도 4G까지 제한을 두는 것은 아님.세션이 많아지면 늘어날 수도 있음.
      - *_AREA_SIZE          : 수동관리, 세션별 제한
        SORT_AREA_SIZE = 1M : 정렬시 사용할 수 있는 최대의 메모리가 1M
              읽기(3G) -> 정렬(1G*3) -> Merge(3G) : 정렬해야 하는 데이터가 3M일 경우.

    ○ 관련 statistics
      - v$pgastat의 cache hit percentage : 
               http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/memory.htm#i48203
      - v$sql_workarea_histogram
        : 빈도수를 나타내는 막대그래프
        

        Optimal -> 메모리 정렬
        Onepass -> 한번 disk i/o후 merge과정을 통한 return
        Multipass -> disk에서 sort run을 하고 이를 다시하여 merge하는 과정
                     sga의 크기를 줄여서라도 없애야 한다.
        ex) Data : 10G
            i/o slot : 256kb
            Moptimal : 약 11G
            Monepass : 약 76M

  ◎ 효율적인 메모리 사용 : 가이드라인

    ○ buffer cache hit ratio를 높이는 것이 좋다.
      but, hit ratio만으로는 정확한 진단이 어렵다.-> wait 지표를 봐야 한다.
      ex) 100만 블럭  A           99%(99%를 메모리에서, 1%는 디스크에서 읽음)
          100블럭    B            60%(60%를 메모리에서, 40%는 디스크에서 읽음)
    ○ memory advisor를 이용할 것.



기타 참고사항

- PGA의 크기 관련 파라미터 : PGA_AGGREGATE_TARGET 

- performance 관련 query
 select * from v$latch;
 select * from v$system_event;
 select * from v$event_name;

- v$sga_target_advice;

- MEMORY_TARGET (11g 파라미터)

- CGA (Call Globalization Area)

'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Posted by 자수성가한 부자