Oracle性能收集资料全

上传人:l**** 文档编号:127600184 上传时间:2020-04-03 格式:DOC 页数:25 大小:96.50KB
返回 下载 相关 举报
Oracle性能收集资料全_第1页
第1页 / 共25页
Oracle性能收集资料全_第2页
第2页 / 共25页
Oracle性能收集资料全_第3页
第3页 / 共25页
Oracle性能收集资料全_第4页
第4页 / 共25页
Oracle性能收集资料全_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《Oracle性能收集资料全》由会员分享,可在线阅读,更多相关《Oracle性能收集资料全(25页珍藏版)》请在金锄头文库上搜索。

1、弄清楚你的业务类型OLTP or OLAP在Oracle数据库系统中,很多人没有弄清楚自己的业务类型到底是什么,就在开始盲目的寻求优化方法,而往往是把OLAP的方法使用在OLTP上,或者是OLTP的方法使用在OLAP上。这样的使用,有的时候,对性能没有任何的提高,甚至是大大的影响了性能,得到适得其反的效果。所以,在优化系统之前,弄清楚自己的业务类型。OLTP (联机事务处理系统)也称为面向交易的处理系统,其基本特征是顾客的原始数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果。这样做的最大优点是可以即时地处理输入的数据,及时地回答。也称为实时系统(Real time System

2、)。衡量联机事务处理系统的一个重要性能指标是系统性能,具体体现为实时响应时间(Response Time),即用户在终端上送入数据之后,到计算机对这个请求给出答复所需要的时间。OLAP(联机分析处理系统)联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。 当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analy

3、tical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 OLTP与OLAP之间的比较:OLTPOLAP用户操作人员,低层管理人员决策人员,高级管理人员功能日常操作处理分析决策DB 设计面向应用面向主题数据最新的,细节的,二维的,分立的历史的,聚集的,多维的,集成的存取规模读/写数条(甚至数百条)记录读上百万(甚至上亿)条记录操作频度非常频繁(以秒计)比较稀松(以小时甚至以周计)工作单位严格的事务复杂的查询用户数数百个-数千万个数个-数

4、百个DB 大小100MB-GB100GB-TB1、什么是OLTP OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的transaction以及execute sql的数量。在这样的系统中,每秒处理的transaction往往超过几百个,或者是几千个,select 语句的执行量每秒几千甚至几万个。典型的OLTP系统如电子商务系统,银行,证卷等等,如美国ebay的业务数据库,就是很典型的OLTP数据库。 OLTP系统最容易出现的瓶颈就是CPU与磁

5、盘子系统。cpu则取决于逻辑读以及内部调用,如函数等等。一个执行频繁的SQL语句,如果每个语句可以减少很少的逻辑读,也相当于优化了一些逻辑读很差的大型语句。很多人不感觉不到这里的作用,觉得一个语句几十个逻辑读,执行时间基本为0,就不需要优化了,其实,只要他的执行次数非常频繁,而且有优化的余地,就一定要优化,如减少一定的逻辑读或者降低执行次数,都是优化方法。 另外,一些计算性的函数,如sum,count,decode被非常频繁的使用,也是非常消耗cpu的,我遇到一个系统,因为一个sql语句,大量的使用了sum与decode进行行列转换,结果这一个语句就耗费了整个机器一半以上的CPU。 那么,在一

6、般的OLTP系统中,如果不考虑我上面说的函数问题,那么,逻辑读乘以执行次数,决定了cpu的消耗程度,如一个语句,每秒执行次数为500次,每个逻辑读为15,但是,通过优化,能让每个语句的逻辑读从15降到10,那么,每秒的逻辑读就可以减少500*5=2500个,其实就是相当于优化了一个执行频率为每秒1次,每次逻辑读为2500个的语句(注意,2500个逻辑读,在oltp系统是非常差的语句)。再如,假定一个1GHZ的cpu每秒能正常处理的逻辑读是100,000个,如果是10个逻辑读一个的语句,每秒可以处理10,000个,而1000个逻辑读一个的语句,每秒则只能处理100个。 同以上道理,物理读乘以执行

7、次数,则决定了存储子系统的处理能力,在一个OLTP环境中,物理读一般都是db file sequential read决定的,也就是单块读,一个典型的OLTP系统,db file sequential read应当基本等于磁盘子系统的读的IOPS。而磁盘子系统的IOPS处理能力,与cache命中率以及磁盘个数有很大的关系。我的一些文章中,也分析到了这些问题,如一个15K转速的磁盘,每秒最多能处理的iops达到150个,基本就是极限了,如果cache不命中,那么100个磁盘,最多能处理的IOPS仅仅是15000个(但是,实际上,还基本达不到这个值)。 OLTP最常用的技术就是cache技术与bt

8、ree索引,cache决定了很多语句不需要从磁盘子系统获得数据,所以,web cache与oracle data buffer对OLTP系统是很重要的。另外,在索引使用方面,语句是越简单越好,这样执行计划也稳定,而且一定要使用绑定变量,减少语句解析,尽量减少关联。其它方面,基本不使用分区技术,MV技术,并行技术以及位图索引,因为并发量很高,批量更新可能要尽量快速提交避免阻塞的发生。 在ebay的数据库设计中,有一个很重要的点就是,数据库只负责存放数据,业务逻辑尽量在业务层实现,因为数据库扩展是困难的,而应用服务器扩展是简单的。其实,也就是说,在高可用的OLTP环境中,数据库使用越简单的功能越好

9、。2、什么是OLAP OLAP,也叫联机分析(Online Analytical Processing),有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一个语句的执行时间可能会非常长,读取的数据也非常多。所以,这样的系统中,考核的标准往往决定于磁盘子系统的吞吐量。 磁盘子系统的吞吐量则直接取决于磁盘的个数,这个时候,cache基本是没有效果的,这个时候数据库的读写基本上是db file scattered read与direct path read/write。在我前面的一些文章中描述过,如果一个15K的磁盘的IO量每秒13M,那么,100

10、个磁盘,最多能提供的吞吐量则是1300M/s(实际上,也基本达不到这个值)。如果磁盘个数足够的话,还需要考虑采用比较大的带宽,如4GB的光纤接口。 在OLAP系统中,常使用的技术有分区技术,并行技术。如分区技术可以使得一些大表的扫描变得很快(只扫描单个分区),而且方便管理。另外,如果分区结合并行的话,也可以使得整个表的扫描也会变得很快。并行技术除了与分区技术结合外,在oracle 10g中,与rac结合实现多节点的同时扫描,效果也非常不错,把一个任务,如select的全表扫描,平均的分派到多个rac的节点上去。 在OLAP系统中,不需要使用绑定变量,因为整个系统的执行量很少,分析时间对于执行时

11、间来说,可以忽略,而且避免出现错误的执行计划。但是OLAP中可以大量使用位图索引,物化视图,对于大的事务,尽量的寻求速度上的优化,没有必要象OLTP需要快速提交,甚至要刻意减慢执行的速度。3、总结 特别是在高可用的OLTP环境中,不要盲目的把OLAP的技术拿过来用,如分区技术,如果不是大范围的使用了分区关键字作为where条件,而采用其它的字段作为where条件,那么,如果是本地索引,你将不得不扫描多个索引,而性能变的更为低下。如果是全局索引,那分区的意义又何在,只是多出一份分区技术的license而已。 并行技术也是如此,一般是在大型任务的时候才使用,好比说,实际生活中,一个比较大型的工作,

12、如翻译一本书,你可以先安排多个人,每个人翻译不同的章节,这样是可以提高翻译速度,但是,你现在只是翻译一页,你也去分配不同的人翻译不同的行,再组合起来,这个时间,你一个人或者早就翻译完了。 位图索引在我前几篇文章中有交代,如果用在oltp环境中,可能因为阻塞范围太大,很容易阻塞与死锁,但是,在olap环境中,可能会因为其特有的特性,提高olap的查询速度。mv也是基本一样,包括触发器等等,在dml频繁的oltp系统上,很容易成为瓶颈,而在olap环境上,则可能会因为使用恰当而提高查询速度。http:/ 和 建议什么是索引索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据; Ora

13、cle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引;索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。一、oracle的索引陷阱一个表中有几百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这主要可能是oracle的索引限制造成的。 oracle的索引有一些索引限制,在这些索引限制发生的情况下,即使已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销造成性能更差。下面是一些常见的索引限制问题。1、使用不等于操作符

14、(, !=)下面这种情况,即使在列dept_id有一个索引,查询语句仍然执行一次全表扫描 select * from dept where staff_num 1000; 但是开发中的确需要这样的查询,难道没有解决问题的办法了吗? 有! 通过把用 or 语法替代不等号进行查询,就可以使用索引,以避免全表扫描:上面的语句改成下面这样的,就可以使用索引了。 select * from dept shere staff_num 1000; 2、使用 is null 或 is not null使用 is null 或is nuo null也会限制索引的使用,因为数据库并没有定义null值。如果被索引的

15、列中有很多null,就不会使用这个索引(除非索引是一个位图索引,关于位图索引,会在以后的blog文章里做详细解释)。在sql语句中使用null会造成很多麻烦。 解决这个问题的办法就是:建表时把需要索引的列定义为非空(not null)3、使用函数如果没有使用基于函数的索引,那么where子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。下面的查询就不会使用索引: select * from staff where trunc(birthdate) = 01-MAY-82; 但是把函数应用在条件上,索引是可以生效的,把上面的语句改成下面的语句,就可以通过索引进行查找。 select * from staff where birthdate (to_date(01-MAY-82) + 0.9999); 4、比较不匹配的数据类型比较不匹配的数据类型也是难于发现的性能问题之一。下面的例子中,dept_id是一个varchar2型的字段,在这个字段上有索引,但是下面的语句会执行全表扫描。 select *

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号