'Oracle'에 해당되는 글 219건

  1. 2010.01.14 Metrics, Alerts and Metric Baselines
  2. 2010.01.13 [펌]SQL*TRACE와 TKPROF
  3. 2010.01.13 Read the alert log with SQL
  4. 2010.01.13 Statistics, Waits
  5. 2010.01.12 Tuning Overview
  6. 2010.01.11 Globalization
  7. 2010.01.08 Security
  8. 2010.01.07 Resource Manager
  9. 2010.01.07 ASM(Automatic Storage Management)
  10. 2010.01.06 Managing Storage
Oracle/Tuning2010. 1. 14. 18:21
Metrics
: 누적 통계에서 변화의 비율
  base statistics로 부터 파생된 2차통계
※ Base statistics : 정상적으로 시스템이 돌아갈 때 수집한 데이터
내부 컴포넌트를 위해 사용됨.
Base Statistics의 한계를 극복하기 위해 나온 개념
관련 view : v$sysmetric, v$sessmetric, v$servicemetric, v$filemetric

Statistic Histograms
: 막대 그래프, metric은 잠재적인 문제를 알 수 있지만 histogram을 이용하면 명확하게 문제를 알 수 있다.

SQL> select * from v$sql_workarea_histogram;
SQL> select * from v$file_histogram;
SQL> select * from v$event_histogram;


Alerts
: 주시하고 있는 Metric을 기준으로 임계점을 넘어갈 때 발생되는 이벤트
  tool generated alert : EM과 같은 tool이 발생시키는 alert -> 적시성이 조금 떨어질 수 있음.
  server generated alert : server에서 특정 상황이 발생되지마자 발생된다.
   - metric based alert : metric을 기준으로 임계점을 넘었을 때 발생되는 이벤트
   - event based alert : 에러 발생시 나타나는 에러(snap too old) 등
  push mode : 서버가 em에 던진다.
  pull mode : tool이 특정 주기마다 가져감.


Metric Baselines
 : 15개 정도의 metric의 값이 자동 변경되는 기능
   adaptive alert threshold : 시점에 따라 비교의 기준을 다르게 함.
   baseline normalized view : 여러가지 척도를 한눈에 볼 수 있게 함.
    예년 : 최근 30년 평균
   EM의 기능.
  

참고 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40046954315


기타 참고사항

- v$fixed_table : This view displays all dynamic performance tables, views, and derived tables in the database

- drill down : 주어진 데이터들을 가능하면 상세한 범위까지 사용자가 볼 수 있게 끔 하는 특별한 분석 기술

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

AWR & ADDM & ASH  (0) 2010.01.15
Statspack  (0) 2010.01.15
[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Posted by 자수성가한 부자
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/기타2010. 1. 13. 16:39

(1) alert 파일을 재료로 external table 생성하기

[oracle@ora10gr2 ~]$ sqlplus system/oracle
 
SQL> show parameter instance_name
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      orcl
SQL> select value from v$parameter where name='background_dump_dest';
 
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/admin/orcl/bdump
 
SQL> -- 디렉토리 객체 생성
SQL> create or replace directory b_dump_dir as '/u01/app/oracle/admin/orcl/bdump';
 
SQL> -- external table 생성
SQL> create table t_alert_log (text_line varchar2(500)) organization external
         (type oracle_loader default directory b_dump_dir location ('alert_orcl.log'));
 
SQL> -- alert 파일 내용을 질의로 확인
SQL> select * from t_alert_log where rownum <= 20;



(2) 사용자 정의 함수 및 쿼리를 사용해서 질의에 편리한 view 생성

SQL>
 
create or replace function alert_log_date( text in varchar2 )
  return date
is
  invaliddate  exception;
  pragma exception_init(invaliddate, -1846);
begin
  return to_date(text,'dy mon dd hh24:mi:ss yyyy','nls_date_language=american');
exception
  when invaliddate then return null;
end;
/
 
SQL>

create or replace view alert_log
as
select row_num,
         last_value(low_row_num ignore nulls)
         over(order by row_num rows between unbounded preceding
         and current row) start_row,
         last_value(alert_date  ignore nulls)
         over(order by row_num rows between unbounded preceding
         and current row) alert_date,
         alert_text
from (select rownum row_num,
                 nvl2(alert_log_date(text_line),rownum,null) low_row_num,
                 alert_log_date(text_line) alert_date,
                 text_line alert_text
      from t_alert_log);
 
 
SQL> set pages 40
SQL> set lines 200
SQL> col alert_text format a100
SQL> select * from alert_log;




(3) 활용예제


SQL> -- 최근 한시간 동안 추가된 내용 확인
SQL> select * from alert_log
         where alert_date > sysdate - 1/24;
 
SQL> -- 지난 한달동안 추가된 내용 가운데 "ORA-"라는 글자를 포함하는 라인 확인
SQL> select * from alert_log
          where start_row in (select start_row from alert_log
                                          where regexp_like(alert_text,'ORA-'))
          and alert_date > trunc(sysdate,'mon');


출처 : http://blog.naver.com/orapybubu/40050729230

'Oracle > 기타' 카테고리의 다른 글

import 성능 향상시키는 방법  (0) 2010.02.11
reorganization  (0) 2010.02.11
[펌]오라클의 뷰가 만들어지는 과정  (0) 2009.12.23
login.sql셋팅  (0) 2009.12.15
DBMS_STATS package  (0) 2009.12.08
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/Admin2010. 1. 11. 15:34
● Character Set
   : encoding scheme
     숫자로 글자를 표현, 글자와 숫자를 mapping한 코드표
     encoding 은 byte sequence로 표시
     서버(DB)와 클라이언트의 character set을 꼭 맞출것 
     서버(DB)와 클라이언트의 character set을 맞춰줬는데도 글자가 깨질 경우 OS의 code page를 확인해 볼 것. 

   ◎ 서버(DB)

SQL> create database 이름
         character set __________
         national character set ____________;


      - US7ASCII : 7bit        => 영어 데이터만 들어온다면 저장소, 메모리 등을 고려했을 때 최적
      - WE8ISO8859P1 : 8bit
      - 한글용 character set
         KO16KSC5601 : 16bit, 예전에 쓰던 한글 character set (깨지는 글자 많음, 샾, 먄, 믜)
         => KO16MSWIN949 : 16bit, 최근에 주로 씀. 
      - AL32UTF8 : 가변길이, 한글을 2byte로 인식하기 때문에 export후 import시에 문제 없음.
      - AL16UTF16 : 고정길이
      - UTF-8
        단점 : 한글이 3byte로 입력됨. 데이터 export할 경우 3byte이므로 import시에 KO16MSWIN949일 경우 import않됨.

        character set에는 single byte, 가변길이 character set 만 허락됨.
        national charater set에는 고정길이 character set만 써야함.
 
   ◎ 클라이언트
      - profile 또는 레지스트리의 환경변수
         NLS_LANG = □□□□□_◇◇◇◇◇.__________ => 반드시 서버 쪽과 같은 character set으로 설정할 것

      - 서버 쪽의 character set 확인 쿼리

SQL> select * from database_properties;         
또는
SQL> select * from nls_database_parameters;


● NLS (National Language Support)
   ◎ NLS를 설정할 수 있는 부분
     1. parameter file
        - NLS_LANGUAGE = American
        - NLS_Territory = China   => 다른 것을 써도 됨.

      2. profile or 레지스트리
        - NLS_LANG = spanish_china.O16MSWIN949
        - NLS_LANG와 NLS_LANGUAGE중 NLS_LANG이 우선 순위가 높으므로
           NLS_LANG이 설정되어 있다면 NLS_LANGUAGE는 설정할 필요가 없다. 

      3. alter session set nls_* = ?
        - 해당 세션에서만 적용됨.

      4. 함수 to_char(col1, '...','NLS_L*')

   ◎ Locale Builder
     
: 날짜형식 등을 바꿀 수 있는 utility
       예) 1월 -> 첫달

OS] lbuilder

● Sort
   : 정렬시에 언어에 따른 sort 가 잘못될 경우를 대비해서 nls_sort parameter를 변경하거나 nlssort()함수를 사용할 수 있다.

   ◎ nls_sort parameter
       - 영어를 사용할 경우(default)

SQL> alter session set nls_sort = binary;

       - 프랑스어를 사용할 경우

SQL> alter session set nls_sort = french_m;

   ◎ nlssort() 함수

SQL> select fr_word
         from words
         order by nlssort(fr_word, 'nls_sort=french_m');


기타 참고사항

-  OS에서 nls_lang 환경변수  확인 방법

OS] echo $NLS_LANG
or
OS] env | grep NLS_LANG

- nls_comp의 특성(비교시에 language)
   nls_sort = binary(default)
                  french_m
   nls_comp = binary(default)
                   ANSI(비교 매커니즘을 nls_sort parameter에 정의된 값을 따른다.)

- 대소문자 상관없는 정렬을 가능하게 하려면?
   {예) ABCD....abc  -> AaAaBbBbCCCccC}
    : nls_sort = <nls_sort_name> [Ai | Ci]

참고 : http://www.oracle.com/technology/global/kr/pub/columns/nls_list.html

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

alert_SID.log  (0) 2010.03.24
index rebuild 작업  (0) 2010.02.25
Security  (0) 2010.01.08
Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 8. 18:50

TDE (Transparent Data Encryption)
  : 10g~
     마스터 키 1개, 테이블의 컬럼별로 암호 설정할 수 있다.
     테이블의 데이터와 인덱스를 암호화할 수 있다.
     Oracle Wallet Manager를 이용하여 wallet 생성
     OWM>

    TDE를 하기 위한 설정
    1. wallet생성 : OWM (Oracle Wallet Manager) 이용
    2. 인스턴스 내에 마스터키를 설정한다.

SQL> alter system set encryption key indentified by <password>


    3. 인스턴스내에 wallet을 open
    4. 암호화된 컬럼이 포함된 테이블을 생성.

SQL> CREATE TABLE emp_enc (
          first_name VARCHAR2(20),
          last_name VARCHAR2(20),
          empID NUMBER,
          salary NUMBER(6) ENCRYPT,
          job_nonenc varchar2(20),
          job varchar2(20) ENCRYPT
          ) tablespace tde;


    참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40041554572

    client side wallet
    - mkstore utitlity를 이용.

DP(Datapump) 결과물에 대한 암호화
   : 10g~
     데이터 펌프로 추출한 데이터에 대한 암호화
     TDE 셋팅이 필수이다. 

RMAN을 이용한 암호화
    3가지 방법
    1. TDE 셋팅 필수 : 한 곳에서 백업하고 복원
        TDE셋팅후 아래의 쿼리 수행시 결과물이 암호화 된다.

RMAN> configure encryption for database open

      
    2. TDE 셋팅이 필요 없는 방식
        : 한 곳에서 백업하고 다른 곳에서 복원
          패스워드 지정하는 방식, 암호를 꼭 기억해야 한다.

    3. TDE 셋팅 필수 : 한 곳에서 백업하고 복원 또는 한 곳에서 백업하고 다른 곳에서 복원           
         TDE를 셋팅하고 패스워드를 지정하는 방식.

VPD (Virtual Private Database)
   : where 절 자동 생성 기능
     VPD는 사전 정의된 기준에 따라 테이블 또는 사용자에 대한 부분적인 뷰만을 제공한다.
     정책에 따라 볼 수 있는 데이터가 제한되어 있음.
     관련 패키지 : DBMS_RLS

      VPD를 사용하기 위한 기반 기술
      - FGAC : Fine Grained Access Control
      - Application Context : 예제
  

참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40021505395

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

index rebuild 작업  (0) 2010.02.25
Globalization  (0) 2010.01.11
Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 7. 17:10
Database Resource Manager 개요
   - 혼합된 작업 로드 관리
   - 그룹을 생성, 그룹별 자원(cpu, 동시 세션등)을 정해주고 자원을 조정할 수 있다.
   - 배치 작업은 밤에 한다. -> resource manager로 낮에도 가능하게 할 수 있다.


plan을 생성한다.
mydb_plan / nedb_plan / ...

위에 plan대로 자원이 분배된다.
alter system set resource_manager_plan = mydb_plan;

multilevel schema : 모두가 작업하려고 할 때 적용되는 규칙




postman group : 0.3 * 0.4 = 0.12의 cpu가 보장됨
other groups : 새로 plan을 만들 때 마다 꼭 있어야 하는 plan,

Resource Plan 생성
   - dbms_resource_manager.switch_plan 를 이용하여 plan을 생성할 수 있다.

DBMS_RESOURCE_MANAGER.SWITCH_PLAN
(PLAN_NAME => 'DAY_PLAN',
SID => 'ORCL',
ALLOW_SCHEDULER_PLAN_SWITCHES => true );


Consumer Group 생성
   - dbms_resource_manager.create_consumer_group 를 이용하여 consumer group 생성

DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'APPUSER',
CPU_MTH => 'ROUND-ROBIN',
COMMENT => '');


Consumer Group Mapping
   - 클라이언트가 어떤 모듈에 어떤 action을 하는지 알 수 있다.

    관련 view : v$session의                       current_queue_duration
                    v$rsrc_consumer_group의    queue_length

select sid, serial#, username, module, action, client_identifier, service_name
from v$session
where username = 'SCOTT';


참고 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dbrm.htm#sthref3441

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

Globalization  (0) 2010.01.11
Security  (0) 2010.01.08
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Managing Schema Objects  (0) 2009.12.30
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 7. 16:02
ASM이란?
  : 이식성이 좋은 (어떤 종류의 하드웨어이든지 간에 잘 돌아가는) 고성능 클러스터 파일 시스템이다.
    10g new feature
    오라클 데이터베이스 파일들만 들어간다.
    mirroring기능도 있다.
    RAID와 RAW device의 개념이 내포


ASM을 사용하기 위한 조건
  1. ASM instance 구성 / 관리 
      - DBCA vs 수동
  2. ASM disk group
  3. ASM file  


ASM에만 있는 프로세스
  - RBAL(Rebalance) : 디스크 추가시 데이터를 이동시키는 백그라운드 프로세스
  - ARBn


ASM instance 초기화 파라미터

  - INSTANCE_TYPE = ASM
  - DB_UNIQUE_NAME = +ASM
  - ASM_POWER_LIMIT = 1
  - ASM_DISKSTRING = '/dev/rdsk/*s2', '/dev/rdsk/c1*'
  - ASM_DISKGROUPS = dgroupA, dgroupB
  - LARGE_POOL_SIZE = 8MB

  ※ 위 파라미터 중 생략하면 에러가 나는 파라미터는?
      instance_type : default값이 rdbms이기때문에...


ASM instance의 startup

OS] export ORACLE_SID='+ASM'
OS] sqlplus /nolog
SQL> connect / as sysdba
SQL> startup;

    sysdba 권한 : 모든 작업이 가능
    sysoper 권한 : 일부 작업에 제한을 받음(disk group 생성, disk를 추가는 안됨)

ASM instance의 shutdown
   : db instance가 살아있는 동안은 shutdown이 안됨.
     단, shutdown abort는 가능. -> 잠시후 db instance도 전부 shutdown 됨(비정상 종료)

ASM storage
   : AU(Allocation Unit) au단위로 공간이 쪼개짐 1M

ASM Disk Groups

SQL> CREATE DISKGROUP dg1 NORMAL REDUNDANCY
      FAILGROUP controller1 DISK
       '/devices/diska1',
       '/devices/diska2',
       '/devices/diska3',
       '/devices/diska4'
      FAILGROUP controller2 DISK
       '/devices/diskb1',
       '/devices/diskb2',
       '/devices/diskb3',
       '/devices/diskb4';

   failure 그룹 : 하나의 특정 디스크 그룹 내에서 failure를 허용해야 하는 공통 리소스를 공유하는 디스크 셋입니다

   chunk : 1M의 AU

   asm에서는 striping은 무조건 일어남.

Disk Group Mirroring 
  : au레벨에서 mirroring한다.
    각 디스크에서 primary au와 mirror au가 혼재함.
   - external : 하드웨어의 mirroring을 따름
   - normal redundancy : 2중 mirroring, 최소 둘 이상의 failure 그룹
   - high redundancy : 3중 mirroring, 최소 셋 이상의 failure그룹

   - disk group dynamic rebalancing


Disk Group Management

   - 디스크 그룹 생성 : create disk group
   - 디스크 그룹 삭제 : drop diskgroup 
   - 디스크 추가 : alter diskgroup
   - 디스크 그룹으로 부터 디스크 제거 : alter diskgroup dgroupA drop disk a5;


ASMCMD utility
   : asm 디스크 안에 있는 파일들을 볼 수 있게 하는 유틸리티(10g r2~)
     cd, ls, pwd의 os 명령이 가능하다.
     커맨드가 아래와 같이 나옴.
     ASMCMD>

데이터베이스를 저장영역으로 이전

OS] export ORACLE_SID=kaydb
OS] vi $ORACLE_HOME/dbs/initkaydb.ora
db_name       = kaydb
instance_name = kaydb
compatible    = 10.2.0
processes     = 100
undo_management = auto
undo_tablespace = undotbs01
db_cache_size    = 64m
shared_pool_size = 72m
db_block_size    = 4096
db_create_file_dest = '+dg1';
db_create_online_log_dest1 = '+dg1';
db_create_online_log_dest2 = '+dg2';
db_recovery_file_dest = '+dg2';
db_recovery_file_dest_size = 200G;
remote_login_passwordfile = exclusive
os] sqlplus / as sysdba
SQL> startup nomount
SQL> create database kaydb


참고 : 오라클 교재 - 10g ws2 12장


기타 참고사항

  RAID <-> SLED

  RAW device : 그냥 파티션 <-> File System(Cooked Device)

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

Security  (0) 2010.01.08
Resource Manager  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Managing Schema Objects  (0) 2009.12.30
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Posted by 자수성가한 부자
Oracle/Admin2010. 1. 6. 16:12
● Space Management
: 오라클 데이터베이스에 의해 자동으로 관리됨.
OMF, server-generated alerts

Free Space Management
: ASSM(Automatic Segment Space Management)

  segment : 공간을 차지하는 객체

Block Space Management

FLM의 경우

create table emp
(..............)
pctfree 10 pctused 40 initrans 2 maxtrans 5   -- block utilization 설정
storage(initial 1m next 1m)                          -- extent allocation 설정
tablespace users;

create table emp
(..............)
pctfree 10          -- update 여유공간을 얼마로 줄 것인가?
pctused 40        -- freelist에 재등록되는 시점
initrans 2           -- transaction slot의 최소 갯수
maxtrans 5        -- 임시 transaction slot을 포함한 transaction slot의 최대 갯수


Row Chaining & Migration
   - row chaing : insert된 row의 길이가 너무 커서 연속된 두개의 block에 데이터를 insert한 것.
   - migration : 업데이트시 블럭에 공간이 남아 있지 않은 경우, 행 전체가 위치만 남기고 전체 이동.

-- chaning이 발생했는지 확인
SQL> analyze table emp compute statistics
SQL> select chain_cnt from dba_tables;


● Proactive Monitoring : ts
   - server alerts : 공간의 사용에 따라 alert를 설정하여 미리 대응할 수 있다.(EM or DBMS_SERVER_ALERTS를 이용)
   - undo_tablespace

Shrinking Segments
   : 일부 migration이 해소됨.
     DMT tablespace에서는 안됨.
     segment advisor를 이용하여 shrink 대상이 될 테이블을 찾아낸다.


SQL> alter table employees shrink space compact;         -- 뒤의 데이터가 앞쪽으로 insert되고 뒤의 데이터 delete, hwm는 조정안됨.


SQL> alter table employees shrink space;                      -- 뒤의 데이터가 앞쪽으로 insert되고 뒤의 데이터 delete, hwm 조정됨,


Resumable Space Allocation(9i~)
   : insert 중에 공간이 부족하여 에러가 날 경우 rollback을 하지 않고, 그 공간 부족이 된 시점에서 일정시간동안(기본 2시간) 멈춤
     resumable 권한이 있어야 한다.
     유용한 곳 : Query (정렬시 pga부족으로 temporary tablespace를 사용할 경우)
                     DML, 특정 DDL(create .. as select)

 SQL> alter session enable resumable;


SQL> alter session disable resumable;


TTS (transportable tablespace)
: 전송테이블 스페이스
  tts가 가능한 조건

  8i  9i  10g 
 block  O
 platform  O O X
 characterset  O O

참조

TDB (transporting database)
   : 10g r2 new feature, 리눅스 -> 윈도우 가능, 리눅스 -> solaris는 불가능.
      데이터베이스를 이동.
      데이터 파일, script, parameter file로만 새로운 db 생성


기타 참고 사항

- endian_format이란?
   : 부호를 표현할 때 왼쪽에서 표시하는 방법과 오른쪽에 표시하는 방법으로 나뉘어짐

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

Resource Manager  (0) 2010.01.07
ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Schema Objects  (0) 2009.12.30
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Backup and Recovery  (0) 2009.12.10
Posted by 자수성가한 부자