《oracle性能优化总结》由会员分享,可在线阅读,更多相关《oracle性能优化总结(11页珍藏版)》请在金锄头文库上搜索。
1、个人理解,数据库性能最关键的因素在于 IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的 IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指 oracle 产品本身的一些优化,逻辑优化是指应用程序级别的优化 物理优化: 一 、优化内存内存是指 Oracle SGA(系统全局区),它由共享池、数据缓冲区、日志缓冲区组成;共享池又分为共享 SQL 区和数据字典缓存区。1.数据库管理员通过执行下述语句,来查看共享 sql 区的使用率select (sum(pins-reloads)/sum(pins) libCache from v$librarycac
2、he(DBA 权限)共享 SQL 区的使用率应该在 90%以上,否则增加共享池大小v$rowcache 视图结构NAMESPACEVARCHAR2 (15) 名称空间,例如:sql_area,indexGETS NUMBER 请求的语句句柄数GETHITS NUMBER 获得的句柄数GETHITRATIONUMBER 前两者之比PINS NUMBER 根据句柄查找对像并执行的次数PINHITS NUMBER 对象在内存中的次数PINHITRATIONUMBER 前两者之比RELOADS NUMBER由于是第一次执行,或者语句体被调出内存时需要重新 reload 次数oracle 执行一条语句会
3、首先去获得该语句句柄(gets), 然后根据句柄查找对应的语句,对像(pins) 执行,如果该语句体因为某些因为没有在内存中则需要重载语句体(reloads) 所以 reloads 最好不要超过 1%,sum(pinhits)/sum(pins)要达到 95%以上.sum(gethits)/sum(gets)命中率也应在 95%以上.2.数据库管理员可以执行下述语句,查看数据字典缓冲区的使用率select (sum (gets-getmisses-usage-fixed)/sum(gets) Row Cache from v$rowcache(DBA 权限)数据字典缓冲区也应该在 90%以上,
4、否则增加共享池大小。本视图显示数据字典缓存(也叫 rowcache)的各项统计。每一条记录包含不同类型的数据字典缓存数据统计,注意数据字典缓存有层次差别,因此同样的缓存名称可能不止一次出现V$ROWCACHE 视图结构PARAMETER VARCHAR2 (15) 缓存名COUNT NUMBER 缓存项总数USAGE NUMBER 包含有效数据的缓存项数GETS NUMBER 请求总数GETMISSES NUMBER 请求失败数SCANS NUMBER 扫描请求数SCANMISSES NUMBER 扫描请求失败次数MODIFICATIONS NUMBER 添加、修改、删除操作数DLM_REQU
5、ESTS NUMBER DLM 请求数DLM_CONFLICTS NUMBER DLM 冲突数DLM_RELEASES NUMBER DLM 释放数3.管理员可以通过下述语句来查看数据缓冲区的使用情况select name,value from v$sysstat where name in (db block gets, consistent gets, physical reads);数据缓冲区使用命中率(physical reads 除以 db block gets 加 consistent gets 之和)一定要小于 10%,否则需要增加数据缓冲区大小4.管理员可以通过执行下述语句,查
6、看日志缓冲区的使用情况select name,value from v$sysstat where name in (redo entries,redo log space requests)根据查询出的结果可以计算出日志缓冲区的申请失败率: requests 除以 entries申请失败率应该解决与 0,否则说明日志缓冲区开设太小,需要增加 Oracle 数据库的日志缓冲区二、物理 I/0的优化1.在磁盘上建立数据文件前首先运行磁盘碎片整理程序为了安全地整理磁盘碎片,需关闭打开数据文件的实例,并且停止服务。如果有足够的连续磁盘空间建立数据文件,那么就容易避免数据文件产生碎片。2.不要使用磁盘
7、压缩(Oracle 文件不支持磁盘压缩)3.不要使用磁盘加密加密像磁盘压缩一样加了一个处理层,降低磁盘读写速度。如果担心自己的数据可能泄露,可以使用 dbms_obfuscation 包和 label security 选择性地加密数据的敏感部分4.使用 RAIDraid 使用应注意:选择硬件 raid 超过软件 raid;日志文件不要放在 raid5 卷上,因为 raid5 读性能高而写性能差;把日志文件和归档日志放在与控制文件和数据文件分离的磁盘控制系统上5.分离页面交换文件到多个磁盘物理卷跨越至少两个磁盘建立两个页面文件。可以建立四个页面文件并在性能上受益,确保所有页面文件的大小之和至少
8、是物理内存的两倍。三、cpu 优化调整1.cpu 使用情况一般 unix 操作系统,可以使用 sar -u 命令查看 cpu 的使用率; NT 操作系统的服务器,可以使用 NT 的性能管理器来查看 CPU 的使用率出现 CPU 资源不足的情况很多:SQL 语句的重解析、低效率的 SQL 语句、锁冲突都会引起 cpu 资源不足2.查看 sql 语句的解析情况数据库管理员可以执行下述语句来查看 SQL 语句的解析情况:select * from v$sysstat where name in (parse time cpu,parse time elapsed,parse count (hard)
9、;这里 parse_time_cpu 是系统服务时间,parse_time_elapsed 是响应时间。waite_time = parse_time_elapsed-parse_time_cpu由此可以得到用户 SQL 语句平均解析等待时间:用户 SQL 语句平均解析等待时间=waite time/parse count数据库管理员还可以通过下述语句,查看低效率的 SQL 语句select buffer_gets,executlons,sql_text from v$sqlarea;优化这些低效率的 SQL 语句也有助于提高 CPU 的利用率3.查看 Oracle 数据库的冲突情况数据库管理
10、员可以通过 v$system_event 数据字典中的latch free统计项查看 Oracle 数据库的冲突情况,如果没有冲突的话,latch free 查询出来没有结果。如果冲突太大的话,数据库管理员可以降低 spin_count 参数值,来消除4.cpu 优化取消屏幕保护、把系统配置为应用服务器、监视系统中消耗中断的硬件、保持最小的安全审计记录、在专门服务器上运行 Oracle、禁止非必须的服务四、网络配置优化网络配置是性能调整的一项很重要的内容,而且很容易隐藏性能瓶颈配置网卡使用最快和有效模式、删除不需要的网络协议、优化网络协议绑定顺序,为Oracle 禁止或优化文件共享五、使用 C
11、BO优化器参见本目录 CBD 优化器六、合理配置 oracle实例参数 序号 参数名称 建议值 说明1 log_chcckpoint_intcrval 12 log_checkpoint_ 0timeout3 parallcl_automatic_tuning TRUE4 OPEN_CURSORS 10245 Dml_locks 100006 MTS_servers 10 根据用户数量可适当调整,一般为用户数量的 10%7 cursor_sharing SIMILAR七、索引优化(减少 IO)如何某表的某个字段有主键约束和唯一性约束,则 Oracle 则会自动在相应的约束列上建议唯一索引。数据
12、库索引主要进行提高访问速度。建设原则:1、索引应该经常建在 Where 子句经常用到的列上。如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的 5%。则应该考虑。2、对于两表连接的字段,应该建立索引。经常在某表的一个字段进行 Order By 则也经过进行索引。3、不应该在小表上建设索引。优缺点:索引主要进行提高数据的查询速度。 当进行 DML 时,会更新索引。因此索引越多,则DML 越慢,其需要维护索引。 因此在创建索引及 DML 需要权衡。创建索引:单一索引:Create Index On (Column_Name);复合索引: Create Index i_deptno_j
13、ob on emp(deptno,job); 在 emp 表的deptno、job 列建立索引。select * from emp where deptno=66 and job=sals -走索引。select * from emp where deptno=66 OR job=sals -将进行全表扫描。不走索引select * from emp where deptno=66 -走索引。select * from emp where job=sals -进行全表扫描、不走索引。如果在 where 子句中有 OR 操作符或单独引用 Job 列(索引列的后面列) 则将不会走索引,将会进行全表
14、扫描。4.分析表与索引(analyze 不会重建索引)analyze table tablename compute statistics 等同于 analyze table tablename compute statistics for table for all indexes for all columnsfor table 的统计信息存在于视图:user_tables 、all_tables、dba_tablesfor all indexes 的统计信息存在于视图: user_indexes 、all_indexes、dba_indexesfor all columns 的统计信息存
15、在于视图:user_tab_columns、all_tab_columns、dba_tab_columns注:分析表与索引见 AnalyzeAllTable 存储过程5、一般来讲可以采用以下三种方式来手工分析索引。analyze index idx_t validate structure:analyze index idx_t compute statistics:analyze index idx_t estimate statistics sample 10 percent1)analyze index idx_t validate structure:这段分析语句是用来分析索引的 bl
16、ock 中是否有坏块儿,那么根据分析我们可以得到索引的结构数据,这些数据会保留到index_stats 中,来判断这个索引是否需要 rebuild. 需要注意的是这样的分析是不会收集索引的统计信息的。2)validate structure 有二种模式: online, offline, 一般来讲默认的方式是 offline。当以 offline 的模式 analyze 索引时,会对 table 加一个表级共享锁,对目前 table 的一些实时 DMl 操作会产生一定的影响。而以 online 模式分析时候,则不会加任何 lock,但在 index_stats 中是看不到任何信息的。3)analyze index idx_t compute statistics:用来统计索引的统计信息(全分析),主要为 CBO 服务。4)analyze index idx_t estimate statistics sample