목차
1. Latch Sleep Breakdown
2. Latch Miss Sources
3. Parent Latch Statistics
4. Child Latch Statistics
5. Segments by Logical Reads
6. Segments by Physical Reads
7. Segments by Row Lock Waits
8. Segments by ITL Waits
9. Segments by Buffer Busy Waits
10. Segments by Global Cache Buffer Busy
11. Segments by CR Blocks Received
12. Segments by Current Blocks Received
13. Dictionary Cache Stats
14. Dictionary Cache Stats (RAC)
15. Library Cache Activity
16. Library Cache Lock과 Library Cache Pin
17. Library Cache Activity (RAC)
18. Process Memory Summary
19. SGA Memory Summary
20. SGA breakdown difference
21. Streams CPU/IO Usage
22. Streams Capture/Apply/Queues
23. Buffered Subscribers
24. Rule Set
25. Resource Limit Stats
26. init.ora Parameters
27. Global Enqueue Statistics
28. Global CR Served Stats
29. Global CURRENT Served Stats
30. Global Cache Transfer Stats
1. Latch Sleep Breakdown
Latch Name
----------------------------------------
Get Requests Misses Sleeps Spin Gets Sleep1 Sleep2 Sleep3
-------------- ----------- ----------- ---------- -------- -------- --------
gcs opaque info freelist
92,442,740 119,997 350 119,677 0 0 0
undo global data
160,828,696 113,453 1,367 112,192 0 0 0
ges enqueue table freelist
192,550,785 99,225 513 98,748 0 0 0
KJC message pool free list
48,985,704 53,638 189 53,475 0 0 0
..........................
..........................
..........................
의미
항목 | 의미 | 관련 컬럼 |
---|
Latch Name | 래치 이름 | LATCH_NAME |
Get Requests | 대기 가능 모드로 래치가 요청된 횟수 | GETS |
Misses | 대기 가능 모드로 래치를 요청했을 때 래치를 바로 획ㄷ득하지 못하고 대기한 횟수 | MISSES |
Sleeps | 대기 가능 모드로 래치를 요청했을 때 슬립한 횟수 | SLEEPS |
Spin Gets | 대기 가능 모드로 요청했을 때 스핀을 수행했ㄷ가 래치를 획득한 횟수 | SPIN_GETS |
Sleep1~3 | 10g에서는 더 이상 사용되지 않으며, 언제나 값이 0임 | SLEEP1, SLEEP2, SLEEP3 |
설명
- Latch Sleep Breakdown 단위 보고서는 래치 통계 정보를 스핀 발생량 기준으로 보여줌
- DBA_HIST_LATCH 사용
- V$LATCH 참조
- 체크포인트
- 이 보고서는 스핀 발생량 기준으로 보여주는데, 스핀 발생량 보다 슬립 발생량을 기준으로 보는 것이 경합 래치를 찾는데 더욱 효과적임
- 스핀 발생량이 많지만 슬립 발생량이 적은것은, 슬립 전에 래치를 획득한 경우가 많기 때문에 경합으로 보기 힘들지만, 슬립은 래치 획득에 실패한 것이므로 경합으로 볼 수 있음.
- AWR이 아닌 실시간 경합 래치를 확인하는 스크립트
SELECT NAME,
COUNT(*) CNT
FROM V$LATCHNAME A,
V$SESSION_WAIT B
WHERE A.LATCH# = B.P2
AND B.EVENT = 'latch free'
GROUP BY NAME
ORDER BY CNT DESC
/
- AWR에서 스핀 발생량이 아닌 슬립 발생량으로 확인하는 스크립트
SELECT B.LATCH_NAME NAME,
E.GETS - B.GETS GETS,
E.MISSES - B.MISSES MISSES,
E.SLEEPS - B.SLEEPS SLEEPS,
E.SPIN_GETS - B.SPIN_GETS SPIN_GETS
FROM DBA_HIST_LATCH B,
DBA_HIST_LATCH E
WHERE B.LATCH_HASH = E.LATCH_HASH
AND B.DBID = (SELECT DBID
FROM V$DATABASE)
AND B.DBID = (SELECT DBID
FROM V$DATABASE)
AND B.INSTANCE_NUMBER = :INST
AND B.INSTANCE_NUMBER = :INST
AND B.SNAP_ID = :B_SNAP
AND E.SNAP_ID = :E_SNAP
AND E.SLEEPS - B.SLEEPS > 0
ORDER BY SLEEPS DESC,
NAME
;
- 래치 경합 발생 시 해결방안
- _SPIN_COUNT 조정 : 이 값을 증가시키면 경합은 일부 해소되나 더 많은 CPU 자원을 사용하므로, 효과가 떨어짐. 마지막 방법으로 선택하는 것이 좋음
- 래치 경합 원인 해결 : 아래의 9가지 이벤트로 확인
1-1) cache buffers chains (latch_ cache buffers chains)
- 설명
- 사용하고자 하는 데이터를 저장한 블록이 버퍼 캐시에 복사되어 있는지 확인하기 위해 버퍼 캐시의 해시 체인 구조를 검색할 때 획득함.
- 대부분 '과도한 버퍼 캐시 I/O 발생', '핫 블록 발생' 시 확인 가능함.
- 원인
- 비효율적인 SQL로 'SQL ordered by Gets' 보고서에서 I/O가 과다한 SQL을 튜닝해야 함.
- 해결방안
- 어플리케이션 로직 수정
- 데이터 분산
- 인덱스 Skew 확장 문제 해결
- '_DB_BLOCK_HASH_BUCKETS', '_DB_BLOCK_HASH_LATCHES' 히든 파라미터 조정으로 래치 경합 해소하는 것은 권장하지 않음
1-2) cache buffers lru chain (latch_ cache buffers lru chain)
- 설명
- 버퍼 캐시의 프리 버퍼를 할당받기 위해 LRU 리스트를 타색하거나 DBWR이 더티 버퍼를 디스크에 반영하고 나서 해당 버퍼를 LRU 리스트에 등록할 때 획득함.
- 원인
- 적정하지 않은 버퍼 캐시 크기 설정
- 과도한 버퍼 캐시 I/O 발생
- 해결방안
- 비효율적인 SQL로 'SQL ordered by Gets' 보고서에서 I/O가 과다한 SQL을 튜닝해야 함.
- '_DB_BLOCK_LRU_LATCH' 히든 파라미터 조정으로 래치 경합 해소하는 것은 권장하지 않음
1-3) In-memory undo (latch_ In-memory undo)
- 설명
- 메모리 처리 언두에 대한 래치 경합 시 발생함
- 해결방안
- 메모리 처리 언두를 사용하지 않음 : _IN_MEMORY_UNDO 히든 파라미터 FALSE로 변경
- In-memory undo 래치 수 증가
- PROCESSES 파라미터 값 증가
- _IMU_POOL 파라미터 값 증가
- SHARED_POOL_SIZE 파라미터 값 증가
1-4) library cache (latch_ library cache)
- 설명
- 라이브러리 캐시 영역을 검색하거나 라이브러리 캐시 영역에 프리 영역을 할당받고자 할 때 획득하는 래치
- 해결방안
- SESSION_CACHED_CURSORS 파라미터 값 증가 : 50 이상 권장
- LOCK_SGA 값 TRUE로 변경 : SGA 영역을 물리적 메모리 영역에 고정시킴
1-5) shared pool (latch_ shared pool)
- 설명
- 공유 풀의 프리 리스트로부터 프리 청크를 할당받고자 할 때 동시 세션들에 의한 경합으로 인해 주로 발생
- 해결방안
- 바인드 변수 사용
- CURSOR_SHARING 파라미터 사용 : SYSTEM이 아닌 SESSION 단위로 적용
- 하드 파싱 유발시키는 SQL 확인하는 스크립트
SELECT SQL_ID "SQL ID",
' ' || REPLACE(REPLACE(REPLACE(SQL_TEXT, CHR(9), ' '), CHR(10), ' '),
CHR(13),
' ') "SQL Text",
CNT "Count",
EXECUTIONS "Exec (Max)",
SHARABLE_MEM "Memory (bytes)",
HASH_VALUE "Hash_value",
NVL(MODULE, '-') "Module"
FROM (SELECT SUBSTR(SQL_TEXT, 1, 60) SQL_PARTIAL,
MAX(TO_CHAR(SUBSTR(SQL_FULLTEXT, 1, 3000))) SQL_TEXT,
COUNT(*) CNT,
SUM(SHARABLE_MEM) SHARABLE_MEM,
MAX(HASH_VALUE) HASH_VALUE,
MAX(SQL_ID) SQL_ID,
MAX(EXECUTIONS) EXECUTIONS,
MAX(MODULE) MODULE
FROM V$SQL
WHERE EXECUTIONS > 0
AND EXECUTIONS < 3
GROUP BY SUBSTR(SQL_TEXT, 1, 60)
HAVING COUNT(*) >= 10
ORDER BY CNT DESC,
SHARABLE_MEM DESC)
;
1-6) row cache objects (latch_ row cache objects)
- 설명
- 로우 캐시의 데이터를 변경하고자 할 때 가장 먼저 획득해야 하는 래치.
- 해결방안
- 'Dictionary Cache Status' 단위 보고서 참고
1-7) redo allocation (latch_ redo allocation)
- 설명
- 리두 록, 버퍼의 프리 공간을 확보하기 위해서 획득할 때 발생함.
- 해결방안
- _LOG_PARALLELISM, _LOG_PARALLELISM_MAX 히든 파라미터 설정 값 조정 : 16개 초과는 권장하지 않음
- NOLOGGING 옵션 사용 : 리두 로그 버퍼의 프리 공간 요청 빈도를 낮추기 위함
1-8) redo copy (latch_ redo copy)
- 설명
- PGA 내에 생성된 체인지 벡터를 리두 로그 버퍼 공간에 복제하기 위해 가장 먼저 획득하는 래치
- 원인
- 트랜잭션 발생 빈도에 비해 리두 로그 버퍼 영역이 부족하여 발생함.
- 해결방안
- 'redo allocation', 'log buffer space', 'log file sync' 이벤트와 함께 검토
1-9) redo writing (latch_ redo writing)
- 설명
- 리두 로그 버퍼의 프리 공간이 부족하여 LGWR에게 리두 로그 버퍼의 데이터를 리두 로그 파일로 쓰고 프리 공간을 확보하고자 할 때 획득하는 래치
- 원인
- 리두 로그 버퍼의 프리 공간을 요청 즉시 확보하지 못할 때 발생함
- 해결방안
- 'log buffer space' 이벤트와 함께 검토
2. Latch Miss Sources
NoWait Waiter
Latch Name Where Misses Sleeps Sleeps
------------------------ -------------------------- ------- ---------- --------
FOB s.o list latch ksfd_allfob 0 844 861
FOB s.o list latch ksfd_fobd 0 487 470
KCL gc element parent la kclnfndnewm 0 1,377,989 279,276
KCL gc element parent la kclplz 0 76,170 279,139
KCL gc element parent la kclulb 0 43,789 305,088
KCL gc element parent la kclzcl 0 31,741 263,343
의미
항목 | 의미 | 관련 컬럼 |
---|
Latch Name | 래치 이름 | LATCH_NAME |
Where | 획득 실패가 발생한 정확한 위치 | WHERE_IN_CODE |
NoWait Misses | 대기 가능 모드로 래치 요청 시 스핀된 비율(%) | NWFAIL_COUNT |
Sleeps | 슬립 횟수 | SLEEP_COUNT |
Waiter Sleeps | 래치 획득 대기자가 슬립한 횟수 | WTR_SLP_COUNT |
설명
- Latch Miss Sources 단위 보고서는 래치 획득을 실패한 정확한 위치를 보여줌
- DBA_HIST_LATCH_MISSES_SUMMARY 사용
- V$LATCH_MISSES 참조
3. Parent Latch Statistics
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Latch Name | 래치 이름 | LATCH_NAME |
Get Requests | 대기 가능 모드로 래치가 요청된 횟수 | GETS |
Misses | 대기 가능 모드로 래치를 요청했을 때 래치를 바로 획득하지 못하고 대기한 횟수 | MISSES |
Sleeps | 대기 가능 모드로 래치를 요청했을 때 슬립한 횟수 | SLEEPS |
Spin & Sleep 1->3+ | SPIN : 대기 가능 모드로 요청했을 때 스핀을 수행했다고 래치를 획득한 횟수 Sleep1->3 + : 10에서는 사용되지 않고 언제나 값은 0 | SPIN_GETS, SLEEP1, SLEEP2 SLEEP3 |
설명
- Parent Latch Statistics 단위 보고서는 FLUSH_LEVEL이 ALL일 경우 보여지며 'Latch Sleep Breakdown' 보고서와 동일한 내용
- DBA_HIST_LATCH_PARENT 사용
- V$LATCH_PARENT 참조
4. Child Latch Statistics
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Child Num | 라식 래치 ID | CHILD# |
설명
- Child Latch Statistics 단위 보고서는 자식 래치의 통계 정보를 보여줌.
FLUSH_LEVEL이 ALL일 경우 보여지며 'Latch Sleep Breakdown' 보고서와 동일한 내용 - DBA_HIST_LATCH_CHILDREN 사용
- V$LATCH_CHILDREN 참조
5. Segments by Logical Reads
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Owner | 오브젝트 소유자 | A.OWNER |
Tablespace Name | 오브젝트가 위치한 테이블스페이스 이름 | A.TABLESPACE_NAME |
Object Name | 오브젝트 이름 | A.OBJECT_NAME |
Subobject Name | 오브젝트의 최하위 파티션 이름 | A.SUBOBJECT_NAME |
Obj Type | 오브젝트 타입 | A.OBJECT_TYPE |
Logicl Reads | 버퍼 캐시 I/O 발생량 | SUM(B.LOGICAL_READS_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% Total | 총 발생 버퍼 캐시 I/O 중 해당 오브젝트에서 발생한 버퍼 캐시 I/O 비율 | 100 * (Logical Reads / SUM(C.VALUE) WHERE STAT_NAME = 'session logical reads') |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
- C : DBA_HIST_SYSSTAT
설명
- Segments by Logical Reads 단위 보고서는 버퍼 캐시 I/O 발생 상위 오브젝트를 보여줌
- 체크포인트
- 세그먼트의 I/O 발생량을 확인할 수 있으며, 경합 발생 관련 단위보고서와 비교하여 분석 가능
6. Segments by Physical Reads
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Physical Reads | 디스크 I/O 발생량 | SUM(B.PHYSICAL_READS_DELTA) GROUP BY DATAOBJ#, OBJ# DBID |
% Total | 총 발생 디스크 I/O 중 해당 오브젝트에서 발생한 디스크 I/O 비율 | 100 * (Physical Reads / SUM(C.VALUE) WHERE STAT_NAME = 'physical reads') |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
- C : DBA_HIST_SYSSTAT
설명
- Segments by Physical Reads 단위 보고서는 디스크 I/O 발생 상위 오브젝트 보여줌
- 체크포인트
- 전체 오브젝트에서 골고루 디스크 I/O가 발생하는 경우 : 'Buffer Pool Advisory' 보고서를 참고하여 튜닝
- 특정 오브젝트에서 디스크 I/O가 집중적으로 발생하는 경우 : 해당 오브젝트를 사용하는 악성 SQL 튜닝
7. Segments by Row Lock Waits
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Row Lock Waits | enq_TX - row lock contention과 enq_TX - index contention 대기 이벤트 관련 행 락 발생 횟수 | SUM(B.ROW_LOCK_WAITS_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% of Capture | enq_TX - row lock contention과 enq_TX - index contention 대기 이벤트 관련 행 락 중 해당 오브젝트에서 발생한 비율 | 100 * (Row Lock Waits / SUM(B.ROW_LOCK_WAIT_DELTA)) |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
설명
- Segments by Row Lock Waits 단위 보고서는 enq_TX - row lock contention, enq_TX - index contention 대기 이벤트를 발생시키는 행 락 발생 상위 오브젝트를 보여줌
- 체크포인트
- 발생 비율 : 발생 비율이 특정 오브젝트에 집중되어 있을 때 오브젝트 경합 발생 의심
- 발생 횟수
8. Segments by ITL Waits
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
ITL Waits | enq_ TX - allocate ITL entry 대기 이벤트 관련 행 락 발생함 | SUM(B.ITL_WAITS_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% of Capture | enq_ TX - allocate ITL entry 대기 이벤트 관련 행 락 중 해당 오브젝트에서 발생한 비율 | 100 * (ITL Waits / SUM(B.ITL_WAITS_DELTA)) |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
설명
- Segments by ITL Waits 단위 보고서는 enq_ TX - allocate ITL entry 대기 이벤트를 발생시키는 행 락 발생 상위 오브젝트를 보여줌
9. Segments by Buffer Busy Waits
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Buffer Busy Waits | buffer busy waits 대기 이벤트 발생량 | SUM(B.BUFFER_BUSY_WAITS_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% of Capture | 수집된 buffer busy waits 대기 이벤트 발생량 중 해당 오브젝트에서 발생한 비율 | 100 * (Buffer Busy Waits / SUM(B.BUFFER_BUSY_WAITS_DELTA)) |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
설명
- Segments by Buffer Busy Waits 단위 보고서는 buffer busy waits 대기 이벤트 발생 관련 오브젝트를 보여줌
10. Segments by Global Cache Buffer Busy
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Gc Buffer Busy | gc buffer busy 대기 이벤트 발생량 | SUM(B.GC_BUFFER_BUSY_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% of Capture | 수집된 gc buffer busy 대기 이벤트 발생량 중 해당 오브젝트에서 발생한 비율 | 100 * (Gc Buffer Busy / SUM(B.GC_BUFFER_BUSY_DELTA)) |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
설명
- Segments by Global Cache Buffer Busy 단위 보고서는 gc buffer busy 대기 이벤트 발생 관련 오브젝트를 보여줌
11. Segments by CR Blocks Received
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
CR BLOCK Received | 글로벌 읽기 일관성 버퍼 배시를 수신한 횟수 | SUM(B.GC_BLOCK_RECEIVED_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% Total | 총 발생한 글로벌 읽기 일관성 버퍼 캐시의 수신 횟수 중에서 해당 오브젝트에 발생한 비율 | 100 * (CR Block Received / SUM(C.VALUE) WHERE STAT_NAME = 'gc cr blocks received') |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
- C : DBA_HIST_SYSSTAT
12. Segments by Current Blocks Received
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
CR BLOCK Received | 글로벌 현재 버퍼 배시를 수신한 횟수 | SUM(B.PHYSICAL_READ_DELTA) GROUP BY DATAOBJ#, OBJ#, DBID |
% Total | 총 발생한 글로벌 현재 버퍼 캐시 수신 횟수 중에서 해당 오브젝트에 발생한 비율 | 100 * (Current Block Received / SUM(C.VALUE) WHERE STAT_NAME = 'gc cr blocks received') |
- A : DBA_HIST_SEG_STAT_OBJ
- B : DBA_HIST_SEG_STAT
- C : DBA_HIST_SYSSTAT
설명
- Segments by Global Cache Buffer Busy 단위 보고서는 gc buffer busy 대기 이벤트 발생 관련 오브젝트를 보여줌
13. Dictionary Cache Stats
Get Pct Scan Pct Mod Final
Cache Requests Miss Reqs Miss Reqs Usage
------------------------- ------------ ------ ------- ----- -------- ----------
dc_awr_control 1,834 9.2 0 N/A 26 1
dc_constraints 150 94.0 0 N/A 150 0
dc_database_links 6,486 0.4 0 N/A 0 0
dc_files 9,633 50.0 0 N/A 0 4,816
dc_free_extents 34,284 36.6 58 0.0 24 197
dc_global_oids 484,045 1.1 0 N/A 2,963 301
dc_histogram_data 14,114,458 1.5 0 N/A 0 3,621
dc_histogram_defs 143,366,320 1.8 0 N/A 28,456 23,214
dc_object_grants 263,207 4.6 0 N/A 0 131
dc_objects 10,555,861 3.5 0 N/A 8,594 3,723
dc_profiles 197,325 0.0 0 N/A 0 1
dc_rollback_segments 23,795,603 0.0 0 N/A 0 20,728
dc_segments 73,394,662 5.6 0 N/A 52,333 53,968
dc_sequences 133,807 7.0 0 N/A 133,806 69
dc_table_scns 219 38.8 0 N/A 0 3
dc_tablespace_quotas 48,912 2.1 0 N/A 38,940 14
dc_tablespaces 286,332,494 0.0 0 N/A 0 45
dc_used_extents 8 100.0 0 N/A 8 1
dc_usernames 9,174,752 0.1 0 N/A 0 119
dc_users 332,387,859 0.0 0 N/A 0 148
kqlsubheap_object 1,182 5.0 0 N/A 0 1
outstanding_alerts 6,454 90.0 0 N/A 0 32
의미
항목 | 의미 | 관련 컬럼 |
---|
Cache | 로우 캐시에 저장된 딕셔너리 데이터 타입 | PARAMETER |
Get Requests | 로우 캐시의 오브젝트 정보에 대한 요청 횟수 | GETS |
Pct Miss | Get 요청에 대해서 캐시에서 정보를 찾지 못하고 실패한 횟수 | 100 * (GETMISSES / GETS) |
Scan Reqs | Scan 요청 횟수 | SCANS |
Pct Miss | Scan 요청에 대해서 캐시에서 정보를 찾지 못하고 실패한 횟수 | 100 * (SCANMISSES / SCANS) |
Mod Reqs | 로우 캐시 데이터에 대한 INSERT, UPDATE, DELETE 발생 횟수 | MODIFICATIONS |
Final Usage | 로우 캐시 영역에 존재하는 로우 캐시 오브젝트 수 | USAGE |
설명
- Dictionary Cache Stats 단위 보고서는 공유 풀의 로우 캐시 영역 사용 통계 정보를 보여줌
- DBA_HIST_ROWCACHE_SUMMARY 사용
- V$ROWCACHE 참조
- 체크포인트
- 모든 SQL은 파스 단계에서 로우 캐시 영역을 반드시 참조하기 때문에 로우 캐시 영역에 대한 액세스 부하는 아주 높은 편임
- 그러나 캐시 적중률이 낮다면 디스크 I/O 부하가 높아져 성능이 안좋아지므로, 가급적 Miss 비율이 2%를 넘지 않도록 해야 함.
SELECT ROUND((SUM(GETS - GETMISSES - FIXED)) / SUM(GETS) * 100, 2) DICT_HIT_RATION
FROM V$ROWCACHE
- AWR을 통한 로우 캐시 적중률 확인 스크립트
SELECT TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') DT,
S.INSTANCE_NUMBER INST,
ROUND(100 * (1 - (SUM(E.GETMISSES) - SUM(B.GETMISSES)) /
(SUM(E.GETS) - SUM(B.GETS))),
2) DICT_HIT_RATIO
FROM DBA_HIST_ROWCACHE_SUMMARY B,
DBA_HIST_ROWCACHE_SUMMARY E,
DBA_HIST_SNAPSHOT S
WHERE S.INSTANCE_NUMBER = B.INSTANCE_NUMBER
AND S.INSTANCE_NUMBER = E.INSTANCE_NUMBER
AND E.SNAP_ID = S.SNAP_ID
AND B.SNAP_ID = S.SNAP_ID - 1
AND TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') BETWEEN '2009-09-21 00:00:00'
AND '2009-09-21 10:00:00'
GROUP BY TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS'),
S.INSTANCE_NUMBER
HAVING SUM(E.GETS) - SUM(B.GETS) > 0
ORDER BY INST,
DT
파라미터명 | 설명 |
---|
dc_tablespaces | 원인 : 새로운 익스텐트를 할당할 때 발생하며, INSERT 바하가 높은 세그먼트의 익스텐트가 너무 작게 설정되어 문제 해결방안 : 세그먼트의 NEST EXTENT 값을 크게 변경해야 하며, 로컬 테이블스페이스 사용 시 큰 UNIFORM 사이즈를 가지는 테이블스페이스로 이동시켜야 함. |
dc_used_extents dc_free_extents | 원인 : 딕셔너리 테이블스페이스의 익스텐트 관리에 대한 경합으로 발생하며, 익스텐트 크기가 작거나 테이블스페이스 단편화가 과도하게 많이 발생하는 것이 원인 해결방안 : 가급적 로컬 테이블스페이스의 사용이 권고하며, 대용량 데이터 발생시키는 테이블은 큰 익스텐트가 설정된 별도의 테이블스페이스로 분리해야 함. |
dc_sequences | 원인 : 시퀀스 사용 시 NEXTVAL 값 획득에 대한 경합으로 발생 해결방안 : CACHE 옵션을 크게 적용해야 함 |
dc_objects | 원인 : 오브젝트 속성 변경에 따른 재컴파일로 유발됨 해결방안 : 불필요한 오브젝트 변경은 피하고 업무외시간에 변경토록 함 |
dc_users | 원인 : DB 유저 정보를 획득하기 위해서 발생함 해결방안 : 오브젝트 소유 유저와 어플리케이션에서 사용하는 DB 유저를 최소화해야 함 |
dc_histogram_defs dc_histogram_data | 원인 : SQL 실행 계획 수립 시 테이블의 히스토그램 정보를 획득하기 위해 발생 해결방안 : 수행빈도가 높은 하드파스 SQL을 바인드 변수로 변경 |
13-1) row cache lock
- 설명
- 딕셔너리 캐시 영역에 저장된 정보를 변경하고자 락을 획득할 때 발생함
- 해결방안은 CACHE 옵션 값을 크게 늘려야 함
14. Dictionary Cache Stats (RAC)
GES GES GES
Cache Requests Conflicts Releases
------------------------- ------------ ------------ ------------
dc_awr_control 219 75 96
dc_constraints 236 0 77
dc_database_links 30 0 29
dc_files 4,817 0 4,817
dc_free_extents 13,032 0 12,530
dc_global_oids 9,901 0 5,899
dc_histogram_defs 2,538,991 0 2,547,276
dc_object_ids 736,258 16 732,915
dc_objects 383,387 743 369,957
dc_profiles 10 0 7
dc_segments 4,241,268 833 4,133,937
dc_sequences 267,152 4,284 5,082
dc_table_scns 85 0 94
dc_tablespace_quotas 97,504 250 808
dc_tablespaces 2,983 0 2,980
dc_used_extents 16 0 7
dc_usernames 8,222 0 8,265
dc_users 7,817 1 7,787
kqlsubheap_object 59 0 60
outstanding_alerts 12,745 3,265 2,512
의미
항목 | 의미 | 관련 컬럼 |
---|
GES Requests | 다른 인스턴스의 로우 캐시 정보 획득을 위해 락을 요청한 횟수 | DML_REQUESTS |
GES Conflicts | 로우 캐시의 글로벌 락 경합에 따른 지연 횟수 | DML_CONFLICTS |
GES Releases | 로우 캐시의 글로벌 락에 대한 해제 횟수 | DML_RELEASE |
- DBA_HIST_ROWCACHE_SUMMARY 사용
- V$ROWCACHE 참조
15. Library Cache Activity
Get Pct Pin Pct Invali-
Namespace Requests Miss Requests Miss Reloads dations
--------------- ------------ ------ -------------- ------ ---------- --------
BODY 1,032,549 0.4 39,285,939 0.0 7,136 0
CLUSTER 13,706 0.8 24,686 1.7 304 0
INDEX 10,442,647 0.1 10,601,460 0.3 13,316 0
JAVA DATA 84 0.0 0 N/A 0 0
JAVA RESOURCE 655 62.3 1,274 43.2 61 0
JAVA SOURCE 589 68.9 1,079 39.4 19 0
PIPE 278,064 0.0 279,588 0.0 0 0
SQL AREA 542,533 51.1 875,051,923 0.3 607,793 282,126
TABLE/PROCEDURE 10,072,119 0.7 103,275,057 0.9 479,749 0
TRIGGER 75,588 1.4 935,313 0.6 3,970 0
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Namespace | 라이브러리 캐시에 저장되어 있는 오브젝트 타입 | NAMESPACE |
Get Requests | SQL 수행 단계에서 오브젝트 핸들에 대한 락을 요청한 횟수 | GETS |
Pct Miss | Get 요청 발생 시 오브젝트 핸들을 찾지 못한 비율 | 100 * (GETHITS / GETS) |
Pin Requests | 오브젝트 핸들의 락을 획득하고 힙 오브젝트의 핀을 요청한 횟수 | PINS |
Pct Miss | Pin 요청 발생 시 힙 오브젝트를 찾지 못한 비율 | 100 * (PINHITS / PINS) |
Reloads | 디스크로부터 오브젝트 정보가 캐시 영역으로 다시 로딩된 횟수 | RELOADS |
Invali-dations | 오브젝트 정보 변경으로 인해 캐시 정보가 무효화된 횟수 | INVALIDATIONS |
설명
- Library Cache Activity 단위 보고서는 라이브러리 캐시의 통계 정보를 보여줌
- DBA_HIST_LIBRARTCACHE 사용
- V$LIBRARYCAHE 참조
16. Library Cache Lock과 Library Cache Pin
설명
- 라이브러리 캐시 내에 오브젝트 핸들과 오브젝트 힙을 액세스하기 위해 필요한 락과 핀을 획득하지 못하고 대기하면 발생하는 이벤트
- 하드파스 SQL을 찾아 바인드 변수를 사용토록 해야 함
17. Library Cache Activity (RAC)
GES Lock GES Pin GES Pin GES Inval GES Invali-
Namespace Requests Requests Releases Requests dations
--------------- ------------ ------------ ------------ ----------- -----------
BODY 223 4,257 3,978 3,953 49
CLUSTER 24,686 109 108 109 0
INDEX 10,601,440 14,153 13,840 14,003 0
JAVA RESOURCE 1,079 408 725 0 0
JAVA SOURCE 1,079 406 723 0 0
TABLE/PROCEDURE 13,306,135 62,925 63,748 50,932 30
TRIGGER 1,082 1,063 1,403 658 3
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
GES Lock Requests | 인스턴스 락에 대한 Get 요청 횟수 | DML_LOCK_REQUESTS |
GES Pin Requests | 인스턴스 락에 대한 Pin 요청 횟수 | DML_PIN_REQUESTS |
GES Pin Releases | 인스턴스 락에 대한 Pin 해제 요청 횟수 | DML_PIN_RELEASES |
GES Inval Requests | 무효화된 인스턴스 락에 대한 Get 요청 횟수 | DML_INVALIDATIONS_REQUESTS |
GES Invalidations | 다른 노드의 인스턴스로부터 무효화 요청을 받은 횟수 | DML_INVALIDATIONS |
- DBA_HIST_LIBRARYCACHE 사용
- V$LIBRARYCACHE 참조
18. Process Memory Summary
Hist
Avg Std Dev Max Max
Alloc Used Alloc Alloc Alloc Alloc Num Num
Category (MB) (MB) (MB) (MB) (MB) (MB) Proc Alloc
- -------- --------- --------- -------- -------- ------- ------- ------ ------
B Other 1,746.4 N/A 3.4 16.4 355 355 520 520
Freeable 173.4 .0 .4 .8 14 N/A 416 416
SQL 130.6 89.8 .3 1.6 30 930 490 458
PL/SQL 33.9 16.2 .1 .2 2 25 520 519
JAVA 27.0 26.9 3.4 1.5 6 7 8 8
E Other 2,495.0 N/A 3.6 14.9 362 362 695 695
SQL 2,324.5 2,185.3 3.5 37.7 572 930 665 634
Freeable 628.9 .0 1.2 14.4 334 N/A 536 536
PL/SQL 97.5 21.5 .1 .5 5 75 695 694
JAVA 42.3 42.1 2.8 2.0 7 8 15 15
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Category | 카테고리 이름 | CATEGORY |
Alloc (MB) | 프로세스에 할당된 메모리 크기(단위:MB) | ALLOCATE_TOTAL / 1024 / 1024 |
Used (MB) | 프로세스가 사용 중인 메모리 크기(단위:MB) | USED_TOTAL / 1024 / 1024 |
Avg Alloc (MB) | 프로세스에 할당된 평균 메모리 크기(단위:MB) | ALLOCATE_AVG / 1024 / 1024 |
Std Dev Alloc (MB) | 프로세스에 할당된 평귬 메모리 크기 표준 편차(단위:MB) | ALLOCATE_STDDEV / 1024 / 1024 |
Max Alloc (MB) | 프로세스에 할당된 최고 PGA 크기(단위:MB) | ALLOCATE_MAX / 1024 / 1024 |
Hist Max Alloc (MB) | 프로세스에 할당될 수 있는 최대 PGA 크기(단위:MB) | MAX_ALLOCATED_MAX / 1024 / 1024 |
Num Proc | 프로세스 수 | NUMPROCESSES |
Num Alloc | 메모리를 실제 할당받은 프로세스 수 | NON_ZERO_ALLOCS |
설명
- Process Memory Summary 단위 보고서는 프로세스 카타고리별로 할당받은 PGA 메모리 크기 확인 가능
- DBA_HIST_PROCESS_MEM_SUMMARY 사용
- V$PROCESS_MEMORY 참조
19. SGA Memory Summary
End Size (Bytes)
SGA regions Begin Size (Bytes) (if different)
------------------------------ ------------------- -------------------
Database Buffers 6,710,886,400
Fixed Size 2,092,776
Redo Buffers 31,461,376
Variable Size 8,287,944,984
-------------------
sum 15,032,385,536
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
SGA regions | SGA 영역 이름 | NAME |
Begin Size (Bytes) | 스냅샷 시작 시점의 크기 | VALUE |
End Size (Bytes)(if different) | 스냅샷 종료 시점의 크기 | VALUE |
20. SGA breakdown difference
Pool Name Begin MB End MB % Diff
------ ------------------------------ -------------- -------------- -------
java free memory 229.9 230.6 0.31
java joxlod exec hp 24.3 23.6 -2.96
large PX msg pool 59.7 59.7 0.00
large free memory 964.3 964.3 0.00
shared ASH buffers 66.5 66.5 0.00
shared CCursor 166.9 71.9 -56.93
shared Checkpoint queue 166.7 166.7 0.00
shared FileOpenBlock 80.4 80.4 0.00
shared Heap0: KGL 132.7 107.1 -19.31
shared KQR L PO 106.3 105.9 -0.42
shared PCursor 113.7 N/A -100.00
shared PL/SQL DIANA 224.4 219.4 -2.24
shared PL/SQL MPCODE 234.9 228.4 -2.79
shared db_block_hash_buckets 448.0 448.0 0.00
shared event statistics per sess 175.8 175.8 0.00
shared free memory 602.7 751.1 24.63
shared gcs resources 140.0 140.0 0.00
shared gcs shadows 88.2 88.2 0.00
shared ges enqueues 199.9 199.9 0.03
shared ges resource 120.0 120.0 0.05
shared library cache 593.5 535.9 -9.70
shared sessions 101.2 101.2 0.00
shared sql area 1,648.2 1,752.2 6.31
stream free memory 608.0 608.0 0.00
buffer_cache 6,400.0 6,400.0 0.00
fixed_sga 2.0 2.0 0.00
log_buffer 30.0 30.0 0.00
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Pool | SGA 풀 영역의 이름 | POOL |
Name | SGA 구성 영역에 대한 이름 | NAME |
Begin MB | 스냅샷 시작 시점의 크기 | BYTES |
End MB | 스냅샷 종료 시점의 크기 | BYTES |
% Diff | 스냅샷 시작 시점 크기에 대한 종료 시점 크기의 증감 비율 | --- |
- DBA_HIST_SGASTAT 사용
- V$SGASTAT 참조
설명
- SGA 각 풀 영역에 대한 free memory 뿐만 아니라 각 세부 영역별로 할당된 크기 확인 가능
21. Streams CPU/IO Usage
- 오라클 스트림즈 관련 프로세스가 사용한 CPU 시간 보여줌
22. Streams Capture/Apply/Queues
- 오라클 스트림즈의 수집/적용/버퍼 큐 백그라운드 프로세스 관련 통계 정보를 보여줌
23. Buffered Subscribers
24. Rule Set
- 스트림즈가 사용되는 룰 셋 사용 통계 정보를 보여줌
25. Resource Limit Stats
-- 1. AWR에서는 데이터 없음(책 참조)
No data exists for this section of the report.
-------------------------------------------------------------
;
의미
항목 | 의미 | 관련 컬럼 |
---|
Resource Name | 오라클 자원 이름 | RESOURCE_NAME |
Current Utilization | 종료 스냅 시 사용하고 있는 자원 개수 | CURRENT_UTILIZATION |
Maximum Utiliztion | 인스턴스 시작 후 최대 사용 자원 개수 | MAX_UTILIZATION |
Initial Allocation | 초기 설정 자원 개수 | INITIAL_UTILIZATION |
Limit | 인스턴스에서 사용할 수 있는 한계 자원 개수 | LIMIT_VALUE |
설명
- Resource Limit Stats 단위 보고서는 현재 사용하고 있는 자원 개수나 최대 사용 리소스 한계 리소스 개수의 80% 이상 사용된 리소스에 한하여 보여줌
- DBA_HIST_RESOURCE_LIMIT 사용
- V$RESOURCE_LIMIT 참조
26. init.ora Parameters
Parameter Name Begin value (if different)
----------------------------- --------------------------------- --------------
O7_DICTIONARY_ACCESSIBILITY FALSE
_PX_use_large_pool TRUE
_b_tree_bitmap_plans FALSE
_bloom_filter_enabled FALSE
_buffer_busy_wait_timeout 2
_cursor_features_enabled 10
_db_block_hash_latches 2097152
................
................
................
의미
항목 | 의미 | 관련 컬럼 |
---|
Parameter Name | 파라미터 이름 | PARAMETER_NAME |
Begin value | 시작 스냅 수행 시 파라미터 값 | VALUE |
(if different) | 종료 스냅 수행 시 파라미터 값 | VALUE |
- DBA_HIST_PARAMETERS 사용
- V$SYSTEM_PARAMETERS 참조
27. Global Enqueue Statistics
Statistic Total per Second per Trans
--------------------------------- ---------------- ------------ ------------
messages queue sent logical -2,824,480,068 -26,582.6 -521.0
messages received actual -2,591,219,175 -24,387.3 -478.0
messages received logical 900,819,910 8,478.1 166.2
messages sent directly 424,778,922 3,997.8 78.4
messages sent indirectly -3,056,363,106 -28,765.0 -563.8
messages sent not implicit batche 450,110,445 4,236.2 83.0
messages sent pbatched -1,832,668,539 -17,248.2 -338.1
msgs causing lmd to send msgs 2,533,729 23.8 0.5
msgs causing lms(s) to send msgs 290,802,570 2,736.9 53.6
msgs received queue time (ms) 12,922,629 121.6 2.4
msgs received queued 898,256,674 8,454.0 165.7
msgs sent queue time (ms) 30,763,735 289.5 5.7
msgs sent queue time on ksxp (ms) 528,751,363 4,976.4 97.5
msgs sent queued 1,380,097,345 12,988.8 254.6
msgs sent queued on ksxp 1,426,334,635 13,424.0 263.1
process batch messages received 436,940,546 4,112.3 80.6
process batch messages sent 436,277,471 4,106.0 80.5
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Statistic | 통계 이름 | NAME |
Total | 통계 값 | VALUE |
per Second | 초당 발생 통계 값 | --- |
per Trans | 트랜잭션당 발생 통계 값 | --- |
- DBA_HIST_DML_MISC 사용
- V$DLM_MISC 참조
28. Global CR Served Stats
Statistic Total
------------------------------ ------------------
CR Block Requests 844,086
CURRENT Block Requests 548,958
Data Block Requests 844,086
Undo Block Requests 19,780
TX Block Requests 522,520
Current Results 1,251,975
Private results 95,993
Zero Results 42,003
Disk Read Results 3,058
Fail Results 13
Fairness Down Converts 144,282
Fairness Clears 0
Free GC Elements 0
Flushes 16,911
Flushes Queued 0
Flush Queue Full 0
Flush Max Time (us) 0
Light Works 35,114
Errors 0
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Statistic | 통계 항목 | --- |
Total | 통계 항목별 발생 건수 | --- |
- DBA_HIST_CR_BLOCK_SERVICE 사용
- V$CR_BLOCK_SERVER 참조
29. Global CURRENT Served Stats
Statistic Total % <1ms % <10ms % <100ms % <1s % <10s
---------- ------------ -------- -------- -------- -------- --------
Pins 53,276,058 99.95 0.00 0.05 0.00 0.00
Flushes 19,893 57.09 41.76 1.07 0.09 0.00
Writes 268,678 34.77 60.10 4.94 0.14 0.05
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Statistic | 통계 항목 | --- |
Total | 통계 항목별 발생건수 | PIN1 + PIN10 + PIN100 + PIN1000 + PIN10000 FLUSH1 + FLUSH10 + FLUSH100 + FLUSH1000 + FLUSH10000 WRITE1 + WRITE10 + WRITE100 + WRITE1000 + WRITE10000 |
% <1ms ~ <10s | 통계 항목별 수행 시간의 시간대별 비율 | 100 * (PIN1 ~ PIN10000 / Total) 100 * (FLUSH1 ~ FLUSH10000 / Total) 100 * (WRITE1 ~ WRITE10000 / Total) |
- DBA_HIST_CURRENT_BLOCK_SERVER 사용
- V$CURRENT_BLOCK_SERVER 참조
30. Global Cache Transfer Stats
-> Immediate (Immed) - Block Transfer NOT impacted by Remote Processing Delays
-> Busy (Busy) - Block Transfer impacted by Remote Contention
-> Congested (Congst) - Block Transfer impacted by Remote System Load
-> ordered by CR + Current Blocks Received desc
CR Current
----------------------------- -----------------------------
Inst Block Blocks % % % Blocks % % %
No Class Received Immed Busy Congst Received Immed Busy Congst
---- ----------- -------- ------ ------ ------ -------- ------ ------ ------
1 data block 789,146 97.6 2.4 .0 ######## 99.7 .1 .1
1 undo header 394,915 95.4 4.6 .0 8,752 99.9 .1 .0
1 Others 6,550 99.3 .7 .0 51,597 99.8 .2 .0
1 undo block 32,317 97.2 2.7 .0 2 100.0 .0 .0
-------------------------------------------------------------
의미
항목 | 의미 | 관련 컬럼 |
---|
Inst No | RAC 인스턴스 번호 | INSTANCE |
Block Class | 블록 클래스 | CLASS |
Blocks Received | AWR DB 보고서가 생성된 인스턴스에 서 다른 RAC 인스턴스로 전송된 읽기읽관성 블록/현재블록 전송량 | CR_BLOCK + CR_BUSY + CR_CONGEST + CURRENT_BLOCK + CURRENT_BUSY + CURRENT_CONGETS |
% Immed | 전체 정송량 중 DB 경합 및 시스템 부하에 영향을 받지 않고 정상적으로 전송된 캐시 퓨전 블록 비율 | 100 * (CR_BLOCK / Block Received) 100 * (CURRENT_BLOCK / Block Received) |
% Busy | 전체 전송량 중 DB 경합으로 영향받은 캐시 퓨전 블록 비율 | 100 * (CR_BUSY / Block Received) 100 * (CURRENT_BUSY / Block Received) |
% Congst | 전체 전송량 중 시스템 부하로 인해 영향 바든 캐시 퓨전 블록 비율 | 100 * (CR_CONGEST / Block Received) 100 * (CURRENT_CONGEST / Block Received) |
- DBA_HIST_INST_CACHE_TRANSFER 사용
- V$INSTANCE_CACHE_TRANSFER 참조
문서에 대하여