일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- goldengate
- oracle installation
- ActiveDataGuard
- ogg
- oracle recovery
- rman
- 백업
- 오라클아키텍쳐
- SILENTMODE
- backup
- 데이터가드
- Oracle 19c
- DataGuard
- 오라클구조
- linux
- 데이터베이스
- 오라클
- 오라클설치
- Oracle
- 19c
- Installation
- adg
- recovery
- 오지지
- OracleGoldenGate
- Database
- SSH
- ORACLE19C
- 디비투
- oracle goldengate
- Today
- Total
DoubleDBDeep
[ORACLE] 4. Lock & Latch 본문
Lock
공유 자원에 대한 동시 접속을 조절하기 위한 매커니즘
오라클은 row 수준에서 테이블 데이터에 lock을 걸기도 하지만, 다양한 자원에 동시 접속을 가능하게 하기 위해 여러 수준에서 lock을 사용함.
DML Lock
데이터를 동시에 변경할 수 있는 메커니즘 제공
테이블의 특정 로우에 거는 락 또는 테이블에 모든 로우에 락 이 해당.
TX Lock (Transaction)
트랜잭션이 첫번째 변경을 시작할 때 획득 ~ commit, rollback까지 유지
TX 락은 다른 세션이 트랜잭션이 완료될 때 까지 기다릴 수 있는 queuing 매커니즘으로 사용된다.
오라클은 TX 락을 유지하는데 많은 cost가 들 것 같지만 그렇지않음
1. lock을 걸고싶은 row의 주소값을 찾는다.
2. 해당 row로 간다.
3. 그 자리에 있는 row에 lock을 건다
-> 오라클은 lock을 데이터의 속성으로 저장하기 때문에 lock 관리자 / lock 리스트가 따로 필요하지 않음
트랜잭션은 단순히 데이터가 저장된 곳으로 가서 락을 검
다른 rdbms에 비해 간단한 locking 구조
TM Lock (DML Enqueue)
TM 락은 내용을 변경하는 동안 테이블 구조를 변경하지 않도록 보장하는데 사용됨.
DDL Lock
DDL 작업동안 다른 세션에 의한 변경으로 부터 OBJECT를 보호하기 위해 자동으로 걸림
- 배타 DDL Lock : 다른 세션이 DDL Lock / DML Lock을 획득하지 못하게 한다. DDL 작업동안 select는 가능하지만 다른 것은 불가능
대부분은 배타 DDL Lock을 얻는다
ONLINE Clasue 사용한 DDL
ONLINE 키워드는 배타 DDL락 대신 TM락만 획득함 (DML은 되도록 허용)
-> DDL문을 수행하는 동안 테이블 변경되는 내용을 기록 유지하고 CREATE 작업을 마칠 때 변경 기록을 새로운 인덱스에 적용함
- 공유 DDL Lock : 다른 세션에 의해 변경되는 것에 대비하여 참조하는 Object 구조를 보호하지만, 데이터에 대한 변경은 허용
Procedure, View 처럼 저장된 또는 컴파일된 객체를 생성할 때 의존관계에 있는 객체를 대상으로 획득됨
예 ) A 테이블과 B 테이블을 조인해서 만든 create view 구문 실행 시 A,B 테이블에 대해 dml 되나 ddl 안됨
- Breakable Parse Lock : Shared Pool에 캐싱된 실행계획처럼 Object간의 의존 관계를 등록한다. 특정 Object에 대해 DDL을 수행 시 의존관계 확인 후 무효화 시킬 것임 -> 깨지기 쉽다 ddl 발생 막지 않는다.
세션이 sql parsing 시 그 sql에 의해 참조되는 모든 object 를 대상으로 parse lock을 검
만약 참조되는 object가 어떤식으로든 drop, alter 되면 parsing되어 caching된 문장을 shared pool에서 invalid 시키기 위해 얻어지는 lock임.
Intermal Lock과 Latch
오라클은 내부 자료구조를 보호하기 위해 내부 락(internal lock)과 래치(latch)를 사용
예 >> 쿼리를 파싱하고 최적화된 실행계획을 생성하고 라이브러리 캐시를 래칭한 다음 다른 세션이 공유할 수 있도록 실행계획을 라이브러리 캐시에 저장한다. 락과 비슷한 기능
Latch
공유된 데이터 구조, Object , 파일에 대한 다수 사용자 접속을 조정하는데 사용되는 경량의 직렬화 장치 ( ? ? ? ? )
아주 짧은 시간동안 유지되도록 설계된 락임
shared pool에서 database block buffer cache 또는 library cache 처럼 특정 메모리 구조를 보호하는데 사용
사용자 정의 LOCK - DBMS_LOCK
내부적으로 사용하는 enqueue lock 매커니즘으로 사용자 정의 락을 생성하여 오라클 외부 자원에 대한 액세스를 직렬화 시키기위해 이 패키지를 사용
예 >> 서버 파일 시스템 상에 존재하는 파일에 write하는 UTL_FILE 을 사용하는데, 파일은 외부에 있기 때문에 오라클은 많은 사용자가 동시에 파일을 변경하는 것을 조정할 수 없음 이때 DBMS_LOCK 패키지를 사용하여 열고 쓰고 닫을때 한번에 한사람만 허용하도록 하는거임
'ORACLE > Architecture' 카테고리의 다른 글
[ORACLE] 6. INDEX (0) | 2025.04.25 |
---|---|
[ORACLE] 5. REDO & UNDO (0) | 2025.04.22 |
[ORACLE] Cursor (0) | 2024.04.17 |
[ORACLE] SQL Parsing (0) | 2024.04.17 |
[ORACLE] 3. Oracle Process (0) | 2023.03.06 |