[English]
作者:
fuyuncat
来源:
www.HelloDBA.com
1.1.4.7. 共享池的重要视图
最后,我们再介绍关于共享池的一些重要视图
· v$shared_pool_advice
这个视图与Oracle的另外一个优化建议器——共享池建议器——相关。我们可以根据这个视图里面oracle所做的预测数据来调整共享池大小。它的预测范围是从当前值的10%到200%之间。视图的结构如下
字段
数据类型
描述
SHARED_POOL_SIZE_FOR_ESTIMATE
NUMBER
估算的共享池大小(M为单位)
SHARED_POOL_SIZE_FACTOR
NUMBER
估算的共享池大小与当前大小比
ESTD_LC_SIZE
NUMBER
估算共享池中用于库缓存的大小(M为单位)
ESTD_LC_MEMORY_OBJECTS
NUMBER
估算共享池中库缓存的内存对象数
ESTD_LC_TIME_SAVED
NUMBER
估算将可以节省的解析时间。这些节省的时间来自于请求处理一个对象时,重新将它载入共享池的时间消耗和直接从库缓存中读取的时间消耗的差值。
ESTD_LC_TIME_SAVED_FACTOR
NUMBER
估算的节省的解析时间与当前节省解析时间的比。
ESTD_LC_MEMORY_OBJECT_HITS
NUMBER
估算的可以直接从共享池中命中库缓存的内存对象的命中次数。
关于如何根据建议器采用合理的共享池大小的方法,和前面提到的缓冲区建议器的使用方法类似,不再赘述。
· V$SHARED_POOL_RESERVED
前面提到了这个视图。这个视图存放了共享池保留区的统计信息。可以根据这些信息来调整保留区。视图结构如下:
Column
Datatype
Description
以下字段只有当参数SHARED_POOL_RESERVED_SIZE设置了才有效。
FREE_SPACE
NUMBER
保留区的空闲空间数。
AVG_FREE_SIZE
NUMBER
保留区的空闲空间平均数。
FREE_COUNT
NUMBER
保留区的空闲内存块数
MAX_FREE_SIZE
NUMBER
最大的保留区空闲空间数。
USED_SPACE
NUMBER
保留区使用空间数。
AVG_USED_SIZE
NUMBER
保留区使用空间平均数。
USED_COUNT
NUMBER
保留区使用内存块数。
MAX_USED_SIZE
NUMBER
最大保留区使用空间数
REQUESTS
NUMBER
请求再保留区查找空闲内存块的次数。
REQUEST_MISSES
NUMBER
无法满足查找保留区空闲内存块请求,需要从LRU列表中清出对象的次数。
LAST_MISS_SIZE
NUMBER
请求的内存大小,这次请求是最后一次需要从LRU列表清出对象来满足的请求。
MAX_MISS_SIZE
NUMBER
所有需要从LRU列表清出对象来满足的请求中的内存最大大小
以下字段无论参数SHARED_POOL_RESERVED_SIZE是否设置了都有效。
REQUEST_FAILURES
NUMBER
没有内存能满足的请求次数(导致4031错误的请求)
LAST_FAILURE_SIZE
NUMBER
没有内存能满足的请求所需的内存大小(导致4031错误的请求)
ABORTED_REQUEST_THRESHOLD
NUMBER
不清出对象的情况下,导致4031错误的最小请求大小。
ABORTED_REQUESTS
NUMBER
不清出对象的情况下,导致4031错误的请求次数。。
LAST_ABORTED_SIZE
NUMBER
不清出对象的情况下,最后一次导致4031错误的请求大小。
我们可以根据后面4个字段值来决定如何设置保留区的大小以避免4031错误的发生。
· v$db_object_cache
这一视图显示了所有被缓存在library cache中的对象,包括表、索引、簇、同义词、PL/SQL存储过程和包以及触发器。
字段
数据类型
说明
OWNER
VARCHAR2(64)
对象所有者
NAME
VARCHAR2(1000)
对象名称
DB_LINK
VARCHAR2(64)
如果对象存在db link的话,db link的名称
NAMESPACE
VARCHAR2(28)
库缓存的对象命名空间,包括: TABLE/PROCEDURE, BODY, TRIGGER, INDEX, CLUSTER, OBJECT, CURSOR, INVALID NAMESPACE, JAVA SHARED DATA, PUB_SUB, RSRC CONSUMER GROUP
TYPE
VARCHAR2(28)
对象类型,包括:INDEX, TABLE, CLUSTER, VIEW, SET, SYNONYM, SEQUENCE, PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, TRIGGER, CLASS, OBJECT, USER, DBLINK, CURSOR, JAVA CLASS, JAVA SHARED DATA, NON-EXISTENT, NOT LOADED, PUB_SUB, REPLICATION OBJECT GROUP, TYPE
SHARABLE_MEM
NUMBER
对象消耗的共享池中的共享内存
LOADS
NUMBER
对象被载入次数。即使对象被置为无效了,这个数字还是会增长。
EXECUTIONS
NUMBER
对象执行次数,但本视图中没有被使用。可以参考视图v$sqlarea中执行次数。
LOCKS
NUMBER
当前锁住这个对象的用户数(如正在调用、执行对象)。
PINS
NUMBER
当前pin住这个对象的用户数(如正在编译、解析对象)。
KEPT
VARCHAR2(3)
对象是否被保持,即调用了DBMS_SHARED_POOL.KEEP来永久将对象pin在内存中。
(YES | NO)
CHILD_LATCH
NUMBER
正在保护该对象的子latch的数量。
· v$sql、v$sqlarea 、v$sqltext
这三个视图都可以用于查询共享池中已经解析过的SQL语句及其相关信息。
V$SQL中列出了共享SQL区中所有语句的信息,它不包含GROUP BY字句,并且为每一条SQL语句中单独存放一条记录;
V$SQLAREA中一条记录显示了一条共享SQL区中的统计信息。它提供了有在内存中、解析过的和准备运行的SQL语句的统计信息;
V$SQLTEXT包含了库缓存中所有共享游标对应的SQL语句。它将SQL语句分片显示。
下面介绍一下我常用的V$SQLAREA的结构:
字段
数据类型
说明
SQL_TEXT
VARCHAR2(1000)
游标中SQL语句的前1000个字符。
SHARABLE_MEM
NUMBER
被游标占用的共享内存大小。如果存在多个子游标,则包含所有子游标占用的共享内存大小。
PERSISTENT_MEM
NUMBER
用于一个打开这条语句的游标的生命过程中的固定内存大小。如果存在多个子游标,则包含所有子游标生命过程中的固定内存大小。
RUNTIME_MEM
NUMBER
一个打开这条语句的游标的执行过程中的固定内存大小。如果存在多个子游标,则包含所有子游标执行过程中的固定内存大小。
SORTS
NUMBER
所有子游标执行语句所导致的排序次数。
VERSION_COUNT
NUMBER
缓存中关联这条语句的子游标数。
LOADED_VERSIONS
NUMBER
缓存中载入了这条语句上下文堆(KGL heap 6)的子游标数。
OPEN_VERSIONS
NUMBER
打开语句的子游标数。
USERS_OPENING
NUMBER
打开这些子游标的用户数。
FETCHES
NUMBER
SQL语句的fetch数。
EXECUTIONS
NUMBER
所有子游标的执行这条语句次数。
USERS_EXECUTING
NUMBER
通过子游标执行这条语句的用户数。
LOADS
NUMBER
语句被载入和重载入的次数
< FIRST_LOAD_TIME