用户SQL质量
以上讲的都是硬件方面的东西在条件有限的条件下我们可以调整应用程序的SQL质量
不要进行全表扫描(Full Table Scan)全表扫描导致大量的I/O
尽量建好和使用好索引建索引也是有讲究的在建索引时也不是索引越多越好当一个表的索引达到个以上时ORACLE的性能可能还是改善不了因为OLTP系统每表超过个索引即会降低性能而且在一个sql 中 Oracle 从不能使用超过 个索引当我们用到GROUP BY和ORDER BY时ORACLE就会自动对数据进行排序而ORACLE在INITORA中决定了sort_area_size区的大小当排序不能在我们给定的排序区完成时ORACLE就会在磁盘中进行排序也就是我们讲的临时表空间中排序 过多的磁盘排序将会令 free buffer waits 的值变高而这个区间并不只是用于排序的对于开发人员我提出如下忠告:
)selectupdatedelete 语句中的子查询应当有规律地查找少于%的表行如果一个语句查找的行数超过总行数的%它将不能通过使用索引获得性能上的提高
)索引可能产生碎片因为记录从表中删除时相应也从表的索引中删除表释放的空间可以再用而索引释放的空间却不能再用频繁进行删除操作的被索引的表应当阶段性地重建索引以避免在索引中造成空间碎片影响性能在许可的条件下也可以阶段性地truncate表truncate命令删除表中所有记录也删除索引碎片
)在使用索引时一定要按索引对应字段的顺序进行引用
)用(+)比用NOT IN更有效率
降低ORACLE的竞争
先讲几个ORACLE的几个参数这几个参数关系到ORACLE的竞争
)freelists 和 freelist 组他们负责ORACLE的处理表和索引的空间管理
)pctfree 及 pctused该参数决定了freelists 和 freelist 组的行为pctfree 和pctused 参数的唯一目的就是为了控制块如何在 freelists 中进出
设置好pctfree 及 pctused对块在freelists的移走和读取很重要
其他参数的设置
)包括SGA区(系统全局区)系统全局区(SGA)是一个分配给Oracle 的包含一个 Oracle 实例的数据库的控制信息内存段
主要包括数据库高速缓存(the database buffer cache)
重演日志缓存(the redo log buffer)
共享池(the shared pool)
数据字典缓存(the data dictionary cache)以及其它各方面的信息
)db_block_buffers(数据高速缓沖区)访问过的数据都放在这一片内存区域该参数越大Oracle在内存中找到相同数据的可能性就越大也即加快了查询速度
)share_pool_size (SQL共享缓沖池)该参数是库高速缓存和数据字典的高速缓存
)Log_buffer (重演日志缓沖区)
)sort_area_size(排序区)
)processes (同时连接的进程数)
)db_block_size (数据库块大小)Oracle默认块为KB太小了因为如果我们有一个KB的数据则KB块的数据库要读次盘才能读完而KB块的数据库只要次就读完了大大减少了I/O操作数据库安装完成后就不能再改变db_block_size的值了只能重新建立数据库并且建库时要选择手工安装数据库
)open_links (同时打开的链接数)
)dml_locks
)open_cursors (打开光标数)
)dbwr_io_slaves (后台写进程数)