文中注释处以符号"*"加章节数字标记,具体在章节最后统一详细说明。
chapter 6 Automatic performance diagnostics
Sql语句中尽量不要直接使用具体变量值进行操作,否则这些sql语句将不被其他用户共享,这样将导致增加额外的并且很耗费数据库时间的硬解析(*6-1)。例如,查询语句类似下面
select * from employees
where last_name like 'king';
实际上,较好的做法是将查询条件进行变量绑定,例如上面语句经过修改后,如下
select * from employees
where last_name like :1;
:1代表绑定的变量,在sql语句执行时,输入具体的值
如果应用程序中出现类似问题,而程序代码无法修改时,可以采取另外一个办法,设置数据库的CURSOR_SHARING变量的值为“force”
注释
6-1:硬解析(hard parse) 2010-04-12
执行某条sql语句时,首先计算此条语句的哈希值,接着在共享池(share pool)的库缓存(library cache)中查找与此哈希值匹配的语句
如果未找到对应的匹配语句,将解析此条语句,并将此语句放入库缓存中共享以被再次调用,这个过程即为硬解析。参照上面所说的sql语句绑定变量就是一种减少硬解析,增加共享池重复利用率的办法。
当然,如果上面在库缓存中找到与sql语句哈希值匹配的信息时,接着,再用此条sql语句与共享池中的语句进行逐个字符的比对,包括空格,
大小写,注释等,例如,下面三条sql语句使用的是不同的共享区域:
SELECT * FROM employees;
SELECT * FROM Employees;(字母E)
SELECT * FROM employees;(比第一条多一个空格)
那么同样作用的3条语句,2条都是冗余的,具体可以查询视图V$SQL_SHARED_CURSOR,进行统计测试。因此,将sql语句最后统一转换为大写是个好办法。
chapter 7 Memory Configuration and Use
SGA
1.将SGA_TARGET 初始化变量设置为一个为非零值,并且将STATISTICS_LEVEL变量设置为“TYPICAL”或者“ALL”,使ADDM更有效的工作。
2.在共享服务器模式(shared server)下,为了获取更好的排序性能,可以将变量SORT_AREA_SIZE与SORT_AREA_RETAINED_SIZE设置为相同的值,这样,排序结果将保留在大型池中(large pool)而不是写入硬盘。
3.SGA共享池(shared pool)内存架构采用LRU算法管理,而大型池(large pool)没有LRU列表。
4.大型池的使用
以下三种情况考虑使用大型池(large pool):
a:并行查询(parallel query)
b:恢复管理(recovery manager)
c:共享服务器模式(shared server)
大型池(large pool)更多内容见http://blog.youkuaiyun.com/battlehawk/archive/2010/04/13/5482996.aspx
5.如果系统没有库缓存读取丢失(library cache misses),可以通过将初始化变量CURSOR_SPACE_FOR_TIME设置为true来加快sql语句的执行调用。如果sql语句在执行调用时出现库缓存丢失现象,那么这个库缓存丢失表明共享池不够大。
6.缓存会话游标(caching session cursors)。
通过ALTER SESSION SET SESSION_CACHED_CURSORS = value ;设定,其中value变量为正整数。
通过SELECT * FROM V$SYSSTAT WHERE NAME LIKE 'session cursor%'语句查询会话游标缓存的命中率,如果命中率较低时,考虑增大这个缓存大小。
7.设置Reserved pool
内存性能指标的查看,及参数设置方法具体见:http://blog.youkuaiyun.com/battlehawk/archive/2010/04/18/5498787.aspx
8.重做日志缓存调优。
以下任一情形为真时,LGWR都会将日志缓存中的日志条目拷贝至联机日志文件中:
一、日志缓存满三分之一时。二、服务器进程执行提交或回滚命令。三、DBWR让LGWR这样做
调优方式:
一、增大LOG_BUFFER。二、改进检测点(checkpointing)或者存档进程。三、改进写日志的性能(也许可以使用将联机日志转移至裸设备环境)。四、批量提交任务。五、装载大数据量时使用NOLOGGING操作
PGA
具体链接:http://blog.youkuaiyun.com/battlehawk/archive/2010/04/16/5493346.aspx