当前主流的应用软件系统从使用模式来说可以分为简单划分为两种,即联机事务处理系统和联机分析处理系统,本文简单就这两种类型的Oracle数据库应用的特点、性能关注点以及调整优化的策略进行总结和注意事项说明。简要概述如下。
一、 数据库业务类型分类
从数据库业务的使用模型来分类,数据处理的类型可以分成两大类:
联机事务处理OLTP(on-line transaction processing)
联机分析处理OLAP(On-Line Analytical Processing)。
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,以完成当前小事务处理为目的,例如银行交易系统和网购系统。
OLAP是数据仓库系统的主要应用,主要是统计分析业务,提供对历史数据进行多维度的统计分析,主要服务于决策支持。
二、 系统特点
OLTP 系统关注的是数据库内存效率,需要优化内存的命令率,强调绑定变量,优化并发操作;OLAP 系统则偏重数据的统计分析,强调SQL执行市场,强调磁盘I/O,强调分区等。
OLTP与OLAP之间特点的比较如下:
对比项
OLTP
OLAP
用户规模
用户数量多,普通操作人员和基层管理人员为主
用户数量少,决策人员和高级管理人员为主
业务类型
面向应用为主的日常业务,写操作为主。
面向主题为主的统计分析业务,读操作为主。
数据对象
面对当前的最新数据,读写的记录数较少,实时更新操作,二维数据为主
面对历史数据,针对历史的数据进行操作,读写的数据记录较多,多维操作为主
业务规模
大量用户进行实时提交的小事务为特点
少量用户进行的复杂业务事物为特点
数据规模
数据库规模GB级别以上
数据库规模GB级别,甚至TB级别
三、 常见瓶颈问题 与优化策略
(一) OLTP系统
1. OLTP性能关注指标
OLTP,全称为联机事务处理(Online Transaction Processing),其特点是事务性非常高,一般都是高可用的在线系统,以小的事务以及小的查询为主,其每秒执行的Transaction以及Execute SQL的数量是其性能指标的主要指标。数据库每秒处理的Transaction达到几百以上,Select 语句的执行量每秒上千至万。典型的OLTP系统有电子商务系统和银行。
2. OLTP系统的瓶颈点
OLTP系统最容易出现瓶颈的地方就是CPU资源与IO资源。
(1)CPU资源主要消耗在逻辑读总量、自定义的函数或者存储过程上
这样的系统中单个语句执行速度虽然很快,但是执行次数非常多,同样会导致很大的逻辑读总量。要减少单个语句的逻辑读,或者是减少执行次数。自定义函数、decode等的频繁使用,也会消耗大量的CPU资源用户这些调用的解析,要尽量避免调用自定义的函数和计算过程。
(2)磁盘子系统在OLTP环境中,它的瓶颈取决于它的IOPS处理能力.
因为在OLTP环境中,磁盘物理读一般都是db file sequential read,也就是单块读,虽然数据量不大,但是操作非常次数非常频繁。超过磁盘的IOPS的时候系统比如面临IO的性能问题。
3. OLTP系统的优化策略
OLTP常用的设计与优化方式为:Cache技术、B-tree索引技术、绑定变量和热块争用处理
(1)Cache技术使得数据可以从内存获取,相对于从磁盘子系统获得数据有数量级上的响应优势,Oracle data buffer、应用服务器的buffer以及Web cache优化是提高OLTP系统的好对策。
(2)B-tree索引优先考虑。简洁语句格式,减少语句解析,尽量减少表关联,尽量减少分布式事务,基本不使用分区技术、物化视图技术、并行技术及位图索引。
(3)OLTP 系统的SQL语句提交非常频繁,所以数据库的变更也非常频繁。尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用变量绑定技术来达到SQL 重用,减少物理I/O 和重复的SQL 解析。
(4)注意热块问题争用。当数据库有争用是,Oracle使用Latch来机制串行化用户的操作。Latch机制保证了数据库的数据一致性,但是Latch机制会导致用户等待,获取这个数据块的用户越多,Latch等待就越明显,当Latch数量分配不足时候,CPU就会进行频繁的SPIN,到达阀值以后,语句暂时进入休眠,就会导致CPU进行上下文切换(contex switch),这时候CPU要保存当前进程的运行时信息如堆栈、信号量等数据结构,引入后续进程的状态信息,处理完成后再切换回原来的进程。这将消耗巨大的CPU开销。这种热块争用可能是数据块,也可能是回滚端块。 对于数据块来讲,通常是数据库的数据分布不均匀导致,如果是索引的数据块,可以考虑创建反向索引来达到重新分布数据的目的,对于回滚段数据块,可以适当多增回滚段来减少这种争用。
(二) OLAP系统
1. OLAP系统性能关注指标
OLAP也叫DSS决策支持系统,等同于数据仓库。OLAP的业务操作往往非常复杂,执行语句虽然不多,但是单条语句的耗时长,读取数据量大,IO子系统的吞吐量(带宽)是重要考核标准。
2. OLAP系统的瓶颈点
OLAP操作往往对上百万甚至上亿条记录进行统计分析,数据读取量上GB甚至几十GB以上,受限于数据库内存,通过 Cache来缓存基本没有效果。
此时需要突破的瓶颈是IO子系统的吞吐量,而该吞吐量首先受限于磁盘的个数或者磁盘系统的阵列策略。
3. OLAP系统的优化策略
在OLAP系统中,常使用分区技术、并行技术。
(1)分区技术在OLAP系统中的获益主要体现在数据库管理上,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提高,有时候分区会带来性能上的提高,有时候会降低。下列情况可以使得效率提升。如表分区可以减少表扫描的IO,结合并行的话,全表扫描的效率也提高。
(2)并行技术如RAC中的多节点的同时扫描,把任务分布在多个RAC的节点。
(3)由于Cache作用效果不大,OLAP在内存上可优化的余地很小,增加CPU 处理速度和磁盘I/O 速度或者数量,或者优化磁盘阵列都能直接的提高数据库性能,提高带宽等。但成本大,需要额外硬件投入。
四、 其他注意事项:
(1)分区技术要慎用,对分区索引有性能提高的促进。但是对不使用分区索引的语句时分区技术并无性能提高,甚至造成性能降低,如全局索引和本地索引。
(2)并行技术适用于大型的任务时候才有性能提高,小事务的并行计算甚至会导致性能下降,因为事务并行分配同样需要开销资源。
(3)绑定变量的策略适用于OLTP系统,不适用于OLAP系统中。OLAP系统因为整个系统的语句执行数量很小,分析时间远远小于执行时间。OLTP系统通常用户并发数很大,用户的请求十分密集,通过使用绑定变量可以使得SQL实现重用。
(4)为避免阻塞和死锁,不建议用在OLTP环境中使用位图索引。物化视图和触发器也类似,在DML频繁的OLTP系统上,很容易成为瓶颈,甚至是Library Cache等待;而位图索引适用在OLAP则可能会因为使用恰当而提高查询性能。OLTP注重的是快速提交处理,OLAP注重的是大吞吐处理。
(5)对于OLAP系统,SQL 语句逻辑优化贡献大,因为它的数据量很大,是否全表扫描和索引是否有效利用都将导致性能迥然不同。