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的频繁执行或者在低峰时执行.