Oracle CPU Time, Waited Time 조회 스크립트


SET HEADING OFF

Set lines 200 pages 200

 

with AASSTAT as (

           select

                 decode(n.wait_class,'User I/O','User I/O',

                                     'Commit','Commit',

                                     'Wait')                               CLASS,

                 sum(round(m.time_waited/m.INTSIZE_CSEC,3))                AAS

           from  v$waitclassmetric  m,

                 v$system_wait_class n

           where m.wait_class_id=n.wait_class_id

             and n.wait_class != 'Idle'

           group by  decode(n.wait_class,'User I/O','User I/O', 'Commit','Commit', 'Wait')

          union

             select 'CPU_ORA_CONSUMED'                                     CLASS,

                    round(value/100,3)                                     AAS

             from v$sysmetric

             where metric_name='CPU Usage Per Sec'

               and group_id=2

          union

            select 'CPU_OS'                                                CLASS ,

                    round((prcnt.busy*parameter.cpu_count)/100,3)          AAS

            from

              ( select value busy from v$sysmetric where metric_name='Host CPU Utilization (%)' and group_id=2 ) prcnt,

              ( select value cpu_count from v$parameter where name='cpu_count' )  parameter

          union

             select

               'CPU_ORA_DEMAND'                                            CLASS,

               nvl(round( sum(decode(session_state,'ON CPU',1,0))/60,2),0) AAS

             from v$active_session_history ash

             where SAMPLE_TIME > sysdate - (60/(24*60*60))

)

select

       ( decode(sign(CPU_OS-CPU_ORA_CONSUMED), -1, 0, (CPU_OS - CPU_ORA_CONSUMED )) +

       CPU_ORA_CONSUMED +

        decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED), -1, 0, (CPU_ORA_DEMAND - CPU_ORA_CONSUMED ))) CPU_TOTAL,

       decode(sign(CPU_OS-CPU_ORA_CONSUMED), -1, 0, (CPU_OS - CPU_ORA_CONSUMED )) CPU_OS,

       CPU_ORA_CONSUMED CPU_ORA,

       decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED), -1, 0, (CPU_ORA_DEMAND - CPU_ORA_CONSUMED )) CPU_ORA_WAIT,

       COMMIT,

       USER_IO,

       WAIT

from (

select

       sum(decode(CLASS,'CPU_ORA_CONSUMED',AAS,0)) CPU_ORA_CONSUMED,

       sum(decode(CLASS,'CPU_ORA_DEMAND'  ,AAS,0)) CPU_ORA_DEMAND,

       sum(decode(CLASS,'CPU_OS'          ,AAS,0)) CPU_OS,

       sum(decode(CLASS,'Commit'          ,AAS,0)) COMMIT,

       sum(decode(CLASS,'User I/O'        ,AAS,0)) USER_IO,

       sum(decode(CLASS,'Wait'            ,AAS,0)) WAIT

from AASSTAT)

/

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

CPU (Central Processing Unit) 


1. CPU (Central Processing Unit)의 개요

 1-1. CPU (Central Processing Unit)의 정의

 - 컴퓨터의 가장 중요한 부분으로서 명령을 해독하고, 산술논리연산이나 데이터 처리를 실행하는 장치
 - 프로그램의 실행과 데이터 처리하는 중추적 기능의 수행을 담당하는 요소

 

 1-2. CPU가 수행하는 세부동작

 1) 공통적 동작 : 

  - 명령어 인출 (Instruction Fetch), 기억장치로부터 명령어를 읽어옴

  - 명령어 해독 (Instruction Decode), 수행해야 할 동작을 결정하기 위해서 인출된 명령어를 해독

 2) 필요시 수행

   - 데이터 인출 (Data Fetch) , 명령어 실행을 위하여 데이터가 필요한 경우에는 기억장치 또는 입출력장치로부터 그 데이터를 읽어옴
   - 데이터 처리 (Data Process), 데이터에 대한 산술적 또는 논리적 연산을 수행
   - 데이터 쓰기 (Data Store), 실행한 결과를 저장

 

2. CPU (Central Processing Unit) 구조와 구성요소

 2-1. CPU (Central Processing Unit)의 구조

ALU, 레지스터, 제어유닛, 내부버스로 구성

 2-2. CPU (Central Processing Unit)의 구성요소

 1) ALU
  - Arithmetic and Logic Unit
  - 각종 산출연산들과 논리연산을 수행하는 회로들로 이루어진 하드웨어 모듈
  - 산술연산: 덧셈, 뺄셈, 곱셈, 나눗셈
  - 논리연산: AND, OR, NOT, XOR 등

 2) 레지스터
  - CPU 내부에 위치한 엑세스 속도가 가장 빠른 기억장치
  - PC(프로그램 카운터), IR(명령어 레지스터), AC(누산기), MAR(기억장치 주소 레지스터), MBR(기억장치 버퍼 레지스터), SP(스택포인터)

 3) 제어유닛
  - 프로그램 코드(명령어)를 해석하고, 그것을 실행하기 위해 제어 신호들(Control Signal)을 순차적으로 발생하는 하드웨어 모듈

 4) CPU 내부버스
  주소버스
   - CPU가 외부로 발생하는 주소정보를 전송하는 신호 선들의 집합
  데이터버스
  - CPU가 기억장치 혹은 I/O장치와 사이에 데이터를 전송하기 위한 신호선의 집합
  제어버스
  - CPU가 시스템 내의 각종 요소들의 동작을 제어하는데 필요한 신호선의 집합

 

3. 명령어 사이클의 종류와 CPU 구성요소의 관계

 1) 인출 사이클
    - 프로그램 카운터(PC)가 가리키는 기억장치 위치로부터 명령어를 인출해옴
    - 레지스터(PC, MAR, MBR, IR), CPU 내부버스

 2) 실행사이클
    - CPU가 인출된 명령어 코드를 해독(Decode)하고, 그 결과에 따라 필요한 연산을 수행
    - 레지스터(AC), ALU, 제어유닛

 3) 인터럽트사이클
    - 인터럽트 요구신호를 검사하고, 현재의 PC 내용을 스택에 저장한 다음에 PC에 해당 ISR의 시작주소를 적재하는 과정
    - 레지스터(MBR, PC, MAR, SP)

  4) 간접사이클
    - 실행 사이클이 시작되기 전에 그 데이터의 실제 주소를 기억장치로부터 읽어오는 과정
    - 레지스터(MAR, IR, MBR), CPU 내부버스

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL Autovacuum기준으로 vacuum 대상 테이블 목록 스크립트


WITH vbt AS (SELECT setting AS autovacuum_vacuum_threshold FROM 
pg_settings WHERE name = 'autovacuum_vacuum_threshold')
, vsf AS (SELECT setting AS autovacuum_vacuum_scale_factor FROM 
pg_settings WHERE name = 'autovacuum_vacuum_scale_factor')
, fma AS (SELECT setting AS autovacuum_freeze_max_age FROM 
pg_settings WHERE name = 'autovacuum_freeze_max_age')
, sto AS (select opt_oid, split_part(setting, '=', 1) as param, 
split_part(setting, '=', 2) as value from (select oid opt_oid, 
unnest(reloptions) setting from pg_class) opt)
SELECT
    '"'||ns.nspname||'"."'||c.relname||'"' as relation
    , pg_size_pretty(pg_table_size(c.oid)) as table_size
    , age(relfrozenxid) as xid_age
    , coalesce(cfma.value::float, autovacuum_freeze_max_age::float) 
autovacuum_freeze_max_age
    , (coalesce(cvbt.value::float, autovacuum_vacuum_threshold::float) 
+ coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) * 
pg_table_size(c.oid)) as autovacuum_vacuum_tuples
    , n_dead_tup as dead_tuples
FROM pg_class c join pg_namespace ns on ns.oid = c.relnamespace
join pg_stat_all_tables stat on stat.relid = c.oid
join vbt on (1=1) join vsf on (1=1) join fma on (1=1)
left join sto cvbt on cvbt.param = 'autovacuum_vacuum_threshold' and 
c.oid = cvbt.opt_oid
left join sto cvsf on cvsf.param = 'autovacuum_vacuum_scale_factor' and 
c.oid = cvsf.opt_oid
left join sto cfma on cfma.param = 'autovacuum_freeze_max_age' and 
c.oid = cfma.opt_oid
WHERE c.relkind = 'r' and nspname <> 'pg_catalog'
and (
    age(relfrozenxid) >= coalesce(cfma.value::float, 
autovacuum_freeze_max_age::float)
    or
    coalesce(cvbt.value::float, autovacuum_vacuum_threshold::float) + 
coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) * 
pg_table_size(c.oid) <= n_dead_tup
   -- or 1 = 1
)
ORDER BY age(relfrozenxid) DESC LIMIT 50;
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL 통계(analyze) 상태 확인 스크립트


SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    pg_stat_get_live_tuples(c.oid) + pg_stat_get_dead_tuples(c.oid) as total_tuple,
    pg_stat_get_live_tuples(c.oid) AS live_tuple,
    pg_stat_get_dead_tuples(c.oid) AS dead_tupple,
    round(100*pg_stat_get_live_tuples(c.oid) / (pg_stat_get_live_tuples(c.oid) 

    + pg_stat_get_dead_tuples(c.oid)),2) as live_tuple_rate,
    round(100*pg_stat_get_dead_tuples(c.oid) / (pg_stat_get_live_tuples(c.oid) 

    + pg_stat_get_dead_tuples(c.oid)),2) as dead_tuple_rate,
    pg_size_pretty(pg_total_relation_size(c.oid)) as total_relation_size,
    pg_size_pretty(pg_relation_size(c.oid)) as relation_size
FROM pg_class AS c
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace 
WHERE pg_stat_get_live_tuples(c.oid) > 0
AND c.relname NOT LIKE 'pg_%'
ORDER BY dead_tupple DESC;

 

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle 통계정보 백업, 복구(export/import)


1. 통계정보 백업테이블 DROP
EXEC DBMS_STATS.DROP_STAT_TABLE('EMP','STATS'); 

2. 통계정보 백업테이블 CREATE
EXEC DBMS_STATS.CREATE_STAT_TABLE('EMP','STATS'); 

-- 테이블 조회
SELECT * FROM STATS;

3. 통계정보 백업(해당유저의 모든 테이블과 인덱스)
EXEC DBMS_STATS.EXPORT_SCHEMA_STATS(OWNNAME=>'EMP',STATTAB=>'STATS'); 

4. 통계정보 백업(해당유저의 테이블)
--- TABLE
EXEC DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME=>'SCOTT', TABNAME=>'테이블명', STATTAB=>'STATS', CASCADE=>TRUE); 

-- INDEX
EXEC DBMS_STATS.IMPORT_INDEX_STATS(OWNNAME=>'SCOTT', TABNAME=>'테이블명', STATTAB=>'STATS', CASCADE=>TRUE); 

5. 통계정보 백업 테이블을 다시 원복
EXEC DBMS_STATS.IMPORT_SCHEMA_STATS(OWNNAME=>'SCOTT', STATTAB=>'STATS');

6. 통계정보삭제
EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>'SCOTT', TABNAME=>'EMP_TABLE_STATS');
EXEC DBMS_STATS.DELETE_INDEX_STATS(OWNNAME=>'SCOTT', INDNAME=>'IDX_EMP_STATS');

7. 통계정보강제로 셋팅
EXEC DBMS_STATS.SET_COLUMN_STATS(OWNNAME => 'SCOTT', TABNAME => 'EMP', COLNAME => 'EMPNO'
, DISTCNT => 1
, DENSITY => 0.1
, NULLCNT => 1024252
, AVGCLEN => 1
);
 
EXEC DBMS_STATS.SET_INDEX_STATS(OWNNAME => 'SCOTT', INDNAME => 'IDX_EMP_PK'
, NUMROWS  => 100000
, NUMLBLKS => 100
, NUMDIST  => 100000
, CLSTFCT  => 200
, INDLEVEL => 2
);

 

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle 통계정보 추출 스크립트


 
SELECT 
        A.OWNER,A.TABLE_NAME,B.MB, NVL(C.PAR_YN,'N') PAR_YN ,O.CREATED, A.LAST_ANALYZED, 
        'EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => ''' || A.OWNER || '''

        , TABNAME => ''' || A.TABLE_NAME || ''', CASCADE => FALSE, ESTIMATE_PERCENT =>''' || 
        CASE 
             WHEN B.MB < 1000 THEN 100 
             WHEN B.MB < 5000 THEN 50 
             WHEN B.MB < 20000 THEN 25 
         ELSE 5 
        END || ''', DEGREE => ''' || 
        CASE 
             WHEN B.MB < 500 THEN 4 
             WHEN B.MB < 5000 THEN 8 
             WHEN B.MB < 10000 THEN 12 
             WHEN B.MB < 20000 THEN 24 
         ELSE 30 
         END || CASE 
                     WHEN  PAR_YN = 'Y' THEN  ''', GRANULARITY => ''GLOBAL''

                               ,METHOD_OPT=>''FOR ALL COLUMNS SIZE 1'',NO_INVALIDATE=>false);' 
                     ELSE  ''',METHOD_OPT=>''FOR ALL COLUMNS SIZE 1'',NO_INVALIDATE=>false);' 
                END AS  STAT_GET_DDL 
FROM    ( SELECT 
                   OWNER 
                 , TABLE_NAME 
                 , LAST_ANALYZED 
           FROM    DBA_TABLES A 
           WHERE   OWNER = 'TESTDB' --IN ('SCOTT','TEST') 
--           AND     (LAST_ANALYZED IS NULL OR NUM_ROWS <1000) 
--            AND     TABLE_NAME ='테이블명' 
--           AND     TABLE_NAME NOT LIKE '%BAK' 
--           AND     TABLE_NAME NOT LIKE '%TEMP%' 
        ) A 
        , ( SELECT  OWNER 
                  , SEGMENT_NAME, SUM(BYTES)/1024/1024 AS MB 
            FROM    DBA_SEGMENTS 
            WHERE   OWNER = 'TESTDB' --IN ('SCOTT','TEST') 
            GROUP BY OWNER, SEGMENT_NAME 
         ) B 
       ,(   SELECT  TABLE_OWNER,TABLE_NAME ,'Y' AS PAR_YN 
            FROM    DBA_TAB_PARTITIONS 
            WHERE   TABLE_OWNER = 'TESTDB' --IN ('SCOTT','TEST') 
            AND     TABLE_NAME NOT LIKE 'BIN%' 
            GROUP BY TABLE_OWNER,TABLE_NAME 
        ) C 
        , DBA_OBJECTS O 
WHERE   1            = 1 
AND     A.OWNER      = B.OWNER 
AND     A.TABLE_NAME = B.SEGMENT_NAME 
AND     A.TABLE_NAME = O.OBJECT_NAME 
AND     A.OWNER      = C.TABLE_OWNER(+) 
AND     A.TABLE_NAME = C.TABLE_NAME(+) 
AND     O.OBJECT_TYPE = 'TABLE' 
;

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

BPM(Business Process Management), 비즈니스 프로세스 최적화 도구


1. BPM(Business Process Management)의 개요

 1-1. BPM(Business Process Management)의 정의

  - 비즈니스 프로세스의 자동화, 통합화, 최적화를 통해 비즈니스 프로세스의 민첩성, 유연성, 가시성 확보 및 이를 통해 기업가치를 높이는 개념 및 시스템

 1-2. BPM(Business Process Management)의 특징

   1) 가시성
      - End-to-End 프로세스 전과정의 관리를 통한 가시성 및 통제력 확보
   2) 자동화
     - 자동화된 비즈니스 프로세스의 실행(BPEL)의 이용
   3) 통합화
     - E2E 관점에서의 Legacy 시스템과의 비즈니스 프로세스 통합
   4) 최적화
    - 비즈니스 프로세스 모니터링 및 분석을 통한 프로세스 개선

 

2. BPM(Business Process Management) 개념도의 구성요소

 2-1. BPM(Business Process Management)의 개념도

Legacy 시스템 통합하여 비즈니스 프로세스 최적화, 인터넷 통해 서비스 제공

 2-2. BPM(Business Process Management)의 구성요소

 1) 비즈니스 프로세스 모델링
  - 비즈니스 프로세스, 정보의 흐름 등을 GUI 기반에서 설계 및 지원
  - BPML, BPMN


 2) 비즈니스 프로세스 실행
  - 프로세스 자동화 및 흐름제어, 사람과 APP 간 통합업무 환경 제공  
  - BPEL, BRE, BPEL4WS

 3) 비즈니스 프로세스 모니터링
  - 프로세스의 진행상태의 직관적, 실시간 모니터링 및 추적 관리
  - BAM

 4) 프로세스 분석 및 최적화  
  - 비즈니스 프로세스에 대한 Activity 단위 및 다차원 분석을 통한 최적화 지원
  - BPA 도구

 

3. BPM(Business Process Management) 구축을 위한 접근 방법

 1) Workflow 관점에서의 BPM 접근

   - Workflow 기반 BPM의 특징: 전통적 Workflow에서 출발, 문서와 사용자 업무처리 중심

   - Workflow 기반 BPM의 주요 기능 : 자동화 및 조직설계

 2) EAI 관점에서의 BPM 접근

   - EAI 기본 기능 보유, 시스템간 데이터 전달 및 전환기능 기반 탄생

 3) SOA 관점에서의 BPM 접근

   - 프로세스와 데이터 통합을 위한 아키텍처 중심의 BPM 구현

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

BPEL(Business Process Execution Language), 기업의 비즈니스 프로세스 통합 관리


1. BPEL(Business Process Execution Language)의 개요

 1-1. BPEL(Business Process Execution Language)의 정의

 - 비즈니스 프로세스를 정의하고, 정의된 프로세스를 순차적으로 실행, 제어하기 위한 XML기반의 표준 언어
 - 비즈니스 프로세스에 정의된 Rule을 기반으로 프로세스를 실행, 제어하기 위한 XML 기반의 표준 언어

 1-2. BPEL(Business Process Execution Language)의 필요성

 - 패러다임변화: 협업적 비즈니스의 중요성에 따른 서비스간의 통합관리
 - 경영방법의 가시화: 부가가치 낮은 비효율적 업무평가 및 업무재설계
 - 관리의 용이성: 분산 서비스 컴포넌트의 제어의 용이성 및 컴포넌트의 통합모니터링 및 관리

 

2. BPEL(Business Process Execution Language)의 구성도, 주요기능

 2-1. BPEL(Business Process Execution Language)의 구성도

기업의 내부/외부 프로세스 통합적 실행, 제어, 자동화

 

 2-2. BPEL(Business Process Execution Language)의 주요기능

 1) Invoke : 서비스를 동기적/비동기적으로 호출하고 값을 받음
 2) Assign : 결과값을 받아서 일시적인 저장(변수와 같은 역할 수행)
 3) Scope : 예외 사항 처리를 위한 범위를 지정함
 4) Switch : 프로세스의 판단에 의한 분기를 처리
 5) Receive : 비동기적인 호출에 의해서 처리된 값을 돌려줌

 

3. BPEL(Business Process Execution Language)의 활용

 - 업무처리자동화: BPM 엔진의 구성 및 프로세스 처리를 통한 업무 자동화
 - 시스템연계용이: 두 Application이나 파트너간 비즈니스 상호 교환 용이
 - 비즈니스최적화: 비즈니스 프로세스 정의 통한프로세스최적화, 리엔지니어링 지원 및 최적 프로세스 선택으로 기업 환경 최적화
 - BPEL4WS: 웹 서비스를 통해 비즈니스 기능공개시 주요 기술로 활용

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,