OLTP 系统强调数据库内存效率,强调内存各类指标的命令率,强调绑定变量,强调并发操做; 数据库
OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 缓存
OLTP与OLAP之间的比较: 并发
什么是OLTP 分布式
OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性很是高的系统,通常都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,通常看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction每每超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,就是很典型的OLTP数据库。 函数
OLTP系统最容易出现瓶颈的地方就是CPU与磁盘子系统。 性能
(1)CPU出现瓶颈常表如今逻辑读总量与计算性函数或者是过程上,逻辑读总量等于单个语句的逻辑读乘以执行次数,若是单个语句执行速度虽然很快,可是执行次数很是多,那么,也可能会致使很大的逻辑读总量。设计的方法与优化的方法就是减小单个语句的逻辑读,或者是减小它们的执行次数。另外,一些计算型的函数,如自定义函数、decode等的频繁使用,也会消耗大量的CPU时间,形成系统的负载升高,正确的设计方法或者是优化方法,须要尽可能避免计算过程,如保存计算结果到统计表就是一个好的方法。 优化
(2)磁盘子系统在OLTP环境中,它的承载能力通常取决于它的IOPS处理能力. 由于在OLTP环境中,磁盘物理读通常都是db file sequential read,也就是单块读,可是这个读的次数很是频繁。若是频繁到磁盘子系统都不能承载其IOPS的时候,就会出现大的性能问题。 网站
OLTP比较经常使用的设计与优化方式为Cache技术与B-tree索引技术,Cache决定了不少语句不须要从磁盘子系统得到数据,因此,Web cache与Oracle data buffer对OLTP系统是很重要的。另外,在索引使用方面,语句越简单越好,这样执行计划也稳定,并且必定要使用绑定变量,减小语句解析,尽可能减小表关联,尽可能减小分布式事务,基本不使用分区技术、MV技术、并行技术及位图索引。由于并发量很高,批量更新时要分批快速提交,以免阻塞的发生。 spa
OLTP 系统是一个数据块变化很是频繁,SQL 语句提交很是频繁的系统。 对于数据块来讲,应尽量让数据块保存在内存当中,对于SQL来讲,尽量使用变量绑定技术来达到SQL 重用,减小物理I/O 和重复的SQL 解析,从而极大的改善数据库的性能。 翻译
这里影响性能除了绑定变量,还有多是热快(hot block)。 当一个块被多个用户同时读取时,Oracle 为了维护数据的一致性,须要使用Latch来串行化用户的操做。当一个用户得到了latch后,其余用户就只能等待,获取这个数据块的用户越多,等待就越明显。 这就是热快的问题。 这种热快多是数据块,也多是回滚端块。 对于数据块来说,一般是数据库的数据分布不均匀致使,若是是索引的数据块,能够考虑建立反向因此来达到从新分布数据的目的,对于回滚段数据块,能够适当多增长几个回滚段来避免这种争用。
什么是OLAP
OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是咱们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,由于一条语句的执行时间可能会很是长,读取的数据也很是多。因此,在这样的系统中,考核的标准每每是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。
磁盘子系统的吞吐量则每每取决于磁盘的个数,这个时候,Cache基本是没有效果的,数据库的读写类型基本上是db file scattered read与direct path read/write。应尽可能采用个数比较多的磁盘以及比较大的带宽,如4Gb的光纤接口。
在OLAP系统中,常使用分区技术、并行技术。
分区技术在OLAP系统中的重要性主要体如今数据库管理上,好比数据库加载,能够经过分区交换的方式实现,备份能够经过备份分区表空间实现,删除数据能够经过分区进行删除,至于分区在性能上的影响,它可使得一些大表的扫描变得很快(只扫描单个分区)。另外,若是分区结合并行的话,也可使得整个表的扫描会变得很快。总之,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提升,有时候分区会带来性能上的提升,有时候会下降。
并行技术除了与分区技术结合外,在Oracle 10g中,与RAC结合实现多节点的同时扫描,效果也很是不错,可把一个任务,如select的全表扫描,平均地分派到多个RAC的节点上去。
在OLAP系统中,不须要使用绑定(BIND)变量,由于整个系统的执行量很小,分析时间对于执行时间来讲,能够忽略,并且可避免出现错误的执行计划。可是OLAP中能够大量使用位图索引,物化视图,对于大的事务,尽可能寻求速度上的优化,没有必要像OLTP要求快速提交,甚至要刻意减慢执行的速度。
绑定变量真正的用途是在OLTP系统中,这个系统一般有这样的特色,用户并发数很大,用户的请求十分密集,而且这些请求的SQL 大多数是能够重复使用的。
对于OLAP系统来讲,绝大多数时候数据库上运行着的是报表做业,执行基本上是聚合类的SQL 操做,好比group by,这时候,把优化器模式设置为all_rows是恰当的。 而对于一些分页操做比较多的网站类数据库,设置为first_rows会更好一些。 但有时候对于OLAP 系统,咱们又有分页的状况下,咱们能够考虑在每条SQL 中用hint。 如:
Select /*+first_rows(10) */ a.* from table a;
分开设计与优化
在设计上要特别注意,如在高可用的OLTP环境中,不要盲目地把OLAP的技术拿过来用。
如分区技术,假设不是大范围地使用分区关键字,而采用其它的字段做为where条件,那么,若是是本地索引,将不得不扫描多个索引,而性能变得更为低下。若是是全局索引,又失去分区的意义。
并行技术也是如此,通常在完成大型任务时才使用,如在实际生活中,翻译一本书,能够先安排多我的,每一个人翻译不一样的章节,这样能够提升翻译速度。若是只是翻译一页书,也去分配不一样的人翻译不一样的行,再组合起来,就不必了,由于在分配工做的时间里,一我的或许早就翻译完了。
位图索引也是同样,若是用在OLTP环境中,很容易形成阻塞与死锁。可是,在OLAP环境中,可能会由于其特有的特性,提升OLAP的查询速度。MV也是基本同样,包括触发器等,在DML频繁的OLTP系统上,很容易成为瓶颈,甚至是Library Cache等待,而在OLAP环境上,则可能会由于使用恰当而提升查询速度。
对于OLAP系统,在内存上可优化的余地很小,增长CPU 处理速度和磁盘I/O 速度是最直接的提升数据库性能的方法,固然这也意味着系统成本的增长。
好比咱们要对几亿条或者几十亿条数据进行聚合处理,这种海量的数据,所有放在内存中操做是很难的,同时也没有必要,由于这些数据快不多重用,缓存起来也没有实际意义,并且还会形成物理I/O至关大。 因此这种系统的瓶颈每每是磁盘I/O上面的。
对于OLAP系统,SQL 的优化很是重要,由于它的数据量很大,作全表扫描和索引对性能上来讲差别是很是大的。