oracle数据库优化指南_oracle cpu参数与内存参数优化

发布时间:2019-11-26编辑:脚本学堂
有关oracle数据库优化的方法,包括cpu参数的调整与内存参数调整,oracle优化实例教程,需要的朋友参考下。

一、cpu参数的调整
cpu是服务器的一项重要资,服务器良好的工作状态是在工作高峰时cpu的使用在90%以上。如果空闲时间cpu使用率就在90%以上,说明服务器缺乏cpu资源,如果工作高峰时cpu使用率仍然恨低,说明服务器cpu资源还比较富余。

使用操作相同命令可以看到cpu的使用情况,以般unix操作系统的服务器,可以使用sar–u命令查看cpu的使用率,nt操作系统的服务器,可以使用nt的性能管理器来查看cpu的使用率。
数据库管 理员可以通过查看v$sysstat(select*fromv$sysstat wherenamelike'cpu%')数据字典中“cpuused by this session”统计项得知oracle数据库使用的cpu时间,查看“os userlevel cpu time“统计项得知操作系统用 户态的cpu时间,查看“os systemcall cpu time“统计项得知操作系统系统态下的cpu时间,操作系统总的cpu时间就是用户态和系统态时间之和,如果oracle数据库使用的cpu时间占操作 系统总的cpu时间90%以上,说明服务器cpu基本上被oracle数据库使用着,这是合理,反之,说明服务器cpu被其它程序占用过多,oracle 数据库无法得到更多的cpu时间。

数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接oracle数据库各个会话占用的cpu时间,从而得知什么会话耗用服务器cpu比较多。(select*fromv$sysstat orderbyvaluedesc)

出现cpu资源不足的情况是很多的:sql语句的重解析、低效率的sql语句、锁冲突都会引起cpu资源不足。

1、数据库管理员可以执行下述语句来查看sql语句的解析情况:
 

复制代码 代码示例:
select * from v$sysstat
where name in
('parse time cpu', 'parse time elapsed', 'parse count (hard)');
 

这里parse time cpu是系统服务时间,parse timeelapsed是响应时间,用户等待时间
 

waite time = parse time elapsed – parse time cpu
 

由此可以得到用户sql语句平均解析等待时间=waite time / parse count,这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句
 

复制代码 代码示例:
selectsql_text, parse_calls, executions from v$sqlarea
order by parse_calls;


来发现是什么sql语句解析效率比较低。程序员可以优化这些语句,或者增加oracle参数session_cached_cursors的值。

2、数据库管理员还可以通过下述语句:
 

select buffer_gets, executions, sql_text fromv$sqlarea;
 

查看低效率的sql语句,优化这些语句也有助于提高cpu的利用率。

3、数据库管理员可以通过v$system_event(select*fromv$system_event where event like'_atch%';)数据字典中的”latchfree“统计项查看oracle数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的cpu使用率。

二、内存参数调整
内存参数的调整主要是指oracle数据库的系统全局区(sga)的调整。sga主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

1、共享池由两部分构成:共享sql区和数据字典缓冲区,共享sql区是存放用户sql命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:
 

复制代码 代码示例:
select (sum(pins -reloads)) / sum(pins) "lib cache" from v$librarycache;
 

来查看共享sql区的使用率。这个使用率应在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句:
 

复制代码 代码示例:
select (sum(gets - getmisses - usage - fixed))/ sum(gets) "row cache" from v$rowcache;
 

查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。

2、数据缓冲区.数据库管理员可以通过下述语句:
 

复制代码 代码示例:
select name, value  from v$sysstat  where name in ('db block gets', 'consistentgets','physical reads');
 

来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets))。
这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

3、日志缓冲区.数据库管理员可以通过执行下述语句:
 

复制代码 代码示例:
select name,value from v$sysstat where name in('redo entries','redo log space requests');

查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加oracle数据库的日志缓冲区。