Oracle彻底优化操作方法4


其它参数优化

优化排序
排序是一项花销很大的操作,而且对性能的影响程度也较大,因此使大部分排序在内存中完成,而不是在磁盘上进行,这是至关重要的。
识别排序量的大小,就是要确定内存中排序的量和磁盘上排序的量,可用如下语句查询:
SQL> select name ,value from V$SYSSTAT where upper(name) in (‘sorts(memory)’,’sorts(disk)’);
其中”sorts(memory)”选项表示不需要磁盘I/O,选项”sorts(disk)” 表示需要磁盘I/O。如果用户认为在磁盘上的排序意义较大,
可以增加init.ora文件SORT_AREA_SIZE参数的设置值。

建立优化索引
当要改进查询的性能时,索引是最便捷的,常常也是最好的技术。多数新应用程序的存取速度问题是由于缺少合适的索引。
使用索引可以使性能发生巨大的变化,而且确定需要什么样的索引也相对简单,只需要考察您的SQL语句,看WHERE子句中您用了什么内容。
对待索引的建立要特别谨慎,因为索引要占用磁盘空间。如果索引同表本身的大小差不多,那就不能从索引得到多少好处。
索引还要对表的更新、插入和删除的性能产生影响。除了这几点之外,索引是改进查询性能的最简单、最有效的方法,
尤其是当您总是对几个关键字字段进行搜索时,这种方法最合适。
索引建立要花费大量时间,可以使用ALTER INDEX REBUILD来创建新索引,这比其删除和重建索引要迅速得多。
如果用户的数据已经排序,在构建索引时使用NOSORT选项,如:
SQL>ALTER INDEX emp_primary_key REBUILD;
SQL>CREATE INDEX myindex ON emp(ename) NOSORT;

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

查看CPU使用率
使用操作相同命令可以看到CPU的使用情况,一般Unix操作系统的服务器,可以使用”sar u”命令查看CPU的使用率,Windows NT操作系统的服务器,
可以使用性能管理器来查看CPU的使用率。

查看数据库使用CPU的时间
可以通过查看V$SYSSTAT数据字典中”CPU used by this session”统计项得知Oracle数据库使用的CPU时间,
查看”OS User level CPU time”统计项得知操作系统的用户态下CPU时间,查看”OS System call CPU time”统计项得知操作系统的系统态下CPU时间,
操作系统总的CPU时间就是用户态和系统态时间之和。如果Oracle数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被Oracle数据库使用着。
反之,则说明服务器CPU被其它程序占用过多,Oracle数据库无法得到更多的CPU时间。
数据库管理员还可以通过查看V$SYSSTAT数据字典来获得当前连接Oracle数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。
出现CPU资源不足的情况是很多的,SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。

查看SQL语句的解析情况
数据库管理员可以执行下述语句来查看SQL语句的解析情况:
SELECT * FROM V$SYSSTAT
WHERE NAME IN
(‘parse time cpu’, ‘parse time elapsed’, ‘parse count (hard)’);
这里”parse time cpu”是系统服务时间,”parse time elapsed”是响应时间,用户等待时间waite time = parse time elapsed – parse time cpu。
由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长
,数据库管理员可以通过下述语句来发现是什么SQL语句解析效率比较低。
SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;
程序员可以优化这些语句,或者增加Oracle参数SESSION_CACHED_CURSORS的值。

查看低效率的SQL语句
数据库管理员还可以通过下述语句查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;

查看数据库的冲突情况
数据库管理员可以通过V$SYSTEM_EVENT数据字典中的”latch free”统计项查看Oracle数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。
如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。

SQL语句的调整原则
SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现。
但是语句的执行效率是很不相同的,程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:
(1)尽量使用索引。试比较下面两条SQL语句:
◆ 语句A
SELECT dname, deptno FROM dept WHERE deptno NOT IN
(SELECT deptno FROM emp);
◆ 语句B
SELECT dname, deptno FROM dept WHERE NOT EXISTS
(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
这两条查询语句实现的结果是相同的,但是执行语句A的时候,Oracle会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引;执行语句B的时候,
由于在子查询中使用了联合查询,Oracle只是对emp表进行的部分数据扫描,并利用了deptno列的索引。所以,语句B的效率要比语句A的效率高一些。

(2)选择联合查询的联合次序。
(3)在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。
(4)慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。
(5)可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。
(6)Oracle公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程”钉”在SQL区中而不被换出内存,
程序员对于经常使用并且占用内存很多的存储过程”钉”到内存中有利于提高最终用户的响应时间。

至此,完成了对Oracle数据库的优化。

Oracle数据库的性能优化调整是一个系统工程,涉及的方面很多。
数据库管理员需要综合运用上面介绍的优化方法和规律,认真分析Oracle运行过程当中出现的各种问题,合理优化,才能保证Oracle数据库高效地运行。

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Oracle彻底优化操作方法4
本文地址:http://www.xiupu.net/archives-466.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!