OLAP、OLTPの比較

この記事はhttpsから転送されます://www.cnblogs.com/hhandbibi/p/7118740.html

OLTP与OLAP的介绍

数据处理大致可以分成两大类:OLTP(オンライントランザクション処理)、

OLAP(オンライン分析処理)。OLTP是传统的关系型データベース

主要应用,主に基本、日常業務,例:銀行取引。OLAP是数据仓库系统的

主要应用,複雑な分析操作をサポート,意思決定支援に焦点を当てる,そして、直感的で理解しやすいクエリ結果を提供します。

OLTP 系统强调数据库内存效率,メモリのさまざまな指標のコマンドレートを強調します,バインド変数に重点を置く,並行操作を強調する;

OLAP 系统则强调数据分析,SQL実行市場を強調する,ディスクI / Oを強調する,パーティションなどを強調します。。

oltp_olap

OLTP,オンライントランザクション処理(オンライントランザクション処理)とも呼ばれます,非常にトランザクションシステムを表します,

一般的に可用性の高いオンラインシステム,小さなトランザクションと小さなクエリに焦点を当てる,そのシステムを評価するとき,一般看其每秒

执行的Transaction以及Execute SQL的数量。そのようなシステムでは,单个数据库每秒处理的Transaction

往往超过几百个,または数千,Selectステートメントの実行量は、1秒あたり数千または数万です。。典型的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技术并行技术及位图索引。なぜなら

并发量很高批量更新时要分批快速提交以避免阻塞的发生

OLTP 系统是一个数据块变化非常频繁SQL 语句提交非常频繁的系统对于数据块来说应尽

可能让数据块保存在内存当中对于SQL来说尽可能使用变量绑定技术来达到SQL重用减少

物理I/O 和重复的SQL 解析从而极大的改善数据库的性能

这里影响性能除了绑定变量还有可能是热快(hot block)当一个块被多个用户同时读取时

Oracle 为了维护数据的一致性需要使用Latch来串行化用户的操作当一个用户获得了latch后

其他用户就只能等待获取这个数据块的用户越多等待就越明显这就是热快的问题这种热快

可能是数据块也可能是回滚端块对于数据块来讲通常是数据库的数据分布不均匀导致,もしも

是索引的数据块可以考虑创建反向索引来达到重新分布数据的目的对于回滚段数据块可以

适当多增加几个回滚段来避免这种争用

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 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 的优化非常重要因为它的数据量很大做全表扫描和索引对性能

上来说差异是非常大的

其他

Oracle 10g以前的版本建库过程中可供选择的模板有

Data Warehouse (数据仓库)

General Purpose (通用目的一般用途)

New Database

Transaction Processing (事务处理)

Oracle 11g的版本建库过程中可供选择的模板有

一般用途或事务处理

定制数据库

数据仓库

个人对这些模板的理解为

联机分析处理(OLAP,On-line Analytical Processing)数据量大DML少使用数据

仓库模板

联机事务处理(OLTP,On-line Transaction Processing)数据量少DML频繁并行

事务处理多但是一般都很短使用一般用途或事务处理模板

决策支持系统(DDSDecision support system),典型的操作是全表扫描长查询

事务但是一般事务的个数很少往往是一个事务独占系统

返信を残します