|
大 db_block_size 大 db_cache_size 使用多个块大小 多个数据库写入(DBWR)进程 大sort_area_size 大的在线重作日志
oracle 对象
在数据库内部(表和索引的设置可以减少物理磁盘IO)
低pctused pctuseed的值越小,随后的sql插入中出现的io就越少 低pctfree 如果设置了pctfree,以允许在没有分割的情况下扩展所有行,那么在随后的sql选择中就会产生更少的磁盘io 使用索引将表重新组织成簇行 如果以最常使用索引的相同物理次序放置表
3 oracle sql 在sql语句内,有许多技术可以减少物理磁盘io
使用索引或提示(hint)防止不必要的全表搜索
使用位映射(bitmapped)索引
应用sql提示
oracle 内部结构和磁盘io
--查找稀疏表(自由表失去平衡!)
select substr(dt.table_name,1,10) c3, ds.extents c5, ds.bytes/1048576 c4, dt.next_extent/1048576 c8, (dt.empty_blocks*4096)/1048576 c7, (ds.bytes*4096)/1048576 c6, (avg_row_len*num_rows)/(db.blocks*4096) c10
from sys.dba_segments ds , sys.dba_tables dt where
--调整oracle数据库实例
接下来我们要调整oracle数据库实例,以及查看所有影响性能的 参数,配置和设定
用STATAPACK检测实例潜在的性能问题
1.oracle实例概述
2.调整oracle 数据缓冲区
3.调整共享池概述
4.调整库高速缓存
5.调整oracle排序
6.调整回滚段
7.oracle 9i RAM 内存调整
通常的角度看 oracle实例包括了两个组件: 系统全局区(SGA) 以及 oracle后台进程
我们通常通过调整oracle参数来控制SGA和后台进程
当oracle启动时 oracle就会使用malloc()命令去建立一个RAM内存区域,这个SGA通常也称为oracle区域
oracle DBA 可以控制SGA的规模 正确的SGA管理可以极大的影响性能
尽管初始化参数成百上千 但是只有很少的oracle9i参数对调整非常重要: buffer_pool_keep 这个数据缓冲池用于存储执行全表扫描的小表 buffer_pool_recycle 这个池用来保存进行全表扫描的非常大的表的表块 db_cache_size 这个参数会决定ORACLE SGA 中数据库块缓冲区的数量,它是oracle内存的最重要的参数 db_block_size 数据库块大小能够对性能产生(作为一个一般的规则,块尺寸越大,物理IO就越少,整体性能就越快) db_file_multiblock_read_count 这个参数用于全表搜索或者大表范围扫描的时候,进行多块读入 large_pool_szie 这是一个使用多线程服务器的时候,保留用于SGA使用的共享池中的特殊区域.最大池也用于并行查询RAM进程 log_buffer 这个参数会决定为oracle重作日志缓冲区分配的内存数量.如果具有大量的更新活动,就应该给log_buffer分配更多的空间
shared_pool_size 这个参数会定义系统中所有用户的共享池,包括SQL区域和数据字典高速缓存. --有三个oracle参数可以影响数据缓冲区的大小 db_cache_size buffer_pool_keep buffer_pool_recycle
oracle建议缓冲区的命中率要超过90% DBA可以通过给初始化参数增加数据块数量来控制数据缓冲区命中率
数据库缓冲池的内部结构
--使用statspack监视缓冲池的使用 --缓冲池命中率和statpack
select * from stats$buffer_pool_statistics
SGA_MAX_SIZE=6000M DB_BLOCK_SIZE=16384 DB_CACHE_SIZE=5000M BUFFER_POOL_KEEP=(1400,3)
上一篇:sql优化
下一篇:优化调整Oracle 8i数据库系统
|