日期:2014-05-16  浏览次数:20474 次

Oracle 性能调优学习笔记(四)-- 调优共享池

共享池:大小有SHARED_POOL_SIZE决定.
???? 库缓存:包含语句文本,解析码,执行计划信息被用户共享.
???????? 管理被LRU算法.在共享池内存不够的时候,报
????? ORA-040331.被用来阻止语句重复解析.提高硬编译,
????? 提高软编译.用于定位共享池匹配的SQL语句.
??数据库字典缓存:表,列,权限等数据字典信息.
??用户全局区(仅在共享服务器模式,并且在large
??pool没有配置情况下存在)
?????
??? SQL 共享
?? 1.当前语句在共享池中是否存在
?? 2.语句被hash之后,判断语句是存在,不存则硬编译.
?? cursor_sharing=exact|similar|force
?? 1.通常默认cursor_sharing='exact',常量不同,使用硬解析.当cursor_sharing设置为
?? similar或者force,sql语句,常量不同,可以共享解析.
?? alter system set cursor_sharing='similar';
??
? 2.当语句中的对象和share pool对象结构不一致,则语句重新编译.
? 3.使用变量绑定,可以提供语句的共享率,从而提高性能.
???? 4.会话环境必须一致,SQL的优化器必须一致.
???
??? 查看执行时间
??? set timing on
??? 调优libary cache
??? 1.确保用户可以共享语句.
??? 2.分配足够的内存.
??? 3.避免包含无效的重解析.
?????? 避免匿名的PLSQL块.
??? 最好配置一个large pool;
??v$libarycache:了解各个字段的信息.
??1.建议采用预定义SQL(最好使用绑定变量和空格等最好有规定).
??2.不要修改应用的优化器.
??3.尽可能采用存储过程.
??
??
??? 根据v$sql_shared_cursor查看sql语句不能共享的原因.
??在应用系统最好只使用一个用户,多次登录.减少各种信息在数
??据字典中缓存.
??1.高效存储过程的使用
??存储过程中是以所有者用户执行.不是以调用用户执行.
??2.避免DDL的频繁执行或者在低峰时执行.
??