一、定义:
OLTP(on-line transaction processing)联机事务处理:传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP(On-Line Analytical Processing)联机分析处理:数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
二、OLTP 和 OLAP 特点
OLTP的特点:
1、实时性要求高。
2、数据量不是很大,生产库上的数据量一般不会太大,而且会及时做相应的数据处理与转移。
3、交易一般是确定的,比如银行存取款的金额肯定是确定的,所以OLTP是对确定性的数据进行存取。
4、高并发,并且要求满足ACID原则。比如两人同时操作一个银行卡账户,比如大型的购物网站秒杀活动时上万的QPS请求。
OLAP的特点一般有:
1、实时性要求不是很高,比如最常见的应用就是天级更新数据,然后出对应的数据报表。
2、数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大。
3、OLAP系统的重点是通过数据提供决策支持,所以查询一般都是动态,自定义的。所以在OLAP中,维度的概念特别重要。一般会将用户所有关心的维度数据,存入对应数据平台。
三、OLTP 和 OLAP 的问题和优化方法
OLTP系统最容易出现瓶颈的地方就是CPU与磁盘子系统。
(1)CPU出现瓶颈常表现在逻辑读总量(逻辑读总量等于单个语句的逻辑读乘以执行次数)与计算性函数或者是过程上,单个语句的逻辑读或者执行次数,任何一个方面大都会导致逻辑读总量大。优化的方法就是减少单个语句的逻辑读,或者是减少它们的执行次数。另外,一些计算型的函数,如自定义函数、decode等的频繁使用,也会消耗大量的CPU时间,造成系统的负载升高,正确的设计方法或者是优化方法,需要尽量避免计算过程,如保存计算结果到统计表就是一个好的方法。
(2)频率超高的磁盘物理读超过磁盘子系统的IOPS处理能力,系统性能就会出现问题。磁盘物理读一般都是db file sequential read,也就是单块读,但是这个读的次数非常频繁。优化方式为Cache技术与B-tree索引技术,Cache决定了很多语句不需要从磁盘子系统获得数据,所以,Web cache与Oracle data buffer对OLTP系统是很重要的。另外,在索引使用方面,语句越简单越好,这样执行计划也稳定,而且一定要使用绑定变量,减少语句解析,尽量减少表关联,尽量减少分布式事务,基本不使用分区技术、MV技术、并行技术及位图索引。 因为并发量很高,批量更新时要分批快速提交,以避免阻塞的发生。
在OLAP系统中,常使用分区技术、并行技术。
分区技术在OLAP系统中的重要性主要体现在数据库管理上,比如数据库加载,可以通过分区交换的方式实现,备份可以通过备份分区表空间实现,删除数据可以通过分区进行删除,至于分区在性能上的影响,它可以使得一些大表的扫描变得很快(只扫描单个分区)。另外,如果分区结合并行的话,也可以使得整个表的扫描会变得很快。总之,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提高,有时候分区会带来性能上的提高,有时候会降低。对于OLAP系统来说,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL 操作,比如group by,这时候,把优化器模式设置为all_rows是恰当的。 而对于一些分页操作比较多的网站类数据库,设置为first_rows会更好一些。 但有时候对于OLAP 系统,我们又有分页的情况下,我们可以考虑在每条SQL 中用hint。 如:Select a.* from table a;
四、OLTP与OLAP之间的对比:
对比项 | OLTP | OLAP |
用户 | 操作人员、底层管理人员 | 决策人员,高级管理人员 |
功能 | 日常操作处理 | 分析决策 |
DB设计 | 面向应用 | 面向主题 |
数据 | 当前的,最新的细节的,二维的分立的 | 历史的,聚集的,多维的集成的统一的 |
存取 | 读/写数十条纪录 | 读上百万条记录 |
工作单位 | 简单的事务 | 负责的查询 |
用户数 | 上千个 | 上百万个 |
DB大小 | 100MB-GB | 100GB-TB |
时间要求 | 具有实时性 | 对时间的要求不高 |
主要应用 | 数据库 | 数据仓库 |