■ Library Cache Pin
- SQL문장이나 PL/SQL 객체를 고정하여 여러 session에서 공유되는 것을 보장하는 lock이다. 이는 공유 자원에 대한 동시 접근을 통제하여 데이터베이스의 일관성과 무결성을 유지하는 데 사용한다.
1. SQL문 hard parsing
▶ library cache pin을 exclusive mode 획득한다.
- SQL문장이 처음 parsing 될때 해당 SQL 문장을 다른 session이 변경하지 못하도록 보호한다.
2. SQL문 execute 단계
▶ library cache pin을 shared mode 획득한다.
- 다른 session에서 동시에 동일한 SQL문장을 실행 할 수 있도록 한다.
3. SQL문 fetch 단계
▶ library cache pin을 해제한다.
4. procedure(function, package) 실행 단계
▶ library cache pin을 shared mode 획득한다.
- 해당 객체를 실행하는 동안 다른 session이 변경하지 못하도록 보호한다.
5. ALTER procedure(function, package) complie 단계 (수정 및 컴파일)
▶ library cache pin을 exclusive mode 획득한다.
- 객체의 구조를 변경하기 위한 lock으로 컴파일이 완료되면 pin이 해제된다.
<sys session>
#) 권한 생성
grant execute on dbms_lock to hr;
<hr session>
create or replace procedure pin_proc(p_time in number)
is
begin
dbms_lock.sleep(p_time);
end;
/
<hr session>
<sess_1>
execute dbms_application_info.set_client_info('sess_1')
<sess_2>
execute dbms_application_info.set_client_info('sess_2')
<sys session>
select client_info, sid, blocking_session, event
from v$session
where client_info in ('sess_1', 'sess_2');
select client_info, sid, blocking_session, event
from v$session_wait
where sid in (16, 25);
<hr session_1>
execut pin_proc(100)
<hr session_2>
alter procedure pin_proc compile;
<sys session>
select sid, event, wait_class, wait_time, seconds_in_wait, state
from v$session_wait
where sid in (16, 25);
<sys session_2>
select sid, event, total_waits, time_waited
from v$session_event
where sid in (16, 25);
'Data Base > SQL 튜닝' 카테고리의 다른 글
Version Count_ 바인드 변수 size 설정 (0) | 2024.02.05 |
---|---|
Shared Pool Latch, library cache latch (1) | 2024.02.05 |
Library Cache Lock_table 생성, 대량의 Data (1) | 2024.02.05 |
Library Cache Lock _ 같은 session에서 procedure 실행 후 wait event 확인 (0) | 2024.02.05 |
Invalidations(무효화) 발생하는 경우 (0) | 2024.02.03 |