목차

0. 상세보고서
1. Time Model Statistics
2. Wait Class
3. Wait Event / Background Wait Events
4. Operating System Statistics
5. Service Statistics
6. Service Wait Class Stats
7. SQL 수행 정보 단위 보고서

8. Instance Activity Stats
9. Instance Activity Stats - Absolute Values
10. Instance Activity Stats - Thread Activity

0. 상세보고서

  • 상세 보고서를 이용하여 AWR DB 보고서 생성 구간의 DB 상태에 대해 보다 자세한 정보를 파악할 수 있다.
  • 상세 보고서는 속성에 다라 크게 12가지로 분류되며, 각 본류에 속한 단위 보고서는 다음 표와 같다.
항목보고서
대기 이벤트Wait Class, Wait Events, Background Wait Events
자원 사용Time Model Statistics, Operating System Statistics, Service Statistics, Service Wait Class Stats, Instance Activity Stats, Instance Activity Stats - Absolute Values, Instance Activity Stats - Thread Activity, Resource Limit Stats
SQLSQL ordered by Elapsed Time, SQL ordered by CPU Time, SQL ordered by Gets, SQL ordered by Reads, SQL ordered by Executions, SQL ordered by Parse Calls, SQL ordered by Sharable Memory, SQL ordered by Version Count, SQL ordered by Cluster Wait Time
I/OTablespace IO Stats, File IO Stats
(메모리) SGABuffer Pool Statistics, Buffer Pool Advisory, Shared Pool Advisory, SGA Target Advisory, Streams Pool Advisory, Java Pool Advisory, Buffer Wait Statistics, Dictionary Cache Stats, Dictionary Cache Stats (RAC), Library Cache Activity, Library Cache Activity (RAC), SGA Memory Summary, SGA breakdown difference
(메모리) PGAPGA Aggr Summary, PGA Aggr Target Stats, PGA Aggr Target Histogram, PGA Memory Advisory, Process Memory Summary
컨트롤 파일Instance Recovery Stats
Enqueue Activity, Latch Activity, Latch Sleep Breakdown, Latch Miss Sources, Parent Latch Statistics, Child Latch Statistics
언두Undo Segment Summary, Undo Segment Stats
세그먼트Segments by Logical Reads, Segments by Physical Reads, Segments by Row Lock Waits, Segments by ITL Waits, Segments by Buffer Busy Waits, Segments by Global Cache Buffer Busy, Segments by CR Blocks Received, Segments by Current Blocks Received
스트림즈Streams CPU/IO Usage, Streams Capture, Streams Apply, Buffered Queues, Buffered Queue Subscribers, Rule Set
환경설정init.ora Parameters
RACGlobal Messaging Statistics, Global CR Served Stats, GLOBAL CURRENT Served Stats, Global Cache Transfer Stats

1. Time Model Statistics

AWR DB 보고서 내용

Statistic Name                                       Time (s) % of DB Time
------------------------------------------ ------------------ ------------
sql execute elapsed time                          3,455,105.0         98.0
DB CPU                                              801,566.7         22.7
parse time elapsed                                  280,625.4          8.0
hard parse elapsed time                             228,768.2          6.5
PL/SQL execution elapsed time                        48,882.2          1.4
inbound PL/SQL rpc elapsed time                      18,706.6           .5
failed parse elapsed time                            12,608.2           .4
hard parse (sharing criteria) elapsed time            7,093.5           .2
failed parse (out of shared memory) elapse            4,039.0           .1
PL/SQL compilation elapsed time                       2,804.6           .1
connection management call elapsed time               2,106.2           .1
sequence load elapsed time                              689.7           .0
repeated bind elapsed time                              336.5           .0
hard parse (bind mismatch) elapsed time                 229.4           .0
Java execution elapsed time                              11.3           .0
DB time                                           3,526,796.1          N/A
background elapsed time                             251,439.3          N/A
background cpu time                                 129,042.9          N/A
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Statistic Name통계 항목STAT_NAME
Time (s)각 통계 항목이 소요한 시간이 초 단위로 나타냄VALUES / 1,000,000
% of DB TimeDB Time 중 서버 프로세스 관련 통계 항목이 차지하는 비율100 * (1 - (VALUE WHER STAT_NAME NOT LIKE '%background%' / VALUE WHERE STAT_NAME = 'DB Time'))
설명
  • Time Model Statistics 단위 보고서는 DB 사용에 소요된 시간의 각 요소별 수치를 보여 주며 크게 두 개 부분으로 나눌 수 있음
    • 오라클 백그라운드 프로세스가 DB를 사용한 시간
    • 오라클 서버 프로세스가 DB를 사용한 시간
  • 사용 Object
    • DBA_HIST_SYS_TIME_MODEL 사용
    • V$SYS_TIME_MODEL 참조
  • 체크포인트
    • 이 보고서를 이용하여 어느 항목들이 DB 자원을 사용하였는지 파악할 수 있으며, 이를 통해 튜닝 포인트를 설정할 수 있음.
    • 'sql execute elapsed time' 항목이 높을 경우 SQL 수행속도 향상 튜닝포인트로 정하고, 'background elapsed time' 항목이 높을 경우 DB 인스턴스 튜닝을 튜닝포인트로 정함.
  • DB Time 구성 통계 항목
항목의미
sql execute elapsed timeSQL 문 수행 시간의 총 합. SELECT 문의 경우 패치를 위해 소비된 시간까지 포함됨
DB CPU서버 프로세스가 사용한 CPU 시간의 총 합. idel 시간은 제외
parse time elapsed스냅샷 구간 중 소프트 파스 및 하드 파스에 소요된 총 시간.
hard parse elapsed time스냅샷 구간 중 하드 파스에 소요된 총 시간
PL/SQL execution elapsed timePL/SQL 인터프리터가 사용한 총 시간. 이 시간에는 재귀 SQL의 파스 및 수행시간과 내부 JAVA VM 수행시간은 제외됨
RMAN cpu time(backup/restore)오라클 리커버리 매니저(RMAN)가 사용한 CPUU 총 시간.
inbound PL/SQL rpc elapsed time인바운드 PL/SQL이 원격 프로시저 요청에 소요된 총 시간. 내부 SQL 수행 시간 및 내부 JAVA VM 수행 시간 포함.
hard parse (sharing criteria) elapsed time하드 파스 중 라이브러리 캐시에 동일한 SQL이 없음을 확인하는데 소요된 총 시간
failed parse (out of shared memory) elapse파스 실패가 발생한 시간의 총 합.
PL/SQL compilation elapsed timePL/SQL 컴파일러가 사용한 총 시간.
connection management call elapsed time스냅샷 구간 중 접속 요청 및 접속 중단 요청에 소요된 총 시간.
sequence load elapsed time시퀀스 번호를 부여받기 위해 사용한 총 시간. 시퀀스 번호를 CACHE 옵션 단위로 메모리에 복사하는 시간이며, 캐싱된 시퀀스 번호를 사용할 때에는 소요시간 증가 안함.
repeated bind elapsed time
hard parse (bind mismatch) elapsed time바인드 변수의 크기나 타입이 일치하지 않아 하드 파스된 경우 소요된 총 시간.
Java execution elapsed time내부 JAVAJ VM이 수행된 총 소요 시간. 재귀 SQL의 파스 및 수행시간 및 내부 PL/SQL 수행 시간 제외됨
DB time서버 프로세스가 사용한 CPU 시간. DB CPU Time + DB Wait Time

2. Wait Class


                                                                  Avg
                                       %Time       Total Wait    wait     Waits
Wait Class                      Waits  -outs         Time (s)    (ms)      /txn
-------------------- ---------------- ------ ---------------- ------- ---------
Application                17,506,439   14.6        1,267,600      72       3.2
Cluster                   635,426,531     .7          711,948       1     117.2
User I/O                  880,141,107     .0          578,071       1     162.4
Concurrency               109,942,001    6.8          185,613       2      20.3
Other                      30,132,752   50.5           19,285       1       5.6
System I/O                  8,794,977     .0            7,775       1       1.6
Commit                      2,600,816     .0            2,515       1       0.5
Configuration                 301,612   62.9              484       2       0.1
Network                    48,482,502     .0              233       0       8.9
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Wait ClassWAIT_CLASS
WaitsSUM(TOTAL_WAIT) GROUP BY WAIT_CLASS
%Time-outs100 * (SUM(TOTAL_TIMEOUTS) GROUP BY WAIT_CLASS / SUM(TOTAL_WAITS) GROUP BY WAIT_CLASS)
Total Wait Time (s)(SUM(TIME_WAITED_MICRO) GROUP BY WAIT_CLASS) / 1,000,000
Avg wait (ms)(SUM(TIME_WAITED_MICRO GROUP BY WAIT_CLASS) / SUM(TOTAL_WAIT) GROUP BY WAIT_CLASS) / 1,000
Waits/txn---
설명
  • Wait Class 단위 보고서는 스냅샷 구간 중 발생한 대기 이벤트의 수치를 클래스별로 파악할 수 있도록 제공함.
    • DBA_HIST_SYSTEM_EVENT 사용
    • V$SYSTEM_EVENT 참조
  • 체크포인트
    • 'User I/O' 값이 높을 경우, 'Wait Evnet' 단위 보고서를 조회하여 'db file sequential read', 'db file scattered read' 값을 추가적으로 확인하여 체크 가능

3. Wait Event / Background Wait Events


                                                                   Avg
                                             %Time  Total Wait    wait     Waits
Event                                 Waits  -outs    Time (s)    (ms)      /txn
---------------------------- -------------- ------ ----------- ------- ---------
enq: TX - row lock contentio      2,605,003   97.8   1,252,860     481       0.5
db file sequential read         783,336,225     .0     443,806       1     144.5
gc cr multi block request       153,646,030     .0     339,938       2      28.3
gc buffer busy                   66,222,785    6.2     186,262       3      12.2
gc cr grant 2-way               388,687,761     .0     168,777       0      71.7
db file scattered read           74,247,271     .0      97,843       1      13.7
cursor: pin S wait on X           7,465,173  100.0      73,389      10       1.4
latch: library cache                213,230     .1      54,981     258       0.0
read by other session            16,992,985    1.9      28,905       2       3.1
library cache load lock              13,564   48.8      20,100    1482       0.0
SQL*Net break/reset to clien     14,757,524     .0      14,633       1       2.7
latch: shared pool                  112,838     .1      14,192     126       0.0
................................................................................
................................................................................
................................................................................

의미
항목의미관련 컬럼
EventEVENT_NAME
WaitsTOTAL_WAIT
%Time-outs100 * (TOTAL_TIMEOUTS / TOTAL_WAITS)
Total Wait Time (s)TIME_WAITED_MICRO / 1,000,000
Avg wait (ms)(TIME_WAITED_MICRO / TOTAL_WAIT) / 1,000
Waits/txn---
설명
  • Wait Event / Background Wait Events 단위 보고서는 DB 경합이 발생한 대부분의 원인과 관련된 대기 이벤트 수치를 보여주므로, 튜닝 포인트 설정하는데 도움을 줌.
    • DBA_HIST_SYSTEM_EVENT 사용
    • V$SYSTEM_EVNET 참조

4. Operating System Statistics


Statistic                                       Total
-------------------------------- --------------------
NUM_LCPUS                                           0
NUM_VCPUS                                           0
AVG_BUSY_TIME                               3,645,419
AVG_IDLE_TIME                               6,972,575
AVG_IOWAIT_TIME                               880,304
AVG_SYS_TIME                                1,123,004
AVG_USER_TIME                               2,518,865
BUSY_TIME                                 204,340,075
IDLE_TIME                                 390,660,111
IOWAIT_TIME                                49,492,160
SYS_TIME                                   63,085,316
USER_TIME                                 141,254,759
LOAD                                                0
OS_CPU_WAIT_TIME                          205,369,500
RSRC_MGR_CPU_WAIT_TIME                              0
PHYSICAL_MEMORY_BYTES                 150,323,855,360
NUM_CPUS                                           56
NUM_CPU_CORES                                      28
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Statistic통계 이름STAT_NAME
Total통계 수치VALUE
설명
  • Operating System Statistics 단위 보고서는 오라클 프로세스가 사용한 시스템 자원 관련 통계 정보를 보여줌
    • DBA_HIST_OSSTAT 사용
    • V$OSSTAT 참조
  • 주요 통계 의미
항목의미
AVG_BUSY_TIME모든 포르세스가 CPU를 사용한 평균 시간
AVG_IDLE_TIME모든 포르세스가 대기 상태였던 평균 시간
AVG_IOWAIT_TIME모든 포르세스가 Disk I/O가 완료되기를 기다린 평균 시간
AVG_SYS_TIMEOS 커널 프로세스가 CPU를 사용한 평균 시간
AVG_USER_TIME사용자 프로세스가 CPU를 사용한 평균 시간
BUSY_TIME모든 포르세스가 CPU를 사용한 총 시간. SYS_TIME + USER_TIME
IDLE_TIME모든 포르세스가 IDEL 상태였던 총 시간
IOWAIT_TIME모든 포르세스가 Disk I/O가 완료되기를 기다린 총 시간
SYS_TIMEOS 커널 프로세스가 CPU를 사용한 총 시간
USER_TIME사용자 프로세스가 CPU를 사용한 총 시간
LOADOS 스케줄러에 의해 수행되고 있거나, 수행 대기 중인 프로세스 수
OS_CPU_WAIT_TIME모든 프로세스가 CPU를 사용하기 위해 대기한 총 시간
RSRC_MGR_CPU_WAIT_TIME오라클 리소스 매니저를 사용할 경우, 자원 사용 계획에 의해 오라클 프로세스가 CPU를 사용하기 위해 대기한 총 시간
PHYSICAL_MEMORY_BYTES시스템에 장착되어 있는 물리적 메모리 용량
NUM_CPUS사용 가능한 CPU 개수
NUM_CPU_CORES사용 가능한 CPU 소켓 개수

5. Service Statistics


                                                             Physical    Logical
Service Name                      DB Time (s)   DB CPU (s)      Reads      Reads
-------------------------------- ------------ ------------ ---------- ----------
XSOFT                             3,205,894.7    634,272.2 ########## ##########
SYS$USERS                           320,781.2    167,219.5  6,312,044 ##########
SYS$BACKGROUND                            0.0          0.0  7,245,237 ##########
SYS.KUPC$C_2_20121207135406               0.0          0.0          0          0
SYS.KUPC$C_2_20121207135447               0.0          0.0          0          0
SYS.KUPC$S_2_20121207135406               0.0          0.0          0          0
SYS.KUPC$S_2_20121207135447               0.0          0.0          0          0
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Service Name서비스 이름SERVICE_NAME
DB Time (s)서비스별 DB 사용시간SUM(VALUE) WHERE STAT_NAME = 'DB Time' GROUP BY SERVICE_NAME
DB CPU (s)서비스별 CPU 사용시간SUM(VALUE) WHERE STAT_NAME = 'DB CPU' GROUP BY SERVICE_NAME
Physical Reads서비스별 발생시킨 디스크 I/OSUM(VALUE) WHERE STAT_NAME = 'physical reads' GROUP BY SERVICE_NAME
Logical Reads서비스별 발생시킨 메모리 I/OSUM(VALUE) WHERE STAT_NAME = 'session logical reads' GROUP BY SERVICE_NAME
설명
  • Service Statistics 단위 보고서는 서비스별 DB 자원 사용 현황을 보여줌
    • DBA_HIST_SERVICE_STAT 사용
    • V$SERVICE_STATS 참조

6. Service Wait Class Stats


Service Name
----------------------------------------------------------------
 User I/O  User I/O  Concurcy  Concurcy     Admin     Admin   Network   Network
Total Wts   Wt Time Total Wts   Wt Time Total Wts   Wt Time Total Wts   Wt Time
--------- --------- --------- --------- --------- --------- --------- ---------
XSOFT
#########  57359739  92432550  15591673         0         0  47480073     23018
SYS$USERS
  3713989    317226  17232673   2565568         0         0    408962       208
SYS$BACKGROUND
  2138368    129749    251659    387831         0         0         0         0
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Service NameSERVICE_NAME
User I/O Total WtsTOTAL_WAITS WHERE WAIT_CLASS = 'User I/O'
User I/O Wt TimeTOTAL_WAITED WHERE WAIT_CLASS = 'User I/O'
Concurcy Total WtsTOTAL_WAITS WHERE WAIT_CLASS = 'Concurrency'
Concurcy Wt TimeTOTAL_WAITED WHERE WAIT_CLASS = 'Concurrency'
Admin Total WtsTOTAL_WAITS WHERE WAIT_CLASS = 'Administrative'
Admin Wt TimeTOTAL_WAITED WHERE WAIT_CLASS = 'Administrative'
Network Total WtsTOTAL_WAITS WHERE WAIT_CLASS = 'Network'
Network Wt TimeTOTAL_WAITED WHERE WAIT_CLASS = 'Network'
설명
  • Service Statistics 단위 보고서는 각 서비스가 발생시킨 대기 이벤트를 이벤트 클래스별로 보여줌.
    • DBA_HIST_SERVICE_WAIT_CLASS 사용
    • V$SERVICE_WAIT_CLASS 참조

7. SQL 수행 정보 단위 보고서

  • SQL 수행 정보 보고서는 스냅샷 구간 중 수행된 SQL에 대해 9가지 측면의 보고서 제공하며, 이를 통해 튜닝 대상 선정
  • 튜닝 방향
    • 1회 수행 시 성능이 느린 SQL 튜닝
    • 1회 수행 시 성능은 빠르지만 리소스 과점으로 인해 타 프로그램에 영향을 주는 프로그램 튜닝
  • SQL_ID를 통해 추세를 파악하여 튜닝하는 방안
    • AWR를 스냅샷 구간별로 저장한 뒤 시간 추이를 통해 느려진 SQL_ID를 튜닝함
    • 이를 확인하는 Object는 DBA_HIST_SQLSTAT, DBA_HIST_SNAPSHOT, DBA_HIST_SQLTEXT
  • 구간별 SQL_ID 확인하는 스크립트

SELECT SRC.SQL_ID,         -- SQL_ID
       SRC.MODULE,         -- SQL_ID가 사용된 프로그램
       SRC.ELAP_TIME,      -- 전체 수행시간
       SRC.CPU_TIME,       -- CPU 시간
       SRC.EXEC,           -- 수행횟수
       SRC.ELAP_PER_EXEC,  -- 1회 수행 시 소요된 시간
       Q.SQL_TEXT          -- SQL FULL_TEXT
FROM   (SELECT S.DBID,
               S.MODULE,
               ROUND(SUM(S.ELAPSED_TIME_DELTA) / 1000000, 2) ELAP_TIME,
               ROUND(SUM(S.CPU_TIME_DELTA) / 1000000, 2) CPU_TIME,
               SUM(S.EXECUTIONS_DELTA) EXEC,
               CASE WHEN SUM(S.EXECUTIONS_DELTA) > 0 
                    THEN ROUND(SUM(S.ELAPSED_TIME_DELTA) / SUM(S.EXECUTIONS_DELTA) / 1000000, 2)
                    END ELAP_PER_EXEC,
               S.SQL_ID
        FROM   DBA_HIST_SQLSTAT  S,
               DBA_HIST_SNAPSHOT H
        WHERE  S.DBID                = H.DBID
        AND    S.SNAP_ID             = H.SNAP_ID
        AND    S.INSTANCE_NUMBER     = H.INSTANCE_NUMBER
        AND    H.BEGIN_INTERVAL_TIME >= TO_DATE('20121114 00:00:00', 'yyyymmdd hh24:mi:ss')
        AND    H.BEGIN_INTERVAL_TIME <  TO_DATE('20121115 00:00:00', 'yyyymmdd hh24:mi:ss')
        GROUP  BY S.DBID,
                  S.MODULE,
                  S.SQL_ID
       ) SRC,
       DBA_HIST_SQLTEXT Q
WHERE  SRC.DBID   = Q.DBID
AND    SRC.SQL_ID = Q.SQL_ID
ORDER  BY SRC.ELAP_PER_EXEC DESC
;

  • SQL_ID를 통해 바인드 변수 확인하는 스크립트

SELECT B.SNAP_ID,
       B.DBID,
       B.INSTANCE_NUMBER,
       B.SQL_ID,
       B.NAME,
       B.POSITION,
       B.DATATYPE_STRING,
       VALUE_STRING,
       LAST_CAPTURED
FROM   DBA_HIST_SQLBIND  B,
       DBA_HIST_SNAPSHOT H
WHERE  H.DBID                = B.DBID
AND    H.SNAP_ID             = B.SNAP_ID
AND    H.INSTANCE_NUMBER     = B.INSTANCE_NUMBER
AND    B.SQL_ID              = '6h228dtb8hp1t'
AND    H.BEGIN_INTERVAL_TIME BETWEEN TO_DATE('20121114', 'yyyymmdd') 
                             AND     TO_DATE('20121115', 'yyyymmdd')
AND    VALUE_STRING IS NOT NULL
;

  • 아래는 AWR 보고서에서 9가지 측면에서 SQL_ID를 분석한 내용을 기술함.
  • 단, AWR에 저장된 전체 SQL을 보여주지 않으며, %TOTAL이 1%가 넘는 SQL 중에서 상위 64개 까지만 보여주고, 단 1%가 넘는 SQL이 10개 이하일 경우 1%가 넘지 않아도 10개까지만 보여줌

7-1) SQL ordered by Elapsed Time


  Elapsed      CPU                  Elap per  % Total
  Time (s)   Time (s)  Executions   Exec (s)  DB Time    SQL Id
---------- ---------- ------------ ---------- ------- -------------
   892,986        369      153,055        5.8    25.3 fmpbxcbz6q0a1
Module: PROGRAM_1
UPDATE FND_CONCURRENT_PROCESSES SET PROCESS_STATUS_CODE = 'C', LAST_
UPDATE_DATE = SYSDATE, LAST_UPDATED_BY = :mgrusrid, LAS
T_TXN_START = SYSDATE, LAST_TXN_END = NULL WHERE CONCURR
ENT_PROCESS_ID = :cpid

   148,040         15          772      191.8     4.2 9ajyd7y70xuv2   
Module: PROGRAM_2
UPDATE FND_CONCURRENT_PROCESSES SET GSM_INTERNAL_STATUS = :B3 , GSM_INTERNAL_INF
O = :B2 WHERE CONCURRENT_PROCESS_ID = :B1

   148,008         16          771      192.0     4.2 gaf2hsang61x7
................................................................................
................................................................................
................................................................................

의미
항목의미관련 컬럼
Elapsed Time (s)SQL이 수행된 총 소요 시간(단위:초)(SUM(A.ELAPSED_TIME_DELTA) GROUP BY SQL_ID) / 1,000,000
CPU Time (s)SQL이 사용한 총 소요 시간(단위:초)(SUM(A.CPU_TIME_DELTA) GROUP BY SQL_ID) / 1,000,000
ExecutionsSQL이 수행된 총 횟수(SUM(A.EXECUTIONS_DELTA) GROUP BY SQL_ID) / 1,000,000
Elap per Exec (s)SQL 1회 평균 수행 시간Elapsed Time (s) / Executions
% Total DB Time전체 DB Time 중 해당 SQL의 총 수행 시간이 차지하는 비율(SUM(A.ELAPSED_TIME_DELTA) GROUP BY SQL_ID) / 1,000,000 / DB Time (s)
SQL IdSQL의 IDA.SQL_ID
ModuleSQL 수행 모듈MAX(A.MODULE) GROUP BY SQL_ID
SQL TextSQL 문장B.SQL_TEXT
  • A : DBA_HIST_SQLSTAT
  • B : DBA_HIST_SQLTEXT
  • C : DBA_HIST_SYSSTAT
설명
  • 대부분의 경우 'SQL ordered by Elapsed Time' 항목을 체크한 후 나머지 8개 항목을 체크하는 순서로 진행함.
  • 체크포인트
    • 일반적으로 수행속도가 오래 걸린 SQL_ID가 문제의 SQL일 확률이 높으므로 우선적으로 튜닝을 진행함.
    • 하지만, 병렬 처리를 사용하는 SQL이나, 평소에는 양호하나 가끔 느려지는 SQL의 경우 이 항목에서는 체크하기가 힘드므로, 나머지 항목에서 체크해야 함

7-2) SQL ordered by CPU Time


    CPU      Elapsed                  CPU per  % Total
  Time (s)   Time (s)  Executions     Exec (s) DB Time    SQL Id
---------- ---------- ------------ ----------- ------- -------------
   116,357    140,199            0         N/A     4.0 74tszw00kqfmv
Module: XXINVM3019
INSERT INTO XXINVM_SUPR_BILLTO_LINK_INFO ( ORGANIZATION_ID , VENDOR_SITE_ID , OR
G_ID , LEDGER_ID , CREATION_DATE , CREATED_BY , LAST_UPDATE_DATE , LAST_UPDATED_
BY , LAST_UPDATE_LOGIN ) SELECT WL.ORGANIZATION_ID , TO_NUMBER (WL.ATTRIBUTE5 )
 VENDOR_SITE_ID , OOD.OPERATING_UNIT , OOD.SET_OF_BOOKS_ID , :b1 , :b2 , :b3 , :

    37,005    103,758            0         N/A     2.9 4z8cr86gxbgj6    
Module: JAINITCL
SELECT MSIT.CONCATENATED_SEGMENTS, RGIA.INVENTORY_ITEM_ID, SUM(DISTINCT(NVL(RGIA
.TEMPLATE_ID,0))) TEMPLATE_ID FROM MTL_SYSTEM_ITEMS_KFV MSIT, JAI_RGM_ITEM_ATTRI
B_V RGIA WHERE (CONCATENATED_SEGMENTS LIKE :1) AND ( MSIT.INVENTORY_ITEM_ID = RG
IA.INVENTORY_ITEM_ID AND MSIT.ORGANIZATION_ID = RGIA.ORGANIZATION_ID AND MSIT.IN
................................................................................
................................................................................
................................................................................

의미
항목의미관련 컬럼
CPU Time (s)1회 수행에 사용한 평균 CPU 시간CPU Time (s) / Executions
  • DBA_HIST_SQLSTAT
설명
  • 체크포인트
    • 1회 수행 시 사용하는 CPU 시간이 많은 SQL의 경우 수행 성능도 좋지 않을 뿐 아니라, CPU 자원 부족을 초래하여 전체 시스템에 영향을 미침.
  • 해결방안
    • 많은 데이터에 복잡한 함수를 사용할 경우 : 함수가 적용될 데이터 집합을 최소화한 후 반드시 필요한 함수만 적용토록 튜닝을 해야함.
    • 리소스 과점 시 CPU 시간이 많이 걸리므로 'SQL ordered by Gets', 'SQL ordered by Reads' 2개 항목과 같이 비교해서 체크해야 함.

7-3) SQL ordered by Gets


-> Total Buffer Gets:  30,268,548,911
-> Captured SQL account for      59.4% of Total

                                Gets              CPU     Elapsed
  Buffer Gets   Executions    per Exec   %Total Time (s)  Time (s)    SQL Id
-------------- ------------ ------------ ------ -------- --------- -------------
 3,511,779,383           48 ############   11.6 ########  30904.05 72ud7wrkgbcdy
Module: XXOMV03820
BEGIN xxomv_dr_status_if_proc(:errbuf,:rc); END;

 3,359,890,313           60 ############   11.1 ########  28482.93 33jg5vtj2t49h
Module: XXOMV03820
SELECT OOH.ORG_ID ,OOS.NAME ORDER_SOURCE ,'D' || DECODE( OTTH.ATTRIBUTE4 ,'OMV_R
MA_H010', 'D' ,'OMV_RMA_H020', 'E' ) || OTTL.ATTRIBUTE9 ORDER_TYPE ,OOH.ORDER_NU
MBER ,OOH.ORDERED_DATE ,OOH.HEADER_ID ,OOH.BOOKED_FLAG ,OOH.FLOW_STATUS_CODE HEA
DER_STATUS_CODE ,OOH.ATTRIBUTE11 APPROVAL_STATUS ,OOH.TRANSACTIONAL_CURR_CODE ,O
................................................................................
................................................................................
................................................................................

의미
항목의미관련 컬럼
Total Buffer Gets스냅샷 구간 중 발생한 총 버퍼 캐시 I/O 횟수SUM(A.VALUE) WHERE STAT_NAME = 'session logical reads'
Captured SQL account for스냅샷 구간 중 발생한 총 버퍼 캐시 I/O 횟수 중 캡처된 SQL이 발생시킨 버퍼 캐시 I/O 비율100 * (SUM(B.BUFFER_GETS_DELTA) / Total Buffer Gets)
Buffer GetsSQL이 발생시킨 버퍼 캐시 I/O 횟수SUM(B.BUFFER_GETS_DELTA) GROUP BY SQL_ID
Gets per Exec1회 수행에 사용한 평균 버퍼 캐시 I/O 횟수Buffer Gets / Executions
%Total전체 버퍼 캐시 I/O 중 해당 SQL에 의해서 유발된 버퍼 캐시 I/O가 차지하는 비율100 * (Buffer Gets / Total Buffer Gets)
  • A : DBA_HIST_SYSSTAT
  • B : DBA_HIST_SQLSTAT
설명
  • 체크포인트
    • SQL 튜닝의 기본 원칙은 1히 수행 시 발생하는 I/O의 양을 줄이는 것이므로, 'SQL ordered by Elapsed Time ' 보고서에 나온 SQL_ID 보단 'SQL ordered by Gets'에 나온 SQL_ID 대상이 더 중요함
    • 이 보고서에서는 'Gets per Exec', '%Total' 2가지 항목을 중점적으로 체크해야 함

7-4) SQL ordered by Reads


-> Total Disk Reads:   2,413,993,592
-> Captured SQL account for     31.1% of Total

                               Reads              CPU     Elapsed
Physical Reads  Executions    per Exec   %Total Time (s)  Time (s)    SQL Id
-------------- ----------- ------------- ------ -------- --------- -------------
   667,667,719           0           N/A   27.7 ######## ######### 4z8cr86gxbgj6
Module: JAINITCL
SELECT MSIT.CONCATENATED_SEGMENTS, RGIA.INVENTORY_ITEM_ID, SUM(DISTINCT(NVL(RGIA
.TEMPLATE_ID,0))) TEMPLATE_ID FROM MTL_SYSTEM_ITEMS_KFV MSIT, JAI_RGM_ITEM_ATTRI
B_V RGIA WHERE (CONCATENATED_SEGMENTS LIKE :1) AND ( MSIT.INVENTORY_ITEM_ID = RG
IA.INVENTORY_ITEM_ID AND MSIT.ORGANIZATION_ID = RGIA.ORGANIZATION_ID AND MSIT.IN

   154,389,151           1 #############    6.4 ########  48248.76 2bg6mdhzq9rry
Module: XXCDBM1915
BEGIN xxcdbm_dwbk_duty_anly_pkg.main(:errbuf,:rc,:A0,:A1,:A2,:A3,:A4); END;
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Total Disk Reads스냅샷 구간 중 발생한 총 디스크 I/O 횟수.SUM(A.VALUE) WHERE STAT_NAME = 'physical reads'
Captured SQL account for스냅샷 구간 중 발생한 총 디스크 I/O 횟수 중 캡처된 SQL이 발생시킨 디스크 I/O 비율100 * (SUM(B.DISK_READS_DELTA) / Total tisk Reads)
Physical ReadsSQL이 발생시킨 디스크 I/O 횟수SUM(B.DISK_READS_DELTA) GROUP BY SQL_ID
Reads per Exec1회 수행에 발생하 평균 버퍼 디스크 I/O 횟수Physical Reads / Executions
%Total전체 디스크 I/O 중 해당 SQL이 발생시킨 디스크 I/O가 차지하는 비율100 * (Physical Reads/ Total Disk Reads)
  • A : DBA_HIST_SYSSTAT
  • B : DBA_HIST_SQLSTAT
설명
  • 체크포인트
    • 이 보고서에서 체크해야 할 항목은 'Reads per Exec', '%Total' 이다.
    • 이 대상에 대해 체크 후에도 Logical I/O 대비 Physical I/O가 많을 경우, 자주 사용되지 않는 이력 데이터를 최근에 자주 조회하는지 확인 필요

7-5) SQL ordered by Executions


-> Total Executions:     768,307,109
-> Captured SQL account for     63.2% of Total

                                              CPU per    Elap per
 Executions   Rows Processed  Rows per Exec   Exec (s)   Exec (s)     SQL Id
------------ --------------- -------------- ---------- ----------- -------------
 316,810,676     316,794,894            1.0       0.00        0.00 7bvgk9y5spmzb
Module: GSALES_OME_IF_9069
SELECT CURRENT_TIMESTAMP AT TIME ZONE TZ_OFFSET(:B1 ) FROM DUAL

  35,081,178      35,081,177            1.0       0.00        0.00 5q7zq1v84ngvn
Module: XXOMV02770
SELECT :B3 - (( TO_NUMBER(SUBSTR(TZ_OFFSET(:B2 ),1,3))+(TO_NUMBER(SUBSTR(TZ_OFFS
ET(:B2 ),1,1)||SUBSTR(TZ_OFFSET(:B2 ),5,2))/60))/24) + (( TO_NUMBER(SUBSTR(TZ_OF
FSET(:B1 ),1,3))+(TO_NUMBER(SUBSTR(TZ_OFFSET(:B1 ),1,1)||SUBSTR(TZ_OFFSET(:B1 ),
5,2))/60))/24) FROM DUAL
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Total Executions스냅샷 구간 중 모든 SQL 수행 횟수SUM(A.VALUE) WHERE STAT_NAME = 'execute count'
Captured SQL account for스냅샷 구간 중 모든 SQL 수행 횟수 중 캡처된 SQL의 수행 횟수 비율100 * (SUM(B.EXECUTIONS_DELTA) / Total Executions)
Rows ProcessedSQL이 발생시킨 디스크 I/O 횟수SUM(B.DISK_READS_DELTA) GROUP BY SQL_ID
Rows per Exec1회 수행당 발생시킨 평균 디스크 I/O 횟수Physical Reads / Executions
설명
  • 체크포인트
    • 이 보고서에서 체크해야 할 항목은 'Total Executions', 'Rows per Exec' 이다.
    • 수행횟수가 많을 경우, 약간의 사용 효율성 변화에도 DB 전체에 큰 영향을 미칠 수 있으므로 상시 체크 필요하고, 수행횟수 줄일 수 있는지 확인해야 함

7-6) SQL ordered by Parse Calls


-> Total Parse Calls:      37,202,169
-> Captured SQL account for      55.7% of Total

                            % Total
 Parse Calls  Executions     Parses    SQL Id
------------ ------------ --------- -------------
   3,839,612    3,839,645     10.32 2ym6hhaq30r73
select type#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,NVL(lis
ts,65535),NVL(groups,65535),cachehint,hwmincr, NVL(spare1,0),NVL(scanhint,0) fro
m seg$ where ts#=:1 and file#=:2 and block#=:3

   1,230,648    1,230,659      3.31 grwydz59pu6mc
select text from view$ where rowid=:1
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Total Parse Calls스냅샷 구간 중 모든 파스 콜 횟수SUM(A.VALUE) WHERE STAT_NAME = 'parse count (total)'
Captured SQL account for스냅샷 구간 중 모드 파스 콜 횟수 중 캡처된 SQL의 파스 콜 비율100 * (SUM(B.PARSE_CALLS_DELTA) / Total Parse Calls)
Parse CallsSQL이 발생시킨 전체 파스 콜 횟수SUM(B.PARSE_CALLS_DELTA) GROUP BY SQL_ID
% Total Parses전체 파스 콜 중 해당 SQL이 발생시킨 파스 콜이 차지하는 비율100 * (Parse Calls / Total Parse Calls)
  • A : DBA_HIST_SYSSTAT
  • B : DBA_HIST_SQLSTAT
설명
  • 체크포인트
    • 하드 파싱이 많은 SQL_ID를 찾아 소프트 파싱으로 변경이 가능한지 검토함

7-7) SQL ordered by Sharable Memory


-> Only Statements with Sharable Memory greater than 1048576 are displayed

Sharable Mem (b)  Executions   % Total    SQL Id
---------------- ------------ -------- -------------
      20,363,454        1,829     0.32 gt83120pkp4u3
Module: XXINVS1195-1
INSERT INTO XXINVS_CURINV_SNAPSHOT XCS ( CREATED_BY ,CREATION_DATE ,OPERATING_UN
IT_ID ,INVENTORY_ORGANIZATION_ID ,INVENTORY_ORGANIZATION_CODE ,SUBINVENTORY_CODE
 ,GRADE_CODE ,LOT_NO ,PRODUCT1_CODE ,PRODUCT2_CODE ,PRODUCT3_CODE ,PRODUCT4_CODE
 ,HQ_ACCOUNTING_UNIT_CODE ,INVENTORY_ITEM_ID ,MODEL_CODE ,MODEL_DESCRIPTION ,MAR

      12,754,343        1,933     0.20 6qvvqy714u1xj
Module: XXOMV02770
SELECT DISTINCT * FROM ( SELECT /*+ index(xsli.ola oe_order_lines_xn15) *
/ * FROM XXOMV_SO_LINE_IF_V XSLI WHERE (XSLI.LINE_LAST_UPDATE_DATE BETWEEN :B2 A
ND :B1 ) UNION ALL SELECT /*+ index(xsli.oha oe_order_headers_all_xn7) */ * FRO
M XXOMV_SO_LINE_IF_V XSLI WHERE (XSLI.HEADER_LAST_UPDATE_DATE BETWEEN :B2 AND :B
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Sharable Mem (b)B.SHARABLE_MEM GROUP BY SQL_ID
% Total100 * (B.SHARABLE_MEM GROUP BY SQL_ID / A.VALUE WHERE PARAMETER_NAME = '__shared_pool_size')
  • A : DBA_HIST_PARAMETER
  • B : DBA_HIST_SQLSTAT
설명
  • 이 보고서에서 'Sharable Mem (b)' 크기가 큰 경우는 아래와 같다
    • 자식 커서의 수가 많은 경우
    • SQL문이 매우 긴 경우
  • 체크포인트
    • 자식 커서의 수가 과도하게 많은 경우 라이브러리 캐시 래치 경합을 발생시킬 수 있음
    • 이를 해결하기 위해서는 V$SQL_SHARED_CURSOR 뷰를 통해 커서 공유 실패 원인 파악하여 대처해야 함

7-8) SQL ordered by Version Count


-> Only Statements with Version Count greater than 20 are displayed

 Version
  Count   Executions     SQL Id
-------- ------------ -------------
     168      351,636 37kp7bjxfn4u5
Module: JDBC Thin Client
SELECT NLS_DATE_LANGUAGE FROM (SELECT UTF8_DATE_LANGUAGE NLS_DATE_LANGUAGE FROM
FND_LANGUAGES WHERE NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) IN ('UTF8', 'AL3
2UTF8') AND INSTALLED_FLAG <>'D' AND NLS_LANGUAGE = :B1 UNION SELECT LOCAL_DATE_
LANGUAGE NLS_DATE_LANGUAGE FROM FND_LANGUAGES WHERE NLS_CHARSET_NAME(NLS_CHARSET

      83       49,912 bkaaqaa5aj3gf
Module: GMFG_BOM_IF_0113
SELECT MESSAGE_TEXT, MESSAGE_NUMBER, TYPE, FND_LOG_SEVERITY, CATEGORY, SEVERITY
FROM FND_NEW_MESSAGES M, FND_APPLICATION A WHERE :B3 = M.MESSAGE_NAME AND :B2 =
M.LANGUAGE_CODE AND :B1 = A.APPLICATION_SHORT_NAME AND M.APPLICATION_ID = A.APPL
ICATION_ID
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Version CountSQL에 종속된 자식 커서의 수VERSION_COUNT
  • DBA_HIST_SQLSTAT
설명
  • 이 보고서는 자식 커서의 수가 많은 대상을 보여줌
  • 자식 커서의 수가 증가되는 원인은 아래와 같음
    • 여러 DB 유저가 동일한 이름의 오브젝트를 소유하고 있는 경우
    • 실행 계획의 변경이 잦을 때
    • 설정된 바인드 변수의 타입이 다른 경우
  • 체크포인트
    • 자식 커서가 공유되지 못하는 원인을 파악하기 위해서는 V$SQL_SHARED_CURSOR.BIND_MISMATCH 값을 체크해야 함

SELECT 
         SQL_ID                           
        ,CHILD_NUMBER          AS CHILD_NUM                 
        ,DECODE (UNBOUND_CURSOR            ,'N','',UNBOUND_CURSOR             ) AS UNBOUND_CURSOR                    
        ,DECODE (SQL_TYPE_MISMATCH         ,'N','',SQL_TYPE_MISMATCH          ) AS SQL_TYPE                          
        ,DECODE (OPTIMIZER_MISMATCH        ,'N','',OPTIMIZER_MISMATCH         ) AS OPTIMIZER                         
        ,DECODE (OUTLINE_MISMATCH          ,'N','',OUTLINE_MISMATCH           ) AS OUTLINE                           
        ,DECODE (STATS_ROW_MISMATCH        ,'N','',STATS_ROW_MISMATCH         ) AS STATS_ROW                         
        ,DECODE (LITERAL_MISMATCH          ,'N','',LITERAL_MISMATCH           ) AS LITERAL                           
        ,DECODE (SEC_DEPTH_MISMATCH        ,'N','',SEC_DEPTH_MISMATCH         ) AS SEC_DEPTH                         
        ,DECODE (EXPLAIN_PLAN_CURSOR       ,'N','',EXPLAIN_PLAN_CURSOR        ) AS EXPLAIN_PLAN_CURSOR               
        ,DECODE (BUFFERED_DML_MISMATCH     ,'N','',BUFFERED_DML_MISMATCH      ) AS BUFFERED_DML                      
        ,DECODE (PDML_ENV_MISMATCH         ,'N','',PDML_ENV_MISMATCH          ) AS PDML_ENV                          
        ,DECODE (INST_DRTLD_MISMATCH       ,'N','',INST_DRTLD_MISMATCH        ) AS INST_DRTLD                        
        ,DECODE (SLAVE_QC_MISMATCH         ,'N','',SLAVE_QC_MISMATCH          ) AS SLAVE_QC                          
        ,DECODE (TYPECHECK_MISMATCH        ,'N','',TYPECHECK_MISMATCH         ) AS TYPECHECK                         
        ,DECODE (AUTH_CHECK_MISMATCH       ,'N','',AUTH_CHECK_MISMATCH        ) AS AUTH_CHECK                        
        ,DECODE (BIND_MISMATCH             ,'N','',BIND_MISMATCH              ) AS BIND                              
        ,DECODE (DESCRIBE_MISMATCH         ,'N','',DESCRIBE_MISMATCH          ) AS DESCRIBE_MIS                      
        ,DECODE (LANGUAGE_MISMATCH         ,'N','',LANGUAGE_MISMATCH          ) AS LANGUAGE                          
        ,DECODE (TRANSLATION_MISMATCH      ,'N','',TRANSLATION_MISMATCH       ) AS TRANSLATION                       
        ,DECODE (ROW_LEVEL_SEC_MISMATCH    ,'N','',ROW_LEVEL_SEC_MISMATCH     ) AS ROW_LEVEL_SEC                     
        ,DECODE (INSUFF_PRIVS              ,'N','',INSUFF_PRIVS               ) AS INSUFF_PRIVS                      
        ,DECODE (INSUFF_PRIVS_REM          ,'N','',INSUFF_PRIVS_REM           ) AS INSUFF_PRIVS_REM                  
        ,DECODE (REMOTE_TRANS_MISMATCH     ,'N','',REMOTE_TRANS_MISMATCH      ) AS REMOTE_TRANS                      
        ,DECODE (LOGMINER_SESSION_MISMATCH ,'N','',LOGMINER_SESSION_MISMATCH  ) AS LOGMINER_SESSION                  
        ,DECODE (INCOMP_LTRL_MISMATCH      ,'N','',INCOMP_LTRL_MISMATCH       ) AS INCOMP_LTRL                       
        ,DECODE (OVERLAP_TIME_MISMATCH     ,'N','',OVERLAP_TIME_MISMATCH      ) AS OVERLAP_TIME                      
        ,DECODE (SQL_REDIRECT_MISMATCH     ,'N','',SQL_REDIRECT_MISMATCH      ) AS SQL_REDIRECT                      
        ,DECODE (MV_QUERY_GEN_MISMATCH     ,'N','',MV_QUERY_GEN_MISMATCH      ) AS MV_QUERY_GEN                      
        ,DECODE (USER_BIND_PEEK_MISMATCH   ,'N','',USER_BIND_PEEK_MISMATCH    ) AS USER_BIND_PEEK                    
        ,DECODE (TYPCHK_DEP_MISMATCH       ,'N','',TYPCHK_DEP_MISMATCH        ) AS TYPCHK_DEP                        
        ,DECODE (NO_TRIGGER_MISMATCH       ,'N','',NO_TRIGGER_MISMATCH        ) AS NO_TRIGGER                        
        ,DECODE (FLASHBACK_CURSOR          ,'N','',FLASHBACK_CURSOR           ) AS FLASHBACK_CURSOR                  
        ,DECODE (ANYDATA_TRANSFORMATION    ,'N','',ANYDATA_TRANSFORMATION     ) AS ANYDATA_TRANSFORMATION            
        ,DECODE (INCOMPLETE_CURSOR         ,'N','',INCOMPLETE_CURSOR          ) AS INCOMPLETE_CURSOR                 
        ,DECODE (TOP_LEVEL_RPI_CURSOR      ,'N','',TOP_LEVEL_RPI_CURSOR       ) AS TOP_LEVEL_RPI_CURSOR              
        ,DECODE (DIFFERENT_LONG_LENGTH     ,'N','',DIFFERENT_LONG_LENGTH      ) AS DIFFERENT_LONG_LENGTH             
        ,DECODE (LOGICAL_STANDBY_APPLY     ,'N','',LOGICAL_STANDBY_APPLY      ) AS LOGICAL_STANDBY_APPLY             
        ,DECODE (DIFF_CALL_DURN            ,'N','',DIFF_CALL_DURN             ) AS DIFF_CALL_DURN                    
        ,DECODE (BIND_UACS_DIFF            ,'N','',BIND_UACS_DIFF             ) AS BIND_UACS_DIFF                    
        ,DECODE (PLSQL_CMP_SWITCHS_DIFF    ,'N','',PLSQL_CMP_SWITCHS_DIFF     ) AS PLSQL_CMP_SWITCHS_DIFF            
        ,DECODE (CURSOR_PARTS_MISMATCH     ,'N','',CURSOR_PARTS_MISMATCH      ) AS CURSOR_PARTS                      
        ,DECODE (STB_OBJECT_MISMATCH       ,'N','',STB_OBJECT_MISMATCH        ) AS STB_OBJECT                        
        ,DECODE (ROW_SHIP_MISMATCH         ,'N','',ROW_SHIP_MISMATCH          ) AS ROW_SHIP                          
        ,DECODE (PQ_SLAVE_MISMATCH         ,'N','',PQ_SLAVE_MISMATCH          ) AS PQ_SLAVE                          
        ,DECODE (TOP_LEVEL_DDL_MISMATCH    ,'N','',TOP_LEVEL_DDL_MISMATCH     ) AS TOP_LEVEL_DDL                     
        ,DECODE (MULTI_PX_MISMATCH         ,'N','',MULTI_PX_MISMATCH          ) AS MULTI_PX                          
        ,DECODE (BIND_PEEKED_PQ_MISMATCH   ,'N','',BIND_PEEKED_PQ_MISMATCH    ) AS BIND_PEEKED_PQ                    
        ,DECODE (MV_REWRITE_MISMATCH       ,'N','',MV_REWRITE_MISMATCH        ) AS MV_REWRITE                        
        ,DECODE (ROLL_INVALID_MISMATCH     ,'N','',ROLL_INVALID_MISMATCH      ) AS ROLL_INVALID                      
        ,DECODE (OPTIMIZER_MODE_MISMATCH   ,'N','',OPTIMIZER_MODE_MISMATCH    ) AS OPTIMIZER_MODE                    
        ,DECODE (PX_MISMATCH               ,'N','',PX_MISMATCH                ) AS PX_MISMATCH                                
        ,DECODE (MV_STALEOBJ_MISMATCH      ,'N','',MV_STALEOBJ_MISMATCH       ) AS MV_STALEOBJ                       
        ,DECODE (FLASHBACK_TABLE_MISMATCH  ,'N','',FLASHBACK_TABLE_MISMATCH   ) AS FLASHBACK_TABLE                   
        ,DECODE (LITREP_COMP_MISMATCH      ,'N','',LITREP_COMP_MISMATCH       ) AS LITREP_COMP                       
FROM    V$SQL_SHARED_CURSOR SC
WHERE   SC.SQL_ID  = :V_SQL_ID
ORDER BY SC.SQL_ID,SC.CHILD_NUMBER 
;

7-9) SQL ordered by Cluster Wait Time


      Cluster   CWT % of     Elapsed         CPU
Wait Time (s) Elapsd Tim     Time(s)     Time(s)     Executions    SQL Id
------------- ---------- ----------- ----------- -------------- -------------
    49,327.16       44.1  111,939.18   14,956.62             28 c4vyq4y9uapwx
Module: XXETF15110
BEGIN xxetf_vat_interface_pkg.main_proc(:errbuf,:rc,:A0,:A1,:A2); END;

    46,280.10       99.8   46,386.90       67.11             39 d5s354pq6wj7w
Module: sqlplus@LGEGLERDSE1Q (TNS V1-V3)
SELECT T.INST_NO ,T.SESS_HASH_VALUE ,T.LOGTIME ,T.SQL_HASH_VALUE ,NVL(T.USERNAME
, 'APPS') PARSING_SCHEMA_NAME ,T.MODULE ,T.SQL_TEXT FROM KIC.EPI_SQL_201210_11 T
 WHERE T.SQL_HASH_VALUE BETWEEN :B2 AND :B1
..................................................................................
..................................................................................
..................................................................................

의미
항목의미관련 컬럼
Cluster Wait Time (s)SQL이 공유 캐시 획득할 때 대기한 총 소요 시간(단위:초)SUM(CLWAIT_DELTA) / 1,000,000 GROUP BY SQL_ID
CWT % of Elapsd TimeSQL이 수행된 시간 중 다른 인스턴스의 캐시 획득 시간이 차지하는 비율100 * Cluster Wait Time (s) / Elapsed Time (s)
설명
  • SQL 수행 시간이 오래 걸리고 'CWT % of Elapsd Time' 항목의 비율이 높다면 아래의 사항 체크해야 함
    • RAC를 구성하는 서버간 네트워크 병목
    • RAC를 구성하는 각 인스턴스의 버퍼 캐시 경합
    • RAC를 구성하는 서버의 네트워크 관련 커널 설정 값

8. Instance Activity Stats


Statistic                                     Total     per Second     per Trans
-------------------------------- ------------------ -------------- -------------
CPU used by this session                 63,942,871          601.8          11.8
CPU used when call started               62,317,568          586.5          11.5
CR blocks created                        14,584,448          137.3           2.7
Cached Commit SCN referenced            115,528,127        1,087.3          21.3
Commit SCN cached                             5,942            0.1           0.0
DB time                                 787,703,446        7,413.5         145.3
DBWR checkpoint buffers written          42,393,320          399.0           7.8
................................................................................
................................................................................
................................................................................

의미
항목의미관련 컬럼
Statistic통계 이름STAT_NAME
Total통계 정보 발생 횟수SUM(VALUE) GROUP BY STAT_NAME
per Second초당 통계 정보 발생 횟수---
per Trans트랜잭션당 통계 정보 발생 횟수---
설명
  • Instance Activity Stats 단위 보고서는 스냅샷 구간 중 DB에 수집된 통계 정보 수치를 보여줌.
    • DBA_HIST_SYSSTAT 사용
    • V$SYSSTAT 참조
  • 체크포인트
    • 통계 정보는 인스턴스 운영 시 특정 작업이 수행되면 작업과 관련된 통계 수치가 증가하므로, 스냅샷 구간의 인스턴스 상태 분석 시 사용될 수 있음.

9. Instance Activity Stats - Absolute Values


Statistic                            Begin Value       End Value
-------------------------------- --------------- ---------------
session cursor cache count           121,940,084     129,411,331
opened cursors current                    19,310          29,084
workarea memory allocated                 49,719       1,724,148
logons current                               531             766
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Begin Value시작 스냅샷의 통계 값SUM(VALUE) GROUP BY STAT_NAME
End Value종료 스냅샷의 통계 값SUM(VALUE) GROUP BY STAT_NAME
설명
  • Instance Activity Stats - Absolute Values 단위 보고서는 통계 정보 중 특정 파라미터와 관련된 통계에 대한 수치를 보여줌.
    • DBA_HIST_SYSSTAT 사용
  • Statistic 통계수치 의미
session cursor cache count스냅샷 수행 시 전체 세션의 캐시에 저장된 커서 수
opened cursors current스냅샷 수행 시 오픈된 전체 커서 수
workarea memory allocated스냅샷 수행 시 전체 PGA 메모리의 크기
logons current스냅샷 수행 시 로그온 되어 있는 세션의 총 수. 활동 중인 세션과 비활동 중인 세션 모두를 포함함.
  • session cursor cache count
    • SESSION_CACHED_CURSORS 초기화 파라미터가 0 이상의 값으로 설정되어 있을 때만 수치가 증가함.
    • AWR DB의 수치보다는, V$SESSTAT 동적 뷰를 검사하여, 대부분의 세션이 SESSION_CACHED_CURSORS 파라미터에 설정된 값에 도달해 있다면, 메모리 여유가 있을 경우 이 파라미터 값을 올려줌.

SELECT CASE WHEN VALUE >= 15 AND VALUE <= 20 THEN '15 ~ 20'
            WHEN VALUE >= 10 AND VALUE <= 14 THEN '10 ~ 14'
            WHEN VALUE >= 5  AND VALUE <= 9  THEN ' 5 ~  9'
            WHEN VALUE >= 0  AND VALUE <= 4  THEN ' 0 ~  4'
            END "CURSOR COUNT",
       COUNT(VALUE) "VALUE"
FROM   V$SESSTAT
WHERE  STATISTIC# = 283 -- session cursor cache count ID
GROUP  BY CASE WHEN VALUE >= 15 AND VALUE <= 20 THEN '15 ~ 20'
               WHEN VALUE >= 10 AND VALUE <= 14 THEN '10 ~ 14'
               WHEN VALUE >= 5  AND VALUE <= 9  THEN ' 5 ~  9'
               WHEN VALUE >= 0  AND VALUE <= 4  THEN ' 0 ~  4'
               END
ORDER  BY 1 DESC
/

  • opened cursors current
    • OPEN_CURSORS 파라미터와 연관 있음
    • AWR DB의 수치보다는, V$SESSTAT 동적 뷰를 검사하여, 세션의 최대 커서 오픈 수를 확인하고 이 수치가 OPEN_CURSORS 파라미터에서 지정한 값과 차이가 없다면 OPEN_CURSORS 수치를 높인다.

SELECT MAX(VALUE) "MAX CUR OPEN"
FROM   V$SESSTAT
WHERE  STATISTIC# = 3

  • workarea memory allocated
    • PGA 크기와 관련 있음
  • logons current
    • SESSIONS 파라미터와 연관이 있음
SESSION_CACHED_CURSORS개별 세션이 사용하는 PGA 영역에 저장할 수 있는 커서의 개수를 지정함.
저장되어 있는 커서는 소프트 파스와 하드 파스 과정 없이 사용되며 기본 값은 20
OPEN_CURSORS한 개의 세션이 오픈할 수 있는 최대 커서의 개수를 설정함.
세션이 이 파라미터에서 지정한 값 이상의 커서를 오픈하려고 하면 ORA-1000 "maximum open cursors exceeded" 에러가 발생함.
WORKAREA_SIZE_POLICYPGA 영역 관리를 Oracle에서 할 것인지, 사용자가 할 것인지를 지정함.
AUTO로 설정된 경우 PGA_AGGREATE_TARGET 파라미터에서 설정한 값 한도 내에서 각 세션이 필요한만큼 PGA 공간을 사용할 수 있으며,
MANUAL로 설정된 경우 SORT_AREA_SIZE나 HASH_AREA_SIZE 등과 같은 PGA 관련 파라미터에서 설정한 값만큼 PGA를 사용함.
PGA_AGGREATE_TARGETWORKAREA_SIZE_POLICY 파라미터가 AUTO로 설정되어 있는 경우, 전체 세션은 PGA_AGGREATE_TARGET에서 지정한 값 이하에서 자유롭게 PGA 공간을 사용할 수 있음
SESSIONSDB에 접속할 수 있는 최대 세션 수를 지정함

10. Instance Activity Stats - Thread Activity


Statistic                                     Total  per Hour
-------------------------------- ------------------ ---------
log switches (derived)                           94      3.18
          -------------------------------------------------------------

의미
항목의미관련 컬럼
Total발생한 로그 스위치 횟수SEQUENCE#
per Hour한 시간 평균 발생한 로그 스위치 횟수---
설명
  • Instance Activity Stats - Thread Activity 단위 보고서는 리두 로그 수위치 횟수를 보여줌
    • DBA_HIST_THREAD 사용
    • V$THREAD 참조
  • 체크포인트
    • 로그 스위치 발생 시 쓰레드 체크포인트가 발생하며, 쓰레드 체크포인트는 체크포인트 큐와 파일 큐에 링크된 더티 버퍼를 내려쓰고, 모든 데이터 파일의 헤더를 갱신시키므로 많은 I/O가 발생하므로, 너무 잦은 로그 스위치 발생은 I/O 경합으로 이어질 수 있음
    • 또한 아카이브 로그 모드인 경우 아카이브 파일 생성에 따른 I/O 증가 및 아카이브 파일 생성 속도보다 리두 로그 순환이 빠르면 인스턴스행(Hang) 현상이 발생하므로, 적정한 크기의 리두 로그 파일 설정이 필요함.
  • 로그 파일 스위치 발생량을 줄이기 위한 방안
    • 불필요한 DML 제거 : 과거 데이터 삭제를 위해서 발생하는 DELETE 작업은 테이블을 파티션으로 변경하여 파티션 삭제로 대체 |
    • NOLOGGING 옵션 적용 : 대량의 리두 로그 데이터를 발생시키는 배치 업무에 NOLOGGING 옵션을 적용함 |
    • IOT 테이블 적용으로 테이블과 인덱스에 대한 세그먼트 단일화 : 처리 이력 데이터가 주로 입력되는 테이블을 IOT로 변경하여 테이블과 인덱스에 발생하는 로그 발생량을 크게 줄일 수 있음 |
  • 리두 로그 생성 및 디스크 쓰기 성능을 높이기 위한 방안
    • 리두 로그 파일을 최적의 성능을 가지는 디스크에 생성
    • 배치 업무 수행 시 배치 커밋 수행
    • NOLOGGING 옵션을 적절히 사용
  • 아래는 리두 로그 버퍼 및 파일 관련 대기 이벤트 설명

10-1) log buffer space

  • 발생원인
    • 'log buffer space' 이벤트는 리두 로그 데이터를 리두 로그 버퍼에 기록하려고 할 때 프리 공간을 확보하지 못하고 대기하면 발생함.
    • 이 현상은 LGWR이 리두 로그 버퍼에 저장된 데이터를 리두 로그 파일에 기록해서 프리 공간을 확보하는 속도보다 DML이 생성하는 리두 로그 데이터가 생성되는 속도가 더 빠를 때 발생함.
  • 발생상황 분류
    • 'log buffer space' 대기 이벤트만 주로 발생
    • 'log file sync', 'log buffer space' 대기 이벤트가 같이 높은 수치로 발생
    • 'log file swich completion', 'log buffer space' 대기 이벤트가 같이 높은 수치로 발생

10-2) log file sync

  • 발생원인
    • 리두 로그 버퍼에서 리두 로그 파일로 쓰기를 할 때 'log file sync' 이벤트를 대기함.
  • 발생상황 분류
    • I/O 성능이 낮은 경우 : I/O 경합을 줄이기 위해 추가적인 디스크 분산을 고려해야 하며, 파일이 위치하는 I/O 시스템 성능 개선 필요
    • 리두 로그 버퍼 크기가 너무 크게 설정 : 모니터링을 통해 적절한 크기 선정 필요하며, DB 구축 단계 시 1M ~ 5M 권장
    • 커밋이 빈번히 발생

10-3) log file swich completion

  • 발생원인
    • 현재 로그 파일의 공간이 모두 사용되고 나면 로그 스위치가 발생하는데, 이 때 이벤트 대기함.
    • 해결방안은 리두 로그 데이터의 발생량을 줄이고 디스크 I/O 성능을 개선해야 함.

11-4) log file parallel write

  • 발생원인
    • 리두 로그 버퍼의 리두 레코드를 LGWR이 리두 로그 파일로 기록하는 동안 발생하며, 물리적인 디스크별로 병렬로 수행됨.
    • 해결방안은 'log file sync'과 동일함.

문서에 대하여