- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle的性能优化;本章学习目标
本章将介绍优化和调整Oracle数据库系统的一些相关命令和方法。;本章内容安排;9.1 数据库性能优化概述;(1)调整数据结构的设计。
(2)调整应用程序结构设计。
(3)调整数据库SQL语句。
(4)调整服务器内存分配。
(5)调整硬盘I/O,这一步是在信息系统开发之前完成的。
(6)调整操作系统参数。;1.在线事务处理信息系统(OLTP)
这种类型的信息系统一般需要有大量的Insert、Update操作。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,??类系统使用的Oracle数据库需要主要考虑下述因素或参数:
(1)数据库回滚段是否足够?
(2)是否需要建立Oracle数据库索引、聚集、散列?
(3)系统全局区(SGA)大小是否足够?
(4)SQL语句是否高效?;2.数据仓库系统(Data Warehousing)
这种信息系统的主要任务是从Oracle的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的Oracle数据库着重考虑下述因素或参数:
(1)是否采用B*-索引或者bitmap索引?
(2)是否采用并行SQL查询以提高查询效率?
(3)是否采用PL/SQL函数编写存储过程?
(4)是否有必要建立并行数据库,来提高数据库的查询效率。 ;9.2.2 SQL语句优化的具体方法 ;;;;;;;; 4.SQL子查询的调整
(1)关联子查询和非关联子查询
非关联查询的开销——非关联查询时子查询只会执行一次,而且结果是排序好的,并保存在一个Oracle的临时段中,其中的每一个记录在返回时都会被父查询所引用。在子查询返回大量的记录的情况下,将这些结果集排序,以及将临时数据段进行排序会增加大量的系统开销。
关联查询的开销——对返回到父查询的记录来说,子查询会每行执行一次。因此,必须保证任何可能的时候子查询用到索引。;(2)在子查询中慎重使用IN或者NOT IN语句
在子查询中慎重使用IN或者NOT IN语句,使用where (NOT)exists的效果要好的多。
①带IN的关联子查询是多余的,因为IN子句和子查询中相关的操作的功能是一样的。
②为非关联子查询指定EXISTS子句是不适当的,因为这样会产生笛卡尔乘积。
③尽量不要使用NOT IN子句。;(3)慎重使用视图的联合查询
慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。
可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。;9.3.2 物理I/O的调整 ; 内存参数的调整主要是指Oracle数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
1.共享池
共享池由两部分构成:共享SQL区和数据字典缓冲区。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。;(1)数据库管理员通过执行下述语句,来查看共享SQL区的使用率。
select (sum(pins-reloads))/sum(pins) Lib Cache from v$librarycache;
共享SQL区的使用率应该在90%以上,否则需要增加共享池的大小。
(2)数据库管理员可以执行下述语句,查看数据字典缓冲区的使用率。
select (sum(-getmisses-usage-fixed))/sum(gets) Row Cache from v$rowcache;
数据字典缓冲区的使用率也应该在90%以上,否则需要增加共享池的大小。 ;2.数据缓冲区
数据库管理员可以通过下述语句,来查看数据库数据缓冲区的使用情况。
SELECT name, FROM v$sysstat WHERE name IN (db block gets,consistent gets,physical reads);
根据查询出来的结果可以计算出数据缓冲区的使用命中率:
数据缓冲区的使用命中率=1 –( physical reads/(db block gets + consistent gets))
这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。;3.日志缓冲区
数据库管理员可以通过执行下述语句,查看日志缓冲区的使用情况。
select name,value from v$sysstat where nam
原创力文档


文档评论(0)