본문 바로가기

Oracle/Oracle testing

11g 에서 새로 추가된 Event 중 Concurrency Class 1/2

이벤트 클래스중에서 가장 이슈가 될만한것은
Concurrency 가 되지 않을까 싶다.

10g R2 에 비해서 11g R2 에 추가된 이벤트가 추가되었을까?

선행작업 :

Vmware 11g R2 설치
Vmware 10g R2 설치.

각각의 tnsnames.ora 설정후 DB링크작업을 해준다.

create public database link COMPDB11G connect to flashone identified by ORACLE using 'TEST11G'
create public database link COMPDB10G connect to flashone identified by oracle using 'TEST10G'

10g 와 11g 를 DBLINK작업을 한후에
이제 SELECT를 시도.

11g에서
select * from v$event_name where event_id in (
select EVENT_ID from v$event_name WHERE wait_class = 'Concurrency'
minus
select EVENT_ID From v$event_name@COMPDB10G  WHERE wait_class = 'Concurrency')

기존 10g R2 에서는 이벤트가 874개.
11g R2 에서는 이벤트가 1118개
빼면 380개가 된다.

위의 SELECT 문은 그 380개의 이벤트를 가져온 sql문이다.
그중에서 Concurrency 가 가장 궁금한지라
이것들만 조회를 시도했다.

그랬더니. 11개의 결과가 출력되었다.

EVENT NAME

logout restrictor
Shared IO Pool Memory
db flash cache invalidate wait
securefile chain update
SecureFile mutex
enq: WG - lock fso
cursor: pin X
cursor: pin S
library cache: mutex X
library cache: mutex S
Streams apply: waiting for dependency

위의 이벤트를 조사해 보기로 했다. (아는대로만)
구글에도 자료가 별로없고 그렇다고 내가 META LINK를 들어갈수있는 권한이 있는것도 아닌지라
난감. ㅡ_ㅡ;;


1. enq: WG - lock fso
우선 enq니 v$lock_type 를 조회해보면 description에 Long term lock on wgc file state라는 말이 보인다.
그러면 WGC가 또 무엇인가해서 찾아보기로했다.

이 단어를 가지고 이곳저곳의 자료를 찾아보게되면
LOB write 와 연관이 있다는것을 알게된다.

11g에 새로 생긴 기능으로서.

기존 10g LOB DATA를 쓸때는 direct path 를 사용해서
쓰게된다 . SGA를 그냥 바이바이하고 넘어가게된다.

그런데 11g 에서는
그냥 무조건 파일을 쓰는게 아니고 메모리를 이용해서 쓴다고 한다.
4MB의 메모리의 캐시를 하면서 dbwriter 가쓴다고한다.

관련 파라미터 : _kdlw_enable_write_gathering
해당기능 활성화 : 11g R2를 설치해보니 기본으로 true

실제 돌아가는 알고리즘은 나도 알아보는중.


2. securefile chain update
3. SecureFile mutex

오라클 사이트에 11g를 광고하는 글중에

민감한 문서(계약서, X-레이 이미지 등)는 종종 전자적으로 스캔하여 저장합니다.
이제 Oracle Database의 한층 강화된 보안을 활용할 수 있습니다.
Oracle Database 11g의 새로운 'SecureFile' LOB를 암호화할 수 있습니다.
출처 : http://www.oracle.com/technology/global/kr/deploy/security/database-security/transparent-data-encryption/index.html

라는 말이 있다. 여기서 SecureFile 과 말이 동일한것을 보아 LOB암호화를 하는과정에서
발생하는 이벤트를 예기하는듯하다.


4. cursor: pin X
5. cursor: pin S
여기에서 말하는 cursor는 아마도 library cache 안의 cursor 를 말하는듯하다.
이 부분에서 pinning 작업을 하면서 직관적으로 pin 발생및 shared인지 exclusive인지 보여주는 이벤트로 보여진다.



6. library cache: mutex X
7. library cache: mutex S

기존 10g에서는 아래와 같은 이벤트를가지고 작동했던부분이
latch: library cache
latch: library cache lock
latch: library cache pin

11g에서는 mutex로 작동이 되는것이 아닐까?
그러면서 이또한 shared 와 exclusive 로 분류되어 직관적으로 이해할수있게 이벤트가 보여지는것같아보인다.

아래는 library cache 를 dump 를 해서 나온부분 중하나이다.
Bucket 부분에 Mutex로 된것을 봐선 Mutex로 바뀐듯하다.

...
Bucket: #=6 Mutex=8bb78d48(0, 17, 0, 6)
  LibraryHandle:  Address=85151968 Hash=8a3e0006 LockMode=0 PinMode=0 LoadLockMode=0 Status=VALD
    ObjectName:  Name=select s.serial#, p.spid, s.server from v$session s, v$process p where s.sid = 70 and
s.paddr = p.addr

      FullHashValue=9292705db02933e0c93cb87b8a3e0006 Namespace=SQL AREA(00) Type=CURSOR(00) Identifier=23193
19046 OwnerIdn=95
    Statistics:  InvalidationCount=0 ExecutionCount=1 LoadCount=2 ActiveLocks=0 TotalLockCount=1 TotalPinCou
nt=1
...


A세션 : UPDATE 문 반복
B세션 : alter system flush shared_pool;
C세션 : 모니터링

모니터링중에

아래와 같은 이벤트가 발생했다.
library cache lock
library cache lock

library cache: mutex X

8. Streams apply: waiting for dependency
오라클의 Stream Pool 을 이용한 DB간의 데이터 전송(물론 redo log capture한 데이터를 전송할경우에도)
시 발생하는 이벤트라고한다. - 자세한내용은 아직 ㅡ_ㅡㅋ;

다른이벤트도 있으나 자료가 별로없다 ㅡ_ㅡ;;; 테스트하는대로 갱신을 해야할듯하다.