SlideShare a Scribd company logo
Practical OWI [Oracle Wait Interface]
Latch & Lock1
목 차
Latch & Lock
1. Latch 개요
2. latch free
3. Lock 개요
4. enqueue
Practical OWI [Oracle Wait Interface]
Latch & Lock2
Latch 개요
Latch
 가벼운 Lock(Light-weight Lock)
 공유 Memory 영역 (SGA) 을 보호하기 위한 동기화 객체
Area1 Area2
Area3
Process
A
SGA
Process
B
Area4
1. Latch 획득 중 2. SGA 사용
3. Latch 획득 대기
Latch
1/32/33/3
Practical OWI [Oracle Wait Interface]
Latch & Lock3
Latch 개요
Latch 가 보호하는 Resource
 Latch 는 SGA 의 모든 하위 Memory 영역을 보호
 Cache Buffer
 Shared Pool
 Library Cache
 Redo Buffer
 …
 Memory 영역의 속성에 따라 하나 혹은 여러 개의 Latch 사용
 여러 개의 Latch 를 사용하는 경우 Parent/Child 의 관계
 Cache Buffer : 수천 개 ~ 수 만개의 Latch
 Shared Pool : 하나의 Latch
 Library Cache : CPU 개수에 비례
 Redo Buffer : 하나 ~ 여러 개의 Latch
 …
Practical OWI [Oracle Wait Interface]
Latch & Lock4
Latch 개요
Latch 획득 Mechanism
 Spin vs Posting
 Spin
 Latch 획득 실패 시 Spin 을 수행하며 재시도
 Spin 에 의한 재시도에서 실패 시에는 Sleep & Wake
 cache buffers chains latch 등 대부분의 Latch 에서 사용
 Posting
 Latch 획득 실패 시 Wait List 에서 대기
 Latch Holder 가 Post( 알려줌 ) 해주면 Latch 획득 다시 시도
 library cache latch, shared pool latch 등에서 사용
Practical OWI [Oracle Wait Interface]
Latch & Lock5
Latch 개요
Spin 에 의한 Latch 획득
Area1 SGA
Latch
Process
A
Process
B
1. Latch Get 2. Latch Miss
Process
B
3. Spin(_SPIN_COUNT)
4. Sleep
5. Wake
CPU Burn!!
1/52/53/54/55/5
Practical OWI [Oracle Wait Interface]
Latch & Lock6
Process
B
Latch 개요
Posting 에 의한 Latch 획득
Area1 SGA
Latch
Process
A
Process
B
1. Latch Get 2. Latch Miss
Process
Z
Process
Y
Process
XWait List
3. Wait List
4. Done & Post
5. Latch Get
1/62/63/64/65/66/6
Practical OWI [Oracle Wait Interface]
Latch & Lock7
latch free
Event 정의
 Latch 를 획득하는데 실패한 후 Latch 를 획득할 때까지 기다리
는 이벤트
 Spin 을 수행하는 경우에는 “대기” 상태이지만 CPU 를 사용
 Active Wait/Busy Wait
 예 ) latch: cache buffers chains Event 발생 시 높은 CPU 사용률
 Oracle 10g 부터는 Event 명 세분화
 latch: cache buffers chains
 latch: shared pool
 latch: library cache
 …
 latch free
Practical OWI [Oracle Wait Interface]
Latch & Lock8
latch free
Dynamic Performance Views
 V$LATCH : Latch 획득 통계 . Latch 종류 당 하나
 V$LATCH_PARENT : 부모 Latch 통계 ( 자식이 없는 부모만 )
 V$LATCH_CHILDREN : 자식 Latch 통계
 V$LATCHHOLDER : Latch Holder 정보
 V$LATCH_MISSES : Latch 획득 실패 정보
Practical OWI [Oracle Wait Interface]
Latch & Lock9
Lock 개요
Lock
 Latch 보다 무거운 동기화 객체
 Database 와 관련된 객체 (Object) 를 보호하는 동기화 객체
Process
A
Database
Process
B
1. Lock 획득 중
3. Lock 획득 대기
Lock
Table A
2. Object 사용 중
1/32/33/3
Practical OWI [Oracle Wait Interface]
Latch & Lock10
Lock 개요
Lock 이 보호하는 Resource
 Latch 가 보호하는 Resource 외의 모든 Database Object
 Tablespace
 Table
 Row
 Transaction
 LCO(Library Cache Object)
 RCO(Row Cache Object)
 …
Practical OWI [Oracle Wait Interface]
Latch & Lock11
Lock 개요
Lock 분류
 Enqueue Lock
 User Type: TX, TM, UL
 System Type: US, HW, SQ, SV, TT, WF, …
 V$LOCK_TYPE 뷰 참조 (10g)
 기타 Lock
 library cache lock, library cache pin
 row cache lock
 buffer lock
Practical OWI [Oracle Wait Interface]
Latch & Lock12
Lock 개요
Lock 획득 Mode
 6 단계의 Mode 정의
 Null (1, N)
 Sub-Shared (2, SS, RS)
 Sub-Exclusive (3, SX, RX)
 Shared (4, S)
 Shared-Sub-Exclusive (5, SSX, SRX)
 Exclusive (6, X)
 예 :
 UPDATE XXX SET …
– XXX Table 에 대해 TM Lock 을 SX Mode 로 획득
– Transaction 에 대해 TX Lock 을 X Mode 로 획득
 ALTER TABLE XXX …
– XXX Table 에 대해 TM Lock 을 X Mode 로 획득
Practical OWI [Oracle Wait Interface]
Latch & Lock13
Lock 개요
Lock Mode 호환성
 Lock Mode + 호환성  복잡한 동기화 가능
N RS SX S SRX X
N O O O O O O
RS O O O O O X
SX O O O X X X
S O O X O X X
SRX O O X X X X
X O X X X X X
Practical OWI [Oracle Wait Interface]
Latch & Lock14
Process W
(X)
Process A
(S)
Lock 개요
Lock 획득 Mechanism
Database
Process 1
(S)
Process 2
(S)
Process 3
(S)
Process Z
(X)
Process Y
(X)
Process X
(X)
User(Owner) List
Waiter List
Lock
Process A
(S)
1. Lock Get
획득 가능
Mode
2. Lock Acquire
Process W
(X)
3. Lock Get
획득 불가
Mode
5. Done & Post
4. Lock Wait
6. Wake & Dead
lock check1/102/103/104/105/106/107/108/109/1010/10
Practical OWI [Oracle Wait Interface]
Latch & Lock15
Enqueue
Event 정의
 Enqueue Lock 을 획득하는데 실패한 후 Enqueue Lock 을 획득
할 때까지 대기하는 Event
 Oracle 10g 부터는 Event 명 세분화
 enq: TX – row lock contention
 enq: TX – allocate ITL entry
 enq: TM – contention
 enq: SQ – contention
 enq: HW – contention
 …
Practical OWI [Oracle Wait Interface]
Latch & Lock16
Lock 관련 Event
기타 Lock 관련 Event
 library cache lock
 library cache pin
 row cache lock
 buffer busy waits
Practical OWI [Oracle Wait Interface]
Latch & Lock17
Lock 관련 Event
Dynamic Performance Views
 V$LOCK : Enqueue Lock 에 대한 모든 정보
 DBA_KGLLOCK : Library cache lock + Library cache pin
 X$KGLLK : Library cache lock
 X$KGLPN : Library cache pin
 X$KGLOB : LCO
 V$ROWCACHE_PARENT : Row cache lock

More Related Content

PDF
MySQL: Indexing for Better Performance
PDF
MySQL Group Replication: Handling Network Glitches - Best Practices
PDF
MySQL InnoDB Cluster and Group Replication in a Nutshell: hands-on tutorial
PDF
MySQL InnoDB Cluster - Advanced Configuration & Operations
PDF
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
PPTX
MySQL Indexing - Best practices for MySQL 5.6
PDF
MySQL 8.0 Optimizer Guide
PDF
MySQL Tuning
MySQL: Indexing for Better Performance
MySQL Group Replication: Handling Network Glitches - Best Practices
MySQL InnoDB Cluster and Group Replication in a Nutshell: hands-on tutorial
MySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Indexing - Best practices for MySQL 5.6
MySQL 8.0 Optimizer Guide
MySQL Tuning

What's hot (20)

PPTX
AWR and ASH Deep Dive
PPTX
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
PDF
ProxySQL - High Performance and HA Proxy for MySQL
PDF
Best Practices for the Most Impactful Oracle Database 18c and 19c Features
PDF
Percona Live 2022 - MySQL Architectures
PDF
Oracle Database Availability & Scalability Across Versions & Editions
PDF
MySQL Multi-Source Replication for PL2016
PDF
Oracle RAC 19c - the Basis for the Autonomous Database
PDF
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
PDF
PostgreSQL Deep Internal
PDF
MariaDB 제품 소개
PPTX
WebLogic Server Work Managers and Overload Protection
PDF
Advanced MySQL Query Tuning
PDF
IP Routing on z/OS
PDF
Using Kamailio for Scalability and Security
DOCX
preguntas java 17.docx
PDF
MySQL Performance Schema in 20 Minutes
PDF
MySQL Shell - The Best MySQL DBA Tool
PDF
MySQL Performance Schema in Action: the Complete Tutorial
PDF
MySQL Enterprise Backup (MEB)
AWR and ASH Deep Dive
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
ProxySQL - High Performance and HA Proxy for MySQL
Best Practices for the Most Impactful Oracle Database 18c and 19c Features
Percona Live 2022 - MySQL Architectures
Oracle Database Availability & Scalability Across Versions & Editions
MySQL Multi-Source Replication for PL2016
Oracle RAC 19c - the Basis for the Autonomous Database
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
PostgreSQL Deep Internal
MariaDB 제품 소개
WebLogic Server Work Managers and Overload Protection
Advanced MySQL Query Tuning
IP Routing on z/OS
Using Kamailio for Scalability and Security
preguntas java 17.docx
MySQL Performance Schema in 20 Minutes
MySQL Shell - The Best MySQL DBA Tool
MySQL Performance Schema in Action: the Complete Tutorial
MySQL Enterprise Backup (MEB)
Ad

Viewers also liked (19)

PDF
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
PDF
[ODI] chapter2 what is "undo record chaining"?
PDF
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
PDF
[ODI] chapter3 What is Max CR DBA(Max length)?
PDF
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
PDF
Oracle Deep Internal 4 (ver.2)
PDF
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
PDF
Oracle Deep Internal 3 (ver.2)
PDF
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
PDF
Oracle Deep Internal 1 (ver.2)
PDF
Follow the evidence: Troubleshooting Performance Issues
PDF
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
PDF
Oracle Deep Internal 2 (ver.2)
PDF
Oracle Deep Internal 3 (ver.2)
PDF
Performance schema 설정
PDF
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
PDF
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
PDF
Oracle database performance tuning
PDF
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
[ODI] chapter2 what is "undo record chaining"?
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
[ODI] chapter3 What is Max CR DBA(Max length)?
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
Oracle Deep Internal 4 (ver.2)
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
Oracle Deep Internal 3 (ver.2)
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
Oracle Deep Internal 1 (ver.2)
Follow the evidence: Troubleshooting Performance Issues
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
Oracle Deep Internal 2 (ver.2)
Oracle Deep Internal 3 (ver.2)
Performance schema 설정
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
Oracle database performance tuning
제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀
Ad

Similar to [Practical owi] lock & latch (19)

PDF
[2015-06-05] Oracle TX Lock
PDF
[2015 05-29] Oracle Lock
PDF
2019 lightning talk_5
PDF
NLJ BATCH와 부분범위 처리_Wh oracle
PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PDF
그림으로 공부하는 오라클 구조
PPTX
CUBRID(큐브리드) 트랜잭션 처리 원리
PDF
Commit Wait Class 대기시간 감소 방안_Wh oracle
PPTX
동기화, 스케줄링
PPT
Spin locks 추가 자료
PPTX
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
PDF
Iocp advanced
PDF
MySQL 상태 메시지 분석 및 활용
PPTX
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
PDF
Maxgauge case study_cbc
PDF
Multitasking on DB and Django
DOC
Oracle History #7
PPTX
Concurrent programming
[2015-06-05] Oracle TX Lock
[2015 05-29] Oracle Lock
2019 lightning talk_5
NLJ BATCH와 부분범위 처리_Wh oracle
서버 아키텍처 이해를 위한 프로세스와 쓰레드
그림으로 공부하는 오라클 구조
CUBRID(큐브리드) 트랜잭션 처리 원리
Commit Wait Class 대기시간 감소 방안_Wh oracle
동기화, 스케줄링
Spin locks 추가 자료
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
Iocp advanced
MySQL 상태 메시지 분석 및 활용
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
Maxgauge case study_cbc
Multitasking on DB and Django
Oracle History #7
Concurrent programming

[Practical owi] lock & latch

  • 1. Practical OWI [Oracle Wait Interface] Latch & Lock1 목 차 Latch & Lock 1. Latch 개요 2. latch free 3. Lock 개요 4. enqueue
  • 2. Practical OWI [Oracle Wait Interface] Latch & Lock2 Latch 개요 Latch  가벼운 Lock(Light-weight Lock)  공유 Memory 영역 (SGA) 을 보호하기 위한 동기화 객체 Area1 Area2 Area3 Process A SGA Process B Area4 1. Latch 획득 중 2. SGA 사용 3. Latch 획득 대기 Latch 1/32/33/3
  • 3. Practical OWI [Oracle Wait Interface] Latch & Lock3 Latch 개요 Latch 가 보호하는 Resource  Latch 는 SGA 의 모든 하위 Memory 영역을 보호  Cache Buffer  Shared Pool  Library Cache  Redo Buffer  …  Memory 영역의 속성에 따라 하나 혹은 여러 개의 Latch 사용  여러 개의 Latch 를 사용하는 경우 Parent/Child 의 관계  Cache Buffer : 수천 개 ~ 수 만개의 Latch  Shared Pool : 하나의 Latch  Library Cache : CPU 개수에 비례  Redo Buffer : 하나 ~ 여러 개의 Latch  …
  • 4. Practical OWI [Oracle Wait Interface] Latch & Lock4 Latch 개요 Latch 획득 Mechanism  Spin vs Posting  Spin  Latch 획득 실패 시 Spin 을 수행하며 재시도  Spin 에 의한 재시도에서 실패 시에는 Sleep & Wake  cache buffers chains latch 등 대부분의 Latch 에서 사용  Posting  Latch 획득 실패 시 Wait List 에서 대기  Latch Holder 가 Post( 알려줌 ) 해주면 Latch 획득 다시 시도  library cache latch, shared pool latch 등에서 사용
  • 5. Practical OWI [Oracle Wait Interface] Latch & Lock5 Latch 개요 Spin 에 의한 Latch 획득 Area1 SGA Latch Process A Process B 1. Latch Get 2. Latch Miss Process B 3. Spin(_SPIN_COUNT) 4. Sleep 5. Wake CPU Burn!! 1/52/53/54/55/5
  • 6. Practical OWI [Oracle Wait Interface] Latch & Lock6 Process B Latch 개요 Posting 에 의한 Latch 획득 Area1 SGA Latch Process A Process B 1. Latch Get 2. Latch Miss Process Z Process Y Process XWait List 3. Wait List 4. Done & Post 5. Latch Get 1/62/63/64/65/66/6
  • 7. Practical OWI [Oracle Wait Interface] Latch & Lock7 latch free Event 정의  Latch 를 획득하는데 실패한 후 Latch 를 획득할 때까지 기다리 는 이벤트  Spin 을 수행하는 경우에는 “대기” 상태이지만 CPU 를 사용  Active Wait/Busy Wait  예 ) latch: cache buffers chains Event 발생 시 높은 CPU 사용률  Oracle 10g 부터는 Event 명 세분화  latch: cache buffers chains  latch: shared pool  latch: library cache  …  latch free
  • 8. Practical OWI [Oracle Wait Interface] Latch & Lock8 latch free Dynamic Performance Views  V$LATCH : Latch 획득 통계 . Latch 종류 당 하나  V$LATCH_PARENT : 부모 Latch 통계 ( 자식이 없는 부모만 )  V$LATCH_CHILDREN : 자식 Latch 통계  V$LATCHHOLDER : Latch Holder 정보  V$LATCH_MISSES : Latch 획득 실패 정보
  • 9. Practical OWI [Oracle Wait Interface] Latch & Lock9 Lock 개요 Lock  Latch 보다 무거운 동기화 객체  Database 와 관련된 객체 (Object) 를 보호하는 동기화 객체 Process A Database Process B 1. Lock 획득 중 3. Lock 획득 대기 Lock Table A 2. Object 사용 중 1/32/33/3
  • 10. Practical OWI [Oracle Wait Interface] Latch & Lock10 Lock 개요 Lock 이 보호하는 Resource  Latch 가 보호하는 Resource 외의 모든 Database Object  Tablespace  Table  Row  Transaction  LCO(Library Cache Object)  RCO(Row Cache Object)  …
  • 11. Practical OWI [Oracle Wait Interface] Latch & Lock11 Lock 개요 Lock 분류  Enqueue Lock  User Type: TX, TM, UL  System Type: US, HW, SQ, SV, TT, WF, …  V$LOCK_TYPE 뷰 참조 (10g)  기타 Lock  library cache lock, library cache pin  row cache lock  buffer lock
  • 12. Practical OWI [Oracle Wait Interface] Latch & Lock12 Lock 개요 Lock 획득 Mode  6 단계의 Mode 정의  Null (1, N)  Sub-Shared (2, SS, RS)  Sub-Exclusive (3, SX, RX)  Shared (4, S)  Shared-Sub-Exclusive (5, SSX, SRX)  Exclusive (6, X)  예 :  UPDATE XXX SET … – XXX Table 에 대해 TM Lock 을 SX Mode 로 획득 – Transaction 에 대해 TX Lock 을 X Mode 로 획득  ALTER TABLE XXX … – XXX Table 에 대해 TM Lock 을 X Mode 로 획득
  • 13. Practical OWI [Oracle Wait Interface] Latch & Lock13 Lock 개요 Lock Mode 호환성  Lock Mode + 호환성  복잡한 동기화 가능 N RS SX S SRX X N O O O O O O RS O O O O O X SX O O O X X X S O O X O X X SRX O O X X X X X O X X X X X
  • 14. Practical OWI [Oracle Wait Interface] Latch & Lock14 Process W (X) Process A (S) Lock 개요 Lock 획득 Mechanism Database Process 1 (S) Process 2 (S) Process 3 (S) Process Z (X) Process Y (X) Process X (X) User(Owner) List Waiter List Lock Process A (S) 1. Lock Get 획득 가능 Mode 2. Lock Acquire Process W (X) 3. Lock Get 획득 불가 Mode 5. Done & Post 4. Lock Wait 6. Wake & Dead lock check1/102/103/104/105/106/107/108/109/1010/10
  • 15. Practical OWI [Oracle Wait Interface] Latch & Lock15 Enqueue Event 정의  Enqueue Lock 을 획득하는데 실패한 후 Enqueue Lock 을 획득 할 때까지 대기하는 Event  Oracle 10g 부터는 Event 명 세분화  enq: TX – row lock contention  enq: TX – allocate ITL entry  enq: TM – contention  enq: SQ – contention  enq: HW – contention  …
  • 16. Practical OWI [Oracle Wait Interface] Latch & Lock16 Lock 관련 Event 기타 Lock 관련 Event  library cache lock  library cache pin  row cache lock  buffer busy waits
  • 17. Practical OWI [Oracle Wait Interface] Latch & Lock17 Lock 관련 Event Dynamic Performance Views  V$LOCK : Enqueue Lock 에 대한 모든 정보  DBA_KGLLOCK : Library cache lock + Library cache pin  X$KGLLK : Library cache lock  X$KGLPN : Library cache pin  X$KGLOB : LCO  V$ROWCACHE_PARENT : Row cache lock

Editor's Notes

  • #3: Latch 래치(latch)란? SGA 내부에 정보가 존재하며, 로컬 인스턴스에서만 볼 수 있다. 래치(latch)는 인스턴스 레벨로 작동 단순한 CPU 명령어를 사용하여 구현되었다. (구현이 쉽고 가벼움) Willing-to-wait과 no-wait 두 가지 모드로 요청이 가능하다. 아주 짧은 시간만 지속된다. (microsecond 단위) 래치는 데드락이 발생되지 않도록 구현되었다.(래치의 데드락 발생시 ora-600 에러 발생) 래치는 기본적으로 exclusive 모드로 동작한다. (9i 이후 버전은 cache buffers chains 래치는 경합을 줄이기 위해 shared 모드를 지원함) 슬라이드 내용 – [래치(latch)의 획득 과정] Process A가 래치 획득 시도 해당 래치를 점유한 Process가 존재하지 않으므로 래치 획득 래치가 보호하고 있는 SGA 리소스 Area1, Area2를 사용 Process B가 래치 획득 시도 Process A가 래치를 점유하고 있으므로 래치 획득 실패
  • #4: Latch가 보호하는 Resource 래치(latch)가 보호하는 리소스는 SGA 내의 모든 메모리 영역이다.예) 버퍼 캐시, shared pool, 라이브러리 캐시, 로그 버퍼, …. SGA 영역을 탐색하는 모든 행위는 래치 획득 후에만 가능하다. 래치는 SGA 메모리 영역을 보호하는 메모리 구조체이므로, 새로운 SGA 메모리 영역이 추가되면, 이를 보호하는 래치도 추가 된다. 메모리 영역의 속성에 따라 하나의 래치 혹은 여러 개의 래치로 보호된다. 독립 래치와 부모 래치의 정보는 V$LATCH_PARENT에서 확인할 수 있다. 자식 래치의 정보는 V$LATCH_CHILDREN 에서 확인할 수 있다. [참고] Cache buffers chains 래치버퍼 캐시 의 크기가 16M 이상 1G 이하까지의 cache buffers chains 래치의 개수는 1024개 이다.버퍼 캐시의 크기가 증가함에 따라 단계적으로 증가 한다.cache buffers chains 래치의 개수는 _DB_BLOCK_HASH_LATCHES 파라미터 값을 이용하여 조절이 가능하다. Shared pool 래치Shared pool 래치는 하나의 shared pool에 하나만 존재한다. 오라클 9i이상부터는 CPU_COUNT 파라미터 값이 4 이상이고 shared pool의 크기가 250M 이상인 경우 _ KGHDSIDX_COUNT 파라미터 값만큼 서브 풀(sub pool)을 생성하여 shared pool을 관리할 수 있다. 그러므로 오라클 9i 이전 버전에서는 하나의 shared pool 래치를 오라클 9i 이상부터는 다수의 shared pool 래치를 사용할 수 있다. 라이브러리 캐시 래치(library cache latch)CPU_COUNT 파라미터 값보다 큰 소수 중 가장 작은 수만큼 라이브러리 캐시 래치를 사용한다.가령 CPU 개수가 4인 시스템에서는 5개의 라이브러리 캐시 래치를 사용한다.
  • #5: Latch 획득 Mechanism Willing-to-wait 모드의 Latch 획득 Mechanism Spin에 의한 획득 방식 Short wait 래치(latch) Exponential backoff sleep algorithm(기하급수적 증가) 사용 1, 1, 2, 2, 4, 4, 8, 8, 16, 16, 32, 32, …. (1/100초 단위) 슬립(sleep)할 수 있는 최대 시간은 _MAX_EXPONENTIAL_SLEEP 파라미터의 수치까지 증가 (default 2초) 하나 이상의 래치를 소유하고 있는 프로세스가 슬립 하게 되면 _MAX_SLEEP_HOLDING_LATCH 파라미터에 정의된 수치만큼만 슬립 가능(default 0.04초) 순서 보장 안됨 CPU가 하나일 경우에는 스핀(spin)을 수행하지 않음 Spin 방식을 사용하는 래치(대부분의 래치) cache buffers chains 래치 cache buffers lru chain 래치 row cache objects 래치 …. Posting에 의한 획득 방식 Long wait 래치 대기목록(wait list)에 등록해 두고 래치 홀더(holder)가 깨워줄 때까지 대기 순서 보장 안됨 Posting 방식을 사용하는 래치 shared pool 래치 라이브러리 캐시 래치(library cache latch)
  • #6: Spin에 의한 latch 획득 슬라이드 내용 – [spin에 의한 래치(latch) 획득 과정] Process A 래치 획득 시도 해당 래치를 점유한 Process가 존재하지 않으므로 래치 획득 Process B 래치 획득 시도 Process A가 래치를 점유하고 있으므로 래치 획득 실패 Process B는 _SPIN_COUNT의 수 만큼 스핀을 수행(스핀을 수행한 후 다시 래치 획득 시도) spin으로 인한 CPU 사용률 증가 만일 여러 번의 스핀을 반복한 후에도 래치를 획득하지 못할 경우, Process B는 슬립(sleep) 상태로 전환 Process B는 일정시간이 지나면 깨어나서 다시 래치 획득 시도
  • #7: Posting에 의한 Latch 획득 슬라이드 내용 – [posting에 의한 래치(latch) 획득 과정] Process A 래치 획득 시도 해당 래치를 점유한 프로세스가 존재하지 않으므로 래치 획득 Process B 래치 획득 시도 Process A가 래치를 점유하고 있으므로 래치 획득 실패 Process B를 대기목록(wait list)에 등록 Process A가 자원을 해제할때 대기목록으로 알려 줌 대기목록에서 대기하던 프로세스 중 하나가 래치를 획득(순서보장을 하지 않기 때문에 대기목록에 존재하지 않는 프로세스가 래치를 획득할 수도 있음)
  • #8: Event 정의 latch free 대기이벤트란? 프로세스가 willing-to-wait 모드로 _SPIN_COUNT 만큼 스핀을 수행하고도 래치(latch) 획득에 실패하여 슬립(sleep)한다는 것을 의미 래치는 속성상 획득 횟수와 대기 횟수가 매우 높음 대기시간(TIME_WAITED)이 가장 변별력 있는 경합 여부 판단 기준 오라클 10g 중요한 래치들에 대해서는 별도의 대기 이벤트 명 부여 그 외는 latch free 대기 이벤트
  • #9: Dynamic Performance Views V$LATCH : 래치(latch)의 종류별 통계 값 GETS : willing-to-wait 모드에서 슬립 하기 전에 래치 요청 횟수 MISSES : willing-to-wait 모드에서 슬립 하기 전에 래치 획득 실패 횟수 SPIN_GETS : willing-to-wait 모드에서 슬립 하기 전의 스핀단계에서의 래치 획득 성공 횟수 SLEEPS : willing-to-wait 모두에서의 슬립 횟수 IMMEDIATE_GETS : no-wait 모드에서 래치 획득 성공 횟수 IMMEDIATE_MISSES : no-wait 모드에서 래치 획득 실패 횟수 SLEEP1 ~ SLEEP4 : 1~3 회의 슬립횟수와 4회 이상의 슬립 횟수. 오라클 10gR2부터는 V$EVENT_HISTOGRAM 뷰로 대체 WAITERS_WOKEN : posting 에 의한 래치 획득 방식을 사용할 경우 세션이 깨어난 횟수. 오라클 10gR2부터는 사용되지 않음. WAIT_TIME : 래치를 획득하기 위해 대기한 시간(microsecond 단위) V$LATCH_PARENT : 독립 래치와 부모 래치의 통계 V$LATCH_CHILDREN : 자식 래치 별 통계 값 V$LATCH_HOLDER : 래치 홀더(holder)에 대한 정보 V$LATCH_MISSES 래치 획득 실패가 발생한 오라클 커널 코드의 위치에 대한 정보를 제공
  • #10: Lock 개요 락(lock) 이란? 데이터베이스 내부에 정보가 존재하며, 모든 인스턴스에서 볼 수 있다. 락(lock)은 데이터베이스 레벨에서 작동 문맥 교환을 포함한 일련의 명령어들을 사용하여 구현되었다.(구현이 복잡하고 무거움) 6가지 모드로 요청이 가능하다.(null, row share, row exclusive, share, share row exclusive, exclusive) 모드간의 호환성 관계 존재 매우 복잡한 작업에 대한 동기화 작업도 가능 트랜잭션 동안 지속된다. 프로세스가 락 획득을 실패한 후, 해당 요청은 큐(queue)로 관리되며, 요청한 순서대로 서비스 된다.(nowait 모드는 예외임) 락은 큐(queue)방식을 사용하며, 데드락이 발생될 가능성이 높다. 데드락이 발생 될 때마다 트레이스 파일이 생성된다. 슬라이드 내용 – [락(lock)의 획득 과정] Process A가 락획득 시도 해당 락을 점유한 프로세스가 존재하지 않으므로 락 획득 해당 오브젝트 사용 Process B가 락 획득 시도 Process A가 락을 점유하고 있으므로 락 획득 대기
  • #11: Lock이 보호하는 Resource Latch가 보호하는 Resource 외의 모든 Database Object Enqueue 락(lock) 테이블스페이스 테이블 트랜잭션 … Library cache lock 라이브러리 캐시 오브젝트(library cache object : LCO)의 스팩(specification) Library cache pin 라이브러리 캐시 오브젝트의 실행정보(contents) Row cache lock 로우 캐시 오브젝트(row cache object : RCO)
  • #12: Lock 분류 Enqueue 락(lock) Shared pool 내에 enqueue 구조를 사용해서 통합 관리되는 락 오라클 10g부터는 대부분의 enqueue 락에 대해 개별 대기이벤트가 등록되므로 V$EVENT_NAME 뷰를 조회하면 어떤 종류의 enqueue 락이 존재하는지 알 수 있다. Enqueue 락 종류 User Type : TX, TM, UL System Type : US, HW, SQ, SV, TT, WF, … 기타 락(lock) Enqueue 구조를 사용하지 않는 락 자체 메모리 영역에 보유프로세스목록(owner list)과 대기프로세스목록(waiter list)으로 관리 된다. 기타 락 종류 library cache lock library cache pin row cache lock buffer lock
  • #13: Lock 획득 Mode 6가지의 모드 지원 이들 모드를 이용해 복잡한 작업도 보호 가능 Null (N)리소스(resource)에 대한 변경이 있을 경우 락(lock) 홀더(holder)에게 변경 사실 전달 Sub-Shared (RS / SS)리소스의 일부분에 대한 shared 락이 필요한 경우 Sub-Exclusive (RX / SX)리소스의 일부분에 대한 exclusive 락이 필요한 경우 Shared (S)리소스에 대한 변경을 막을 경우 Shared-Sub-Exclusive (SRX / SSX)리소스의 일부분에 대해서는 exclusive 락이, 리소스 전체에 대해서는 shared 락이 필요한 경우 Exclusive (X)리소스에 대한 변경이 필요한 경우
  • #14: Lock Mode 호환성 락 모드 호환성 : SQL 문과 TM 락 Statement Mode RS RX S SRX X SELECT N Y Y Y Y Y INSERT RX Y Y N N N UPDATE RX Y* Y* N N N DELETE RX Y* Y* N N N SELECT.. FOR UPDATE RS Y* Y* Y* Y* N
  • #15: Lock 획득 Mechanism 슬라이드 내용 – [락(lock) 획득 Mechanism] Process A가 shared 모드로 락(lock) 획득 시도 해당 락을 점유한 프로세스가 존재하지 않으므로 Process A가 shared 모드로 락 획득 Process A를 보유프로세스목록(owner list)에 등록 Process W가 exclusive 모드로 락 획득 시도 Process A가 shared 모드로 락을 획득하고 있으므로 락 획득 실패 Process W는 대기프로세스목록(waiter list)에 등록 보유프로세스목록에 등록되어 있는 프로세스가 작업을 완료하면 대기프로세스목록에 존재하는 다른 프로세스를 깨움 대기프로세스목록에 등록된 프로세스는 타임아웃 시간이 경과 후에도 깨워주지 않으면 스스로 깨어나서 데드락이 발생했는지 여부를 확인한 후 다시 대기상태로 빠짐 타임아웃 데드락을 피하기 위해 대기목록의 프로세스는 3초마다 스스로 깨어남 데드락 체크 후 다시 대기목록으로 돌아감 데드락이 확인되면, 락 요청은 취소되고 현재 SQL문이 롤백 타임아웃시간 Enqueue 락(lock): 3초 Buffer lock : 일반적인 경우에는1초, 연속적으로 buffer lock을 획득하기 위해 대기하는 시간은 3초 Row cache lock : 60초 Library cache lock / library cache pin : 일반 프로세스는 3초, PMON 프로세스는 1초
  • #16: Event 정의 Enqueue 대기이벤트란? 프로세스가 enqueue 락(lock)을 획득하는데 실패해서 대기프로세스목록(waiter list)에서 기다린다(sleep)는 의미 락(lock)을 보유중인 프로세스는 락을 해제하면 다음 프로세스를 깨워줌 오라클 10g 대부분의 enqueue 락에 대해 개별 대기이벤트 명 부여 경합 발생 상황에 따라 세분화된 대기이벤트 명 부여
  • #17: 기타 Lock 관련 Event library cache lock 라이브러리 캐시 오브젝트(library cache object : LCO)를 접근하거나 변경하는 경우, 핸들(handle)에 대해 획득 하는 락 라이브러리 캐시 오브젝트의 스팩(specification)을 보호 타임아웃 - 일반 프로세스 3초, PMON 프로세스 1초 library cache pin 라이브러리 캐시 오브젝트를 접근하거나 변경하는 경우, 라이브러리 캐시 오브젝트에 대해 획득하는 락 라이브러리 캐시 오브젝트의 실행정보(contents)를 보호 타임아웃 - 일반 프로세스 3초, PMON 프로세스 1초 row cache lock 로우 캐시 오브젝트(row cache object : RCO)를 변경하고자 할 때 획득하는 락 여러 프로세스가 동시에 로우 캐시 오브젝트를 변경하면 경합 발생 타임아웃 - 60초 buffer busy waits Buffer lock 획득 시 경합 발생 오라클 10g에서는 2개의 이벤트로 분화 buffer busy waits read by other session 타임아웃 - 일반적 경우 1초, 연속적으로 대기할 경우에는 3초
  • #18: Dynamic Performance Views V$LOCK : enqueue 락 문제 완벽 분석 가능 SID : 락을 보유 중이거나 요청 중인 세션의 아이디. LMODE > 0 이면 락을 보유중인 세션.REQUEST > 0 이면 락을 요청 중인 세션. TYPE : enqueue 락의 리소스 타입(예 : TM, TX, UL, US, CI, TC, ….) ID1 : 리소스 아이디1 ID2 : 리소스 아이디2. TYPE+ID1+ID2 가 락이 보호하는 리소스 구분자 LMODE : 락을 보유하고 있는 경우의 모드(1~6. 락 모드 참조) REQUEST : 락을 요청중인 경우의 모드(1~6. 락 모드 참조) CTIME : 현재의 락 모드가 허용된 이후의 시간(second). 즉, 락을 보유하거나 요청한 이후부터의 시간 BLOCK : 현재의 락이 다른 락을 블로킹하고 있는지 여부. 1 = 다른 락을 블로킹 중, 0 = 다른 락을 블로킹하지 않음 V$ENQUEUE_LOCK : 블로킹 현상이 발생한 경우만 조회 가능 V$LOCKED_OBJECT : TM 락을 획득한 세션과 오브젝트 정보 DBA_DML_LOCKS : TM 락에 대한 정보 DBA_DDL_LOCKS : library cache lock에 대한 정보 DBA_KGLLOCK : library cache lock + library cache pin에 대한 정보 X$KGLLK : library cache lock에 대한 정보 X$KGLPN : library cache pin에 대한 정보 V$ROWCACHE_PARENT : row cache lock에 대한 정보