OLTP与OLAP数据库

根据业务处理不同把数据库分为两类,
联机事务处理系统(OLTP)联机分析系统(OLAP)决策支持系统(DSS)

0LTP

联机事务处理0LTP(On-line Transaction Processing),传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

此类系统专注于short on-line-tansactions 如INSERT, UPDATE, DELETE操作。通常存在此类系统中的数据都是以实体对象模型来存储数据,并满足3NF(数据库第三范式)。

0LTP的特点一般有:

  • 实时性要求高。
  • 数据量不是很大。
  • 交易一般是确定的,所以0LTP是对确定性的数据进行存取。
  • 并发性要求高并且严格地要求事务的完整、安全性。
0LAP

0LAP(On-line Analytical Processing)侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。
OLAP的特点一般有:

  • 实时性要求不是很高,很多应用顶多是每天更新一
    下数据。
  • 数据量大,因为0LAP支持的是动态查询,所以用户
    也许要通过将很多数据的统计后才能得到想要知道的信息.
    例如时间序列分析等等,所以处理的数据量很大。

0LTP和0LAP是两类完全不同的系统,对数据库的要求也截然不同。
通常来讲:

0LTP(在线事务处理系统)的用户并发数都很多,但他们只对数据库做较少的读写操作,返回的数据集很小,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。这两类系统在数据库的设计上是如此不同,甚至有些地方的设计貌似是相悖的。

比如0LTP系统强调数据库的内存效率,强调内存各种指标的命中率,强凋绑定变量,强调并发操作;

0LAP系统则强调数据分析,强调SQL执行时长,强调磁盘IO,强调分区等。

因为这些区别,在数据库设计的阶段,弄清楚数据库类型是至关重要的,只有在这个前提之下,才能够讨论数据库的具体设计,否则设计必然是盲目的,或者说设计出来的数据库可能造成瘫痪,系统资源严重被使用,系统过负荷运行,或者造成严重的等待事件。

0LTP、0LAP 内存效率与设计原则

0LTP,数据库内存设计显得很重要,如果数据都可以在内存中处理,那么数据库的性能无疑会提高很多。有些对处理速度要求很高的系统,已经采用了一些内存数据库,内存的设计通常是通过调整数据库服务配置和内存相关
的初始化参数来实现的,比较重要的几个是内存相关的参数,
包括SGA的大小(Data Buff,Shared Pool)、PGA大小(排序区,Hash区等)等,这些参数在一个0LTP系统里显得至关重要,0LTP系统是一个数据块变化非常频繁、SQL语句提交非常频繁的系统。对于数据块来说,应尽可能洼数据块保存在内存当中,对于SOL来说,尽可能使用变量绑定技术来达到SQL的重用,减少物理I/0和重复的sQL解析,能极大地改善数据库的性能。

关于一些初始化参数的设定的问题,没有一个确定的标准,这和每个数据库上运行的业务直接相关,能够确定这些参数值的唯一方法就是测试,先给这些参数设定一个经验值,然后通过搭建测试环境对数据库进行测试,通过一些性能报告(比如olacle的AWR或者staspack报告)作为依据,不断地调整这
些参数值,以达到最佳的性能,

OLTP数据库对实时性要求高,因此这就要求系统具有较高的SQL命中率99%以上,提高内存效率,尽量减少SQL语句的分析,绑定变量是把若干个或更多的SQL语句通过变量替换变成一个相同的sQL语句,使Oracle只对这条sQL语句进行一个硬解析,大大提高SQL运行效率。

没有绑定变量的SQL会对OLTP数据库造成极大的性能影响之外,还有一些因素也会导致数据库的性能下降,比如热块(hotblock)的问题,当一个块被多个用户同时读取的时候,OLTP为了维护数据的一致性,需要使用一种称为Iatch的东西来串行化用户的操作。当一个用户获得了这个Iatch后,其他的用户就只能被迫等待。获取这个数据块的用户越多,等待就越明显,就造成了这种热块问题。这种热块可能是数据块,也可能是回滚段块。对于数据块来讲,通常是数据块上的数据分布不均匀导致,如果是索引的数据块,可以
考虑创建反向索引来达到重新分布数据的目的,对于回滚段块。对于数据块来讲,通常是数据块上的数据分布不均匀导致,如果是索引的数据块,可以
考虑创建反向索引来达到重新分布数据的目的,对于回滚段
数据块,可以适当多增加几个回滚段来避免这种争用。

0LAP ,增加CPU处理速度和磁盘I/0速度是最直接的提高数据库性能的方式,但这将意味着系统成本的增加。实际上,用户对OLAP系统性能的期望远远没有对0LTP性能的期望那么高。
需要提高磁盘IO能力,内存的优化对0LAP来讲影响很小,联机分析处理数据库0LAP运行的报表程序,基本上都是对几亿条或者几十亿条数据进行聚合处理,这种海量的数据全部在内存中操作是很难的。同时也完全没有必要,因为这些数据块很少重用,缓存起来没有实际意义,倒是物理I/0相当大,这种系统的瓶颈往往是在磁盘I/0上面。

另一方面,由于OLAP数据库返回的数据集一般是大数据集,变量绑定可能会
让数据库选择不正确的执行计划,而是让数据库系统对每条SqL做硬分析,确切地知道谓词条件的值,作出正确的执行计划。