Oracle内存结构 share pool library cache

来源:互联网 发布:学校三级卫生网络 编辑:程序博客网 时间:2024/05/22 01:48

1.library cache的作用

    library cache最主要的功能就是存放用户提交的SQL语句、SQL语句相关的解析树(解析树也就是对SQL语句中所涉及到的所有对象的展现)、执行计划、用户 提交的PL/SQL程序块(包括匿名程序块、存储过程、包、函数等)以及它们转换后能够被oracle执行的代码等。为了对这些内存结构进行管理,还存放 了很多控制结构,包括lock、pin、dependency table等。

    library cache还存放了很多的数据库对象的信息,包括表、索引等等。有关这些数据库对象的信息都是从dictionary cache中获得的。如果用户对library cache中的对象信息进行了修改,则这些修改会返回到dictionary cache中。

    在library cache中存放的所有的信息单元都叫做对象(object),这些对象可以分成两类:一类叫存储对象,也就是上面所说的数据库对象。它们是通过显式的 SQL语句或PL/SQL程序创建出来的,如果要删除它们,也必须通过显示的SQL命令进行删除。这类对象包括表、视图、索引、包、函数等等;另一类叫做过渡对象,也就是上面所说的用户提交的SQL语句或者提交的PL/SQL程序块等。这些过渡对象是在执行SQL语句或PL/SQL程序的过程中产生的,并 缓存在内存里。如果实例关闭则删除,或者由于内存不足而被交换出去,从而被删除。

    当用户提交SQL语句或PL/SQL程序块到oracle的shared pool以后,在library cache中生成的一个可执行的对象,这个对象就叫做游标(cursor)。不要把这里的游标与标准SQL(ANSI SQL)的游标混淆起来了,标准SQL的游标是指返回多条记录的SQL形式,需要定义、打开、关闭。下面所说到的游标如无特别说明,都是指library cache中的可执行的对象。游标是可以被所有进程共享的,也就是说如果100个进程都执行相同的SQL语句,那么这100个进程都可以同时使用该SQL 语句所产生的游标,从而节省了内存。每个游标都是由library cache中的两个或多个对象所体现的,至少两个对象。一个对象叫做父游标(parent cursor),包含游标的名称以及其他独立于提交用户的信息。从v$sqlarea视图里看到的都是有关父游标的信息;另外一个或多个对象叫做子游标 (child cursors),如果SQL文本相同,但是可能提交SQL语句的用户不同,或者用户提交的SQL语句所涉及到的对象为同名词等,都有可能生成不同的子游 标。因为这些SQL语句的文本虽然完全一样,但是上下文环境却不一样,因此这样的SQL语句不是一个可执行的对象,必须细化为多个子游标后才能够执行。子 游标含有执行计划或者PL/SQL对象的程序代码块等。


2.library cache的信息获取

select * from v$libraryCache;
ColumnDatatypeDescriptionNAMESPACEVARCHAR2(15)Library cache namespaceGETSNUMBERNumber of times a lock was requested for objects of this namespaceGETHITSNUMBERNumber of times an object's handle was found in memoryGETHITRATIONUMBERRatio ofGETHITStoGETSPINSNUMBERNumber of times a PIN was requested for objects of this namespacePINHITSNUMBERNumber of times all of the metadata pieces of the library object were found in memoryPINHITRATIONUMBERRatio ofPINHITStoPINSRELOADSNUMBERAnyPINof an object that is not the firstPINperformed since the object handle was created, and which requires loading the object from diskINVALIDATIONSNUMBERThe total number of times objects in this namespace were marked invalid because a dependent object was modifiedDLM_LOCK_REQUESTSNUMBERNumber ofGETrequests lock instance locksDLM_PIN_REQUESTSNUMBERNumber of PIN requests lock instance locksDLM_PIN_RELEASESNUMBERNumber of release requests PIN instance locksDLM_INVALIDATION_REQUESTSNUMBERNumber ofGETrequests for invalidation instance locksDLM_INVALIDATIONSNUMBERNumber of invalidation pings received from other instances

3.library cache的统计信息