首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 考试认证 >> 正文

OCP 033自制讲稿—调整共享池pdf完整版


8. 库缓存相关的诊断工具
   /v$sgastat  可以显示所有SGA组件的大小
   /v$librarycache 关于library中对象的统计信息,非常重要
   /v$sql 可以查看cursor,parent SQL text, child of the origial SQL
     这里介绍以下child cursor
     user A: select * from tblA
     user B: select * from tblA
    大家认为这两条语句是不是一样的啊,可能会有很多人会说是一样的,但我告诉你不一定,那为什么呢?
    这个tblA看起来是一样的,但是不一定哦,一个是A用户的, 一个是B用户的,这时他们的执行计划分析代码
    差别可能就大了哦,哈哈,如果前面加了限定大家就明白了: select * from A.tblA,select * from B.tblA
    这是不一样,当然前面不加限定的也可能是一样的。
  /v$sqlarea: 这个数据表相当与对v$sql做group by 了,并且和v$sql一样每条只可以看到1000个字符
  /v$sqltest:  这个试图可以查看Sql等的全部内容啦,分行的哦
  /v$db_object_cache: 显示缓存的对象,包括对应的namespace,type和gets,pins等统计信息
  /相关初始化参数:shared_pool_size, open_cursors, session_cached_cursors, cursor_space_for_time
              cursor_sharing, shared_pool_reserved_size
  /statspack等工具

9. 是否共享了Cursor
   /查询V$librarycache,检查SQL AREA的gethitratio
     select gethitratio from v$libararycache where namespace='SQL AREA';
    这个命中率 = gethits/gets, 表示软分析次数与分析次数的比值
    OLTP系统应该>=90%,如果<90%,你可能需要
     --改写你的应用程序中的Statement了,提高效率。但往往你可能无法去调整应用程序的代码,因为你没有。
     --增加共享池的大小
     --调查那些SQL正在执行
       select sql_text, users_excuting,executions, loads from v$sqlarea;
         --users_excuting查询的时候,正在执行的次数
         --excutions  总的执行次数
         --loads      这个数值越低越好
       select * from v$sqltext where sql_text like 'select * from hr.employees where %';

10. 共享游标
   /初始化参数 CURSOR_SHARING,有三个取值:exact, similar, force
     --exact 默认值,2个sql语句必须完全一样才共享缓存中的已分析代码 
     --similar  当2个sql仅只有参数变量值不一样而结构完全一样时,而且执行计划一样就共享
     --force 当2个sql仅只有参数变量值不一样而结构完全一样时也共享,不考虑执行计划的影响,比如
        select * from employees where employee_id=1000;
        select * from employees where employee_id=1234;
11. 准则:库缓存的丢失率(reloads)
    /reload应该小于PINS的1%
     select sum(pins) "executions", sum(reloads) "cache misses",
            sum(reloads)/sum(pins) from v$libararycache;
   /当其>1%时,有两种可能的原因
     --因为没有空间了,曾经分析执行过的代码被赶出去了,对策:增加shared pool大小,当然SGA要有空闲空间
     --共享的代码 invalidated了
      对策:避免在高负荷时修改数据结构和收集数据统计,创建索引等,把这些工作调整到负荷低的时候去做

12. 调整库缓存
   /当gethitratio<90%或丢失率>1%时,就需要优化
   /对于频繁要用的PL/SQL包,触发器,sequence,永久将他们缓存在内存中
   /为常用的SQL定义足够的内存
   /为大内存需求的对象保留空间,这样可以避免碎片(碎片会导致这些内存不可用而浪费)
   /栓住那些常用的对象
   /将大的匿名PL/SQL块改写成小的包函数
    将匿名PL/SQL块改写成存储过程,不管他们是大还是小的匿名块

13. 共享池建议
    可以通过OEM来查看oracle server建议的共享池大小,也可以查询视图
    select shared_pool_size_for_estimate as pool_size, estd_lc_size,estd_lc_time_saved from v$shared_pool_advice;
     shared_pool_size_for_estimate:表示估计的共享池大小,取值范围,当前库缓存大小的50---200%,每个估计值一行
     estd_lc_size: 对应分配的library cache大小,
     estd_lc_time_saved: 估计的能保留的时长
    怎么决定库缓存的大小呢,当estd_ls_size增大时,estd_lc_time不再发生变化时,我们取第一个这样的share_pool_size_for_estimate作为我们的共享池大小。

14. 执行计划
   /oracle server把SQL解析执行过的执行计划缓存在内存中,供下次共享使用,而不必再执行一次硬分析,直接找到相应的内存中的执行计划来执行SQL
   /当SQL在内存中被淘汰,相对应的执行计划也会被请出libarary cache
   /这个特性最主要的好处就是能更好的诊断查询执行效率
   /怎样查询SQL的执行计划
  select operation,object_owner,object_name,cost from v$sql_plan order by hash_value
   /在v$sql视图中有一列hash_value(书上错:不应该是书上说的plan_hash_value)和v$sql_plan的列hash_value相对应
  /hash_value还可以用来比较Cursor SQL TEXT是否相似

15 计算Global Space
   /计算存储对象需要的空间大小,比如包,函数,存储过程
    select sum(sharable_mem) from v$db_object_view
      [where type in ('PACKAGE','PACKAGE BODY','PROCEDURE','FUNCTION')]
   /计算经常执行的SQl需要的空间大小
    select sum(sharable_meme) from v$sql_are where execution>5
   /计算高峰时所有打开游标需要的空间,假如每个用户每个游标的最大允许大小是250B
    select sumI(250*user_opening) from v$sqlarea
    /理想状态下,您的生产环境的library cache应该是这些数字之和,并且加上一定的缓冲大小
   /在测试环境中,你也可以用一个典型用户来计算可能需要需要的平均游标空间,
   select 250*value bytes_per_user from v$sesstat s, v$statname n where s.statistic$=n.statistics#
     and n.name='opened cursors curent' and s.sid=15;

16. 大内存需求(oracle自身运行的大程序段,package等,超过1万byte的程序段)
    /有大的连续内存满足需求
    /在共享池中为他们保留一定的连续空间
    /V$shared_pool_reserved视图中的列说明
     --free_space:    保留空间列表中所有的空闲空间
     --Avg_Free_Size: 保留空间列表空闲内存的平均值
     --Max_Free_Size: 保留空间列表空闲内存的最大值
     --Request_misses:因为没有一个满足需求的连续空闲内存,LRU列表不得不flush对象来满足请求的次数
     --request_failuers: 没有空闲空间导致请求失败的次数
     --last_failures_size:最后一次请求失败需要的内存大小
     --其他
   /初始化参数:shared_pool_size
          shared_pool_reserved_size 一般为share_pool_size的10%, 是shared_pool_size的一部分,不是另外开辟一块内存
          最大值是share_pool_size的50%, 大于50%会报错

上一页  [1] [2] [3] [4] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航