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 값
댓글 없음:
댓글 쓰기