shared pool的组成部分
librery cache,data dictionary cache,uga
shared pool的大小由参数shared_pool_size决定,但使用自动 sga 大小管理时,shared pool的大小由 oracle决定。(建议使用自动 sga管理,设置sga_target=总大小即指定了sga的总大小)
查看shared pool中librery cache的大小
select * from v$sgastat a where a.NAME = 'library cache';
查看shared pool中free momery的大小
select * from v$sgastat a where a.pool = 'shared pool' and a.NAME = 'free memory';
shared pool的大小可以在 v$ sgainfo中得到。
参数CURSOR_SPACE_FOR_TIME=false,游标可能老化,以让出空间给新的游标,=true,游标不老化,新游标分配新的空间。(已不建议使用)
在OLTP系统中对 shared pool调优的目标是减少硬解析。
2条SQL语句构成共享的条件
1.发出的sql语句和 shared pool中已存在的sql语句对比.
2.比较依据sql语句的hash值。如果hash值不一致则编译新语句。
3.发现hash值一致,则将shared pool中已有的具有相同hash值的语句和新sql语句逐个字符进行比较,包括空格,大小写,注释
4.如果被引用的对象发生改变,则进行hard parse.
5.使用绑定变量提高共享率(变量名要一致)
6. session的当前环境一致(sql优化器)
在v$sysstat中查询name = parse count(hard)的值,可以获得自instance启动以来的硬解析次数。name = parse count(total)的值表示总解析次数。parse count(total) - parse count(hard)的值是软解析次数。
与shared pool有关的latch
shared pool latch
librery cache latch
对shared pool调优的原则:使parse的次数尽可能的少。
确保用户session能共享sql
防止已经parse的语句老化(增加shared pool的容量,但需要先确定free memory是否已经很小)
sql语句访问的对象保持结构稳定。
避免大的匿名pl/sql块
v$librarycache描述了librery cache的性能和活动指标。
Name Type Nullable Default Comments
------------------------- ------------ -------- ------- --------
NAMESPACE VARCHAR2(15) Y library cache中各种对象名称分类
GETS NUMBER Y 在编译过程中library cache中寻找的次数
GETHITS NUMBER Y 在编译过程中library cache中寻找并获取次数
GETHITRATIO NUMBER Y 在编译过程中library cache中命中的比率
PINS NUMBER Y 在执行过程中library cache中寻找的次数
PINHITS NUMBER Y 在执行过程中library cache中寻找并获取次数
PINHITRATIO NUMBER Y 在执行过程中library cache中命中的比率
RELOADS NUMBER Y 被访问对象从磁盘读取到内存的次数
INVALIDATIONS NUMBER Y 被访问对象结构发生变化导致hard parse的次数
DLM_LOCK_REQUESTS NUMBER Y
DLM_PIN_REQUESTS NUMBER Y
DLM_PIN_RELEASES NUMBER Y
DLM_INVALIDATION_REQUESTS NUMBER Y
DLM_INVALIDATIONS NUMBER Y
如何提高shared pool的效率
1.提高v$libraercache中gethits的值(9i)。(使用绑定变量)
2.尽量避免使用动态sql。
3.各个session不要修改sql优化器模式
4.尽可能使用存储过程
5.使用同一用户名连接oracle
6.高峰期不要运行导致被访问对象结构改变的DDL语句
如何找出不能共享cursor的sql.
在v$sql或v$sqlarea中查找执行次数较小的sql语句,观察这些sql语句是否是经常执行的。
检查shared pool
1.检查v$libraercache中reloads的次数,要尽可能低。
2.检查v$libraercache中invalidations的次数,要尽可能低。
3.检查v$sgastat中free memory的值,如果值过低,应该扩大shared pool的容量。
4.检查shared pool的命中率。
1.v$libraercache中PINHITRATIO的值
select sum(pinhits)/sum(pins)*100 from v$librarycache;
2.select sum(pins) "hits",
sum(reloads) "misses",
sum(reloads)/sum(pins) "Hits Ratio"
from v$librarycache;
不要大于1%
如何决定library cache的大小
select a.SHARED_POOL_SIZE_FOR_ESTIMATE,a.ESTD_LC_SIZE,a.ESTD_LC_TIME_SAVED from v$shared_pool_advice a;
SHARED_POOL_SIZE_FOR_ESTIMATE:估算的sharad pool容量
ESTD_LC_SIZE:library cache的大小
ESTD_LC_TIME_SAVED :估算的节约的时间
如何计算library cache的大小
计算所有非SQL语句对象占用的内存
select sum(sharable_mem) from v$db_object_cache;
计算SQL语句占用的内存
select sum(sharable_mem) from v$sqlarea;
它们的和就是library cache的大小
计算shared pool的使用率
SELECT
(1 - ROUND(BYTES / (xxx), 2)) * 100 || '%'
from V$SGASTAT
WHERE NAME = 'free memory' AND POOL = 'shared pool';
xxx:v$sgainfo中shared pool的大小
保留池相关
在shared pool内部有一部分空间属于保留池,当一些对象需要存储到shared pool中,但shared pool已有的连续的空间已经不足时, oracle就会使用保留池的空间。使得对大对象的内存分配更高效。PL/SQL块,触发器编译等都有可能使用保留池,当保留池的空间释放后,该空间交还给保留池。如果在分配内存空间时发现保留池的空间都已经用完,则会让一部分对象老化。
一般情况下使用默认的保留池大小即,有必要设置保留池大小时可以设置参数shared_pool_reserved_size,最大不能超过shared pool容量的50%,建议保留池大小为shared pool大小的5%--10%
与保留池相关的视图:v$shared_pool_reserved
重点查看FREE_SPACE(空余空间),REQUESTS(对保留池空间的请求次数),
REQUEST_MISSES(请求保留池空间失败的次数),REQUEST_FAILURES(失败次数);
将PL/SQL对象固定在library cache中
查询可以被固定的对象
select * from v$db_object_cache where sharable_mem > 10000
and (type = 'PACKAGE' or type='PACKAGE BODY' or type = 'FUNCTION' or type='PROCEDURE')
and kept = 'NO';
执行 dbms_shared_pool.keep('对象名');
调整data dictionary cache
主要视图:v$rowcache
PARAMETER:data dictionary cache中每个子部件的名称
GETS:向data dictionary cache发起请求的次数
GETMISSES:向data dictionary cache发起的请求未命中的次数
GETMISSES占比不能超过15%。
查看data dictionary cache中各部件的命中率
select parameter,sum(gets),sum(getmisses),100*sum(gets-getmisses)/sum(gets),sum(modifications)
from v$rowcache
where gets>0 group by parameter;
分享到:
相关推荐
### Oracle性能调整:Shared Pool深入分析及性能优化 #### 一、Shared Pool概念与重要性 **Shared Pool** 是Oracle数据库实例内存结构SGA(System Global Area)中的一个重要组成部分,主要用于存储共享的数据结构...
绑定变量是相对文本变量的一种概念,可以减少硬解析,降低 CPU 的争用,节省 shared_pool。然而,绑定变量也存在一些缺点,如不能使用 Histogram,SQL 优化比较困难。 十一、稳定执行计划 可以通过设置 query_...
在相克军的ORACLE讲座中,这一章节详细探讨了Shared Pool的工作原理、优化策略以及相关问题的解决方法。 首先,Shared Pool由三个主要部分构成:Free(剩余空间)、Library Cache和Row Cache。Free区域是用来存储未...
同时,也需要对内存使用进行优化,例如给 Oracle 更多内存,SGA 调整、shared_pool 调整等。此外,还需要对 IO 进行优化,例如读性能、写性能等。 3. Oracle SQL 与业务实现 Oracle SQL 是 Oracle 数据库的核心...
### Oracle数据库调优配置:两种方案详解 在企业级应用中,Oracle数据库因其稳定性和高效性而被广泛采用。然而,随着数据量的急剧增长和业务需求的不断变化,优化Oracle数据库性能成为确保系统高效运行的关键。本文...
本文主要关注Oracle性能优化中的关键领域——SGA(System Global Area)的调优,尤其是Shared Pool和Buffer Cache的优化。 **1. Shared Pool调优** Shared Pool是Oracle SGA的一部分,它主要负责存储解析的SQL语句...
本文主要关注Oracle的Shared Pool和Buffer Cache的调优。 首先,我们来看Shared Pool的调优。Shared Pool是Oracle SGA(System Global Area)的一部分,主要用于存储SQL语句、PL/SQL代码、数据字典信息等。其优化对...
### Oracle性能调优原理及具体手段 #### 一、Oracle结构与实例 ##### 1.1 Oracle实例(Instance) - **定义与作用**:Oracle实例是访问Oracle数据库的一个途径,它仅能打开一个数据库。 - **组成**:由SGA(系统...
调优共享池(Shared Pool)是为了提高SQL语句的复用率和减少解析开销。Library Cache和Data Dictionary Cache是主要关注点。通过减少SQL解析次数、使用绑定变量、调整共享池大小以及优化PL/SQL代码,可以减少碎片化...
Sharedpool Tuning(共享池调谐) 共享池是Oracle内存结构SGA(System Global Area)的重要组成部分,对于提高数据库的整体性能至关重要。共享池主要用于存储SQL语句、PL/SQL程序等共享的数据结构。其调优应作为...
Oracle 性能调优技术文档 Oracle 性能优化是数据库管理员和开发人员最关心的问题之一,如何提高 Oracle 数据库的性能是每个数据库管理员和开发人员都需要了解的问题。在本文档中,我们将讨论 Oracle 性能优化的...
本文档主要关注Oracle 9i及之前的版本,这些版本中的一些核心参数如`shared_pool_size`, `db_block_buffers`, `log_buffer`等对性能有显著影响。 1.1 Oracle 9i之前的内存参数调优: - **shared_pool_size**:用于...
Oracle 内存参数调优技术详解 Oracle 内存参数调优技术是指在 Oracle 实例中调整...基本掌握的原则是,db_block_buffer 通常可以尽可能的大,shared_pool_size 要适度,log_buffer 通常大到几百 K 到 1M 就差不多了。
为了提高SQL的执行效率,Oracle采用了共享缓冲区池(`shared buffer pool`)来缓存执行过的SQL语句及其结果。这意味着当执行一条与之前相同的SQL语句时,Oracle可以直接从缓存中获取结果,从而大大减少了执行时间。...
《Oracle_IO_性能调优手册》是一本专为IT专业人士准备的深度指南,主要关注如何优化Oracle数据库的I/O性能。在Oracle数据库管理中,I/O性能是影响系统整体效率的关键因素,尤其对于大规模数据处理和高并发业务场景至...
**定义**:SGA(Shared Global Area)是Oracle实例为所有用户进程所共享的一组内存结构,主要包括数据缓冲区、重做日志缓冲区、共享池等,它是Oracle数据库性能调优的基础。 **组成部分**: - **数据缓冲区 (db_...