您的位置:首页 > 数据库 > Oracle

Oracle - SGA → Shared_pool

2013-11-07 22:31 281 查看

1.摘要

     SGA最重要的两部分:db_buffer_cache 和 shared_pool,其中两者相互独立又相互制约,ora-04031等错误,都是来自两者“竞争”产生的结果,因此合理的Shared_pool大小的设置,是一门艺术,接下来,我们针对shared_pool做深入的研究。

     shared_pool是SGA中最关键的内存片段,特别是在性能和可伸缩性上(shared_pol的大小设置是直接影响oracle数据库的性能)。一个太小的共享池会降低性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这一个共享池。

         shared_pool分为library_cache(SQL语句缓存)和Data_dictionary cache(数据字典缓冲)两个主要的部分以及近600项其他部分。

       共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。

       如在执行SELECT * FROM emp语句时,会对sql语句进行语法分析->编译->生成执行计划->运行执行计划 等,这些操作都在共享池中完成;如果再次执行SELECT
*

 FROM emp语句时,会在共享池中查找是否有相同的sql,如果存在则省去编译、生成执行计划操作步骤而是直接运行执行计划,因此养成良好的编码习惯对于提高oracle执

行效率非常有帮助。

提出一个问题:

如果内存命中率<99.5%,那么这个时候,我们要对哪些参数进行相关调整,从而使得命中率达到 < 99.5%以上呢

△ 查看share_pool参数设置值,为0则表示ASMM开启

      SQL> show parameter shared_pool_size;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 64M

△ 查看shared_pool当前运行期间所分配大小

 SQL> select pool,sum(bytes) from v$sgastat group by pool;

POOL         SUM(BYTES)

------------ ----------

                          419429264

shared pool   620761784

large pool     16777216

java pool      16777216



2.Library Cache



3.Data Dictionary cache

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息