2013년 8월 6일 화요일

[ORACLE SGA Tuning, 오라클자바커뮤니티]X$KSMLRU

X$KSMLRU 에 대해 알아봅니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


 X$KSMLRU는 Shared Pool 영역에서 다른 오브젝트를 age out 시키고 연속된 공간을 할당 받은 Object에 대한 정보를 담고 있어 많은 양의 메모리를 사용하는 Object에 대한 Flush 상태를 확인 할 수 있습니다. SYS 사용자만 질의 가능 합니다.

 많은 Object를 Flush 시키고 할당이 되는 객체들이 자주 변한다면 Response Time이 나빠지며 Flush 되었던 객체가 다시 로드 됨으로서 Library Cache Latch Contention을 일으킬 수 있습니다.

 그러므로 많은 Object들을 Flush 시키며 로드되는 Object들이 자주 사용 된다면 Memory에 KEEP 시키도록 하는 것이 유리 합니다. 이 Fixed Table(X$KSMLRU)에서 한번 조회된 ROW는 테이블에서 없어 집니다.

아래는 Object의 할당으로 인해 Flush 된 Object 수가 0보다 큰 것을 조회하는 겁니다. 즉 여기에 나타나는 것이 큰 Object이죠… 이놈을 Shared Pool에 올리려니 크기가 크니까 다른 Object를 쫓아 보리는 겁니다. 물론 그러한 새션의 아이디도 확인 할 수 있습니다.

SQL> select * from x$ksmlru where ksmlrnum > 0;

ADDR          INDX    INST_ID  KSMLRIDX  KSMLRDUR KSMLRCOM
-------- ---------- ---------- ---------- ---------- --------------------
  KSMLRSIZ  KSMLRNUM KSMLRHON                          KSMLROHV KSMLRSES
---------- ---------- -------------------------------- ---------- --------
02EE6B54          0          1          1          0 work area tabl
      4216          8                                          0 799FC2D8

02EE6B00          1          1          1          0 BAMIMA: Bam Buffer
      4132          8 BEGIN dbms_shared_pool.sizes...  335996982 799FC2D8


SQL> select * from x$ksmlru where ksmlrsiz > 5000;

선택된 레코드가 없습니다.

SQL> select * from x$ksmlru where ksmlrnum > 0;

선택된 레코드가 없습니다.   위에서 조회 했으므로 데이터가 사라 졌다.

Columns Desc

KSMLRSIZ : allocate된 연속된 memory size, 이 크기가 5K 넘으면 문제의 소지가 있으며 10K가 넘으면 심각, 20K가 넘으면 심각한 문제를 야기 시킬 가능성이 있습니다.

KSMLRNUM : 이 Object의 할당으로 인해 Flush 된 Object 수
KSMLRHON : Load되고 있는 Object의 이름(PL/SQL or Cursor)
KSMLROHV : Load되고 있는 Object의 Hash Value
KSMLRSES : 이 Object를 Load한 Session의 SADDR 값 

댓글 없음:

댓글 쓰기