Library Cache란?

- SQL 을 수행하게 되면 , 그 SQL 에 관련된 정보를 저장하는 곳이 필요하다 , (어떤 테이블에 접근하고, 권한은 어떻게 되며, plan이 저장된 메모리 위치는 어디인지 등등  )

- Storage 상에 System Tablespace에 존재하겠지만 어떤 테이블에 저장되는지 궁금하다 ..

 

 

Lirary Cache - SQL Hash

-  SQL의 Hash값으로 저장되어야 할 Hash Bucket이 선정 된다 

-  Hash Bucket에는 각 SQL Hash 값에 따른 SQL정보가 어디에 있는지를 알려준다 

-  Hash Bucket이 가르키는 LCO로 가면 해당 SQL의 정보를 찾을 수 있다 

 

 

LCO는 어떻게 구성이 되어 있을까

LCO 는 Library Cache Object로  SQL을 수행하기 위한 여러 정보들이 저장되어있는 Object이다 

 

LCO의 구성

1. Child Table : 

기본적으로는 하나의 Parent LCO 에는 하나의 child LCO에 있다   

- ex) 

SQL#1   ----   schema : Lee   ---   SQL> select * from customer where id = :a1;

SQL#2   ----   schema : Cho   ---   SQL> select * from customer where id = :a1;

SQL 은 동일한데 1.스키마가 다르고(완전히 다른 테이블) 2.:a1 변수의 data type 도 다를 경우 (SQL#1 은 integer , SQL#2는 char) 

두개는 동일한 SQL이지만 다른 정보이기에 2개의 Child 가 생성된다

 

2. Dependency Table :

해당 SQL이 참조하는 Object들이 저장되어있다. (Index, Table, View , Procedure, Package, Trigger)

 

3. Data Blocks :

실제 SQL 및 실행계획 관련 메모리 포인터

 

** 오래되거나 Invalid 된 LCO는 SQ Aging out이 된다 

 

Lock은 왜 잡히는 걸까?

DDL이 수행되면 DDL에 관련된 LCO가 변경 또는 삭제(invalid)가 된다 . 그러면서 LCO에대한 Locking 작업이 진행된다