这篇文章是参考甲骨论老相老师的教学视频:
http://v.youku.com/v_show/id_XMzkyMTg4Njg0.html
所做的学习笔记

前面已经提过shared pool(共享池)的作用和结构了, 详细看这里:
http://nvd11.blog.163.com/blog/static/200018312201301875752730/

总的来讲:
        shared pool 就是用来缓存sql语句和对应执行计划的, 当一条sql第二次执行时能找到shared pool的共享sql的执行计划的就避免了硬解析, 大大提高了数据库的运行效率.

而现在内存白菜价, 一般的笔记本都随便上8g内存了, 很多服务器都64g内存起步.
        理论上来讲, shared pool越大, 能缓存的sql语句和执行计划就越多, 能避免硬解析的几率就越高,那么是不是shared pool的容量越大越好呢,  其实不是这样的.

1.shared pool设置过大也有缺点:
硬解析在shared pool运作机制可以参考下图啦:

大致上1条sql硬解析的语句会执行一下步骤:

1. SQL传入shared pool
2. SQL语句 会转换成ASCII码 经过一系列计算算出hash 值和For library cache的chain号码
3. 到library cache 对应chain号码的内存链chain上面根据hash值遍历每个chunk.
4. 找不到hash值相同的chunk啊(找到就是软解析了)
5. 到free memory空间找1个足够大的chunk.
6. 执行硬解析, 并把算出的执行计划放入这个chunk中,
7. 把这个chunk挂到library cache对应链中, 作为缓存,下次执行就能软解析了.

可以观察出,真正执行硬解析所需的只有1,5,6步,  其余都是为了下次软解析服务的.

所以说,假如oracle由于总总原因, 每次传入来的sql都不同,都不能共享sql,那么shared pool的这些动作实在是个累赘, 还不如不用shared pool, 当然这种情况几乎不可能,而且oracle也不能禁用shared pool的.

所以程序员做好SQL共享是1个很重要的事情啊.
参考:
http://nvd11.blog.163.com/blog/static/200018312201301945631729/

好了, 假如程序代码写得很规范, 而且都用绑定变量去实现SQL共享, 那么是否shared pool越大越好呢?

其实也不是,  仔细看看第3步, 是1个遍历线性表的动作,  如果shared pool很大, 则library cache也很大,那么library的数据链可能会很长,同时缓存了很多很不常执行的sql语句, 这样的遍历起来可能会变慢.(也不是很慢啦, 比短chain慢而已)

所以Oracle 在9g的时候建议shared pool大小最好不要超过1G

但是Oracle 10g后 应用了新技术, 如果shared pool很大, 则会对其分成1个个小部分, 那么数据链就不会很长了, 所以10g 可以设置大点, 老相老师他说见过生产数据库将shared pool设成10G的.

手动设置shared pool 大小:

其实一般来讲我们只需设置sga-target的大小就可以了,  oracle会自动管理shared pool的size.

但是当服务器内存不能增加的时候, 也就是说sga-target被指定的情况下,怎么手动设置shared pool的size

其实oracle有个系统动态视图 v$shared_pool_advice    叫共享池建议..
我们可以借助它算出 大概的shared pool最佳大小(当前sga-target下)
select 'shared pool' component,   
            shared_pool_size_for_estimate estd_sp_size,
            estd_lc_time_saved_factor parse_time_factor,
            case when current_parse_time_elapsed_s + adjustment_s < 0
            then 0
            else      current_parse_time_elapsed_s + adjustment_s
            end  response_time
            from ( select a.shared_pool_size_for_estimate,
                                   a.estd_lc_time_saved_factor,
                                   a.estd_lc_time_saved,
                                   e.value/100 current_parse_time_elapsed_s,
                                   c.estd_lc_time_saved - a.estd_lc_time_saved adjustment_s
                         from   v$shared_pool_advice a,
                        (select * from v$sysstat where name ='parse time elapsed') e,
                        (select estd_lc_time_saved
                          from   v$shared_pool_advice
                         where shared_pool_size_factor = 1) c
                         );

执行试下:

一般来讲,  当PARSE_TIME_FACTOR 为 1, 也就是说shared pool设置为240m是最合理的.

查看当前系统自动管理下的shared pool大小:

的确比较接近这个值了.


手动设置SGA 大小:

当然可用
alter system set sga_target =xxx; 来设置了
注意设置为0 时,是交由ORACLE自动管理大小啦,

但是当手动设置时,如何获得最佳大小值呢,可以借助em管理页面 ,里面有ORACLE的推荐..

首先启动em服务你懂的:

接下来,在防火墙开发1158端口:
修改/etc/sysconfig/iptables

跟住重启防火墙服务:
service restart iptables

就可以在客户端浏览器登陆em了,地址是
https://192.168.0.112:1158/em/

注意服务器ip啦

登陆后,点击首页下方的指导中心:


再点击内存指导:

进入内存指导页面,默认情况下sga_target 是自动设置(sga_target =0), 是看不到建议的, 我们要禁用自动管理,
点击禁用:

这是可以手动设置了, 也可以设置sga里面各大池大小, 如下图 点击建议:

可以见到建议, 640m左右是最佳的,实际上也是oracle系统自动管理那个值啦...

转载于:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996805.html

Oracle 如何设置shared pool 和sga大细, 应该设置几大相关推荐

  1. oracle shared pool size,oracle 关于设置shared pool及sga大小

    本文参考了https://blog.csdn.net/xinzhan0/article/details/52461611?locationNum=2&fps=1 如何设置shared pool ...

  2. oracle 调整shared pool,Oracle设置Shared Pool的大小

    在oracle 10G或者11G版本中,如何合理设置shared pool大小,对oracle数据库的性能影响很大. Shared Pool的大小设置规则如下: 1.查到shared pool设置的合 ...

  3. oracle shared pool size,SHARED_POOL_RESERVED_SIZE参数的设置及作用

    SHARED_POOL_RESERVED_SIZE参数的设置及作用 shared_pool_reserved_size: 该参数指定了保留的共享池空间,用于满足将来的大的连续的共享池空间请求.当共享池 ...

  4. Oracle数据库案例整理-Oracle系统执行时故障-Shared Pool内存不足导致数据库响应缓慢...

    1.1       现象描写叙述 数据库节点响应缓慢,部分用户业务受到影响. 查看数据库告警日志,開始显示ORA-07445错误,然后是大量的ORA-04031错误和ORA-00600错误. 检查数据 ...

  5. oracle 调整shared pool,Oracle性能调整中的Shared pool tunning要点

    本文主要简述的是Oracle性能调整中Shared pool tunning要点,Shared pool tunning要点,在Oracle性能调整实际的相关操作中起到不可忽视的作用,以下的文章就是对 ...

  6. SHARED POOL 原理

    SHARED POOL 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch,library ...

  7. Shared pool内存块组成结构及4031错误原因分析

    这篇文章是参考甲骨论老相老师的教学视频所做的学习笔记: http://v.youku.com/v_show/id_XMzkyMDQ4MzUy.html 之前提到Shared pool的作用: Shar ...

  8. html设置excel打开新窗口,怎么在excel的大页面上设置第几页第几页的

    excel总是显示很大字"第几页第几页"怎么去掉 打开excel表格,可以在页面显示中看到有浅灰色的"第1页"."第3页"字样. 点击页面上 ...

  9. oracle 保留池,ORACLE SGA之shared pool

    1.shared pool的内存块组成 shared pool中主要的内存区域:free.library cache.row cache 为了确保共享池中共享数据的访问性能,共享池的每次内存分配都必须 ...

最新文章

  1. B站疯传!拿走不谢!最全面的JAVA面试材料!完整版开放下载,叫我好人!
  2. python从list列表中选出一个数和其对应的坐标
  3. Hudson升级异常及解决办法
  4. Python爬虫开发:requests库的使用--发送带参数post请求
  5. java安全编码指南之:死锁dead lock
  6. MySQL分库分表总结参考
  7. JBPM中 使用JobExecutor执行timer定义的job
  8. Web应用系统中数据传递的方式汇总
  9. 你的代码是否按照高内聚、低耦合的原则来设计的?
  10. linux相关命令介绍
  11. 解决debug JDK source无法查看局部变量的问题
  12. 利用jsonp、iframe和location.hash解决跨域问题
  13. zookeeper中展示所有节点_zookeeper工作原理与节点使用
  14. codesys raspberry pi_【Pi讯早餐】2020.11.02 星期一gt;gt;
  15. Unity3D基础19:Tag标签
  16. Android实现边录音边播放
  17. 做短视频,素材、工具缺乏怎么办?听我说完,没那么难做,别放弃
  18. Python Selenium 抓取Shadow Dom内部元素方法更新
  19. 什么是CDN资质?什么情况需要办CDN牌照
  20. 区块链技术正向积极乐观的智能前景发展

热门文章

  1. 电子商务的发展和出现
  2. 深入浅出解释FFT(六)——深入理解fft变换
  3. 钱学森最后一次系统谈话:大学要有创新精神
  4. python threading多线程计算
  5. 分布式加载数据训练神经网络
  6. 为什么有人会觉得灵魂无处安放
  7. 变焦即可判断物体的距离
  8. django写项目的详细步骤
  9. web后端轻量级框架flask基础调用程序模板
  10. AJPFX实列判断一个字符串是不是对称字符串