`
oboaix
  • 浏览: 268683 次
社区版块
存档分类
最新评论

数据分析系统性能调整(转)

阅读更多
 

 

                                     数据分析系统性能调整

  银行数据大集中之后,业务部门越来越迫切地希望能从现有的数据中找到对开展业务有价值的信息,提供更多的辅助功能。在此背景下,出现了各种各样的分析系统,有的银行正在规划数据仓库(DW)的开发,有些银行已开发了客户关系管理(CRM)系统。

  DW与CRM都以数据分析为基础,有的称之为决策支持系统(DSS),有的称之为商务智能(BI)。但无论是CRM还是DW,都不容易实现,即便在欧美发达国家已经有了成功的实践经验,国有四大商业银行的账务数据量之大和客户数之多可能是欧美任何一家大银行都无法相比的。在欧美,如果银行的客户数或账户数超过一千万就是大型银行了,与我国四大国有商业银行的一些省级分行的数据量相当。

  要在四大国有商业银行实施数据分析系统,即使使用最先进的计算机设备,最先进的应用系统,最科学的算法,都不得不面临一个共同的问题——性能调整。


  一、数据分析系统与联机交易系统性能的度量区别

  数据分析系统对响应速度的要求虽然没有联机交易系统高,但也有一定的业务要求,每天增量的数据转换、装载、抽取、更新等必须在规定许可的时间内处理完。

  响应时间和吞吐量仍是数据分析系统最为关注的两个问题,与传统的OLTP系统不同的是:
  1.OLTP系统重在联机事务处理的响应速度、吞吐量;数据分析系统重在查询,只有少量的联机事务处理,其吞吐量主要表现为单位时间内允许的查询数。
  2.OLTP系统的查询交易一般仅返回一条或很少的记录;数据分析系统的查询有两个响应  http://www.csai.cn  ①从提交查询的时刻到第一条记录返回给最终用户时刻之间的时间,②从查询提交到返回所有记录之间的时间。


  二、数据分析系统性能调整的过程

  1.首先建立并定义性能指标。在系统正式投入生产之前就有明确的性能需求,数据量与要求实现的功能决定了要采用的系统平台。
  2.制定并实施性能监控方案。如什么时候监控,监控的周期,并及时记录监控的结果(包括各应用程序运行时各类资源的占用情况、响应速度、各数据表的数据量及访问频率等)。
  3.根据监控记录分析各度量元素(响应速度、吞吐量、CPU、内存、I/O等)是否满足预期定义的指标。
  4.确定主要约束是CPU、内存、网络,还是I/O,如CPU已达到或超过85%的利用率等。
  5.确定可以调整的资源。了解哪些方面可负担得起性能改进,哪些资源可承受附加的负荷。
  6.调整数据库配置。每次更改一个,最好不要同时更改多个参数。
  7.如果调整数据库配置不起作用,则应调整操作系统或硬件配置。
  以上是一个重复的过程。


  三、应用设计

  性能调整不仅是系统管理员的事,更需要应用开发人员的配合。不好的应用设计会吞噬掉机器的性能。

  1.使用存储过程

  为了提高处理性能,应尽可能采用存储过程而不采用嵌入SQL。存储过程主要有以下优点:
  (1)同发出单一的SQL语句或发送整块的PL/SQL文本到服务器相比,信息只需发送一次,减少了交互,通过网络传送的信息量较少。
  (2)存储过程经创建、分析、认证、编译等处理后,存放在数据库管理系统(DBMS)服务器,SQL语句是静态的,可以即时调用,执行时不需要再编译。如果存储过程已经在共享内存中,就不需要从磁盘中读取,可以立即执行。
  (3)减少对内存的需求。多个用户执行时,只需将过程的单个拷贝即可,多用户共享同样的代码。
  (4)连续的执行以较小的开销实现,从而改善性能。动态SQL每次运行都需要较大的预处理开销。与表和索引一样,系统可以收集存储过程的统计信息,优化器可以创建最合适的访问计划。

  有数据表明,实现同一个功能,采用存储过程只需采用嵌入SQL的20%的时间。
使用存储过程还比较安全,存储过程的执行需要有该存储过程定义者或所有者的权力,这样就限制了用户能够执行的数据库操作。同时,使用存储过程还能提高软件开发的生产率,可以把存储过程看成面向对象设计中的经过封装的类,其他存储过程或应用程序为完成某个功能,可以继承该存储过程而不需要重写SQL语句。如果需要修改该存储过程功能,也不必对所有继承该存储过程的应用进行修改,可使修改的工作量降到最小,保证了应用程序的完整性与一致性。另外,存储过程也是可重用的单元,对提高可靠性也有所帮助。

  2.使用C程序设计语言作为补充

  不要使用C++程序设计语言处理数据,更不要使用Java程序设计语言。在所有的高级程序设计语言中,C程序设计语言的运行效率是公认的,可以使用C程序设计语言作为补充。存储过程有自身的缺陷,如编程语言SQL功能较差,与编程环境集成不够,移植性差,能提供的内部功能函数有限,执行过程中能提供的信息有限,不便调试等,对于一些特定的业务需求目标和数据的具体情况,可能用嵌C更好。

  3.建立索引

  建索引是提高数据访问效率的重要途径,但建索引有时并不一定能起到作用,索引不能满足未知需求,有时会适得其反,降低系统性能。关于索引,可归纳出以下几点:
  (1)索引数尽量少。当要在一个合理的时间内结束查询时,应避免添加索引。过多的索引会降低更新操作的速度并消耗额外的空间,使磁盘有效使用率降低,增加系统的复杂性和管理成本。低速查询不一定表示数据库或索引有问题,很可能是程序有问题。
  (2)基数较大的列很适合用来做索引。如果索引的惟一值有限(如<100),则不宜使用索引。
  (3)最好不选择大的列作索引。
  (4)考虑到管理上的开销,应避免在索引中使用多于 5 个的列,避免覆盖多个查询的大型索引。
  (5)对于多列索引,将查询中引用最多的列放在定义的前面。
  (6)添加与已有索引相似的索引会给优化器带来更多的工作,降低更新操作的速度。如果需要,可以修改已有的索引,使其包含附加的列。
  (7)在经常进行连接,但没有指定为外键的列上建立索引。
  (8)在频繁进行排序或分组的列上建立索引。
  (9)在需要时建群集索引。群集索引允许对数据页采用更线性的访问模式,允许更有效的预取,并且有助于避免排序。这样查询操作会更快,但插入操作会慢。适合插入更新频率不高的表。
  (10)确保最优的索引使用。

  4.优化查询

  优化查询的出发点是如何减少查询的资源利用:减少I/O,减少运算量。可以用Set Explain命令分析各种查询语句的效率。
  (1)把频繁使用的小表放在内存或高速缓存中,可以明显减少I/O。
  (2)减少所读的行数和所读或更新的列。如,仅读取满足条件的第一条记录,仅读取或更新必须的列。
  (3)用临时表缩小查询范围。
  (4)尽量避免子查询和明确关联的子查询。
  (5)避免复杂规则表达式。
  (6)尽量使用数据库引擎提供的函数,如:sum,avg,min,max。
  (7)尽量使用连接而不用嵌套循环,避免连接长字符串。
  (8)尽量用Where缩小连接范围。
  (9)避免不必要的大表的全表搜索。

  5.数据结构与算法设计

  (1)尽量采用整数类型

  整数是最常用的数据类型,在运算字符串变量时计算机先把字符串中的每一个字符逐一转换为整数,然后再对每一个整数分别进行运算。计算机软件处理整数的效率要比处理字符串快2n倍,其中n是字符串中字符的个数。

  所以,在设计表结构时,一些计算时频繁用到的字段,如分支机构代码、系统用户代码、客户代码等,应尽量采用整数类型。

  (2)少用可变长字符串

   对少于或等于30个字节的字段,应避免使用可变长字符串(VARCHAR)数据类型。在这种情况下,VARCHAR类型通常会浪费空间,所以建议使用CHAR 类型。如果数据量很大,空间的浪费往往会对查询时间造成影响。

  (3)数据模型

  为了减少数据冗余,数据建模时一般都需要规格化达到第三范式,如果需要冗余也是因为外键关系和数据引用完整性的需要。适当的非规格化虽然需要占用更多的空间,但通过减少频繁的连接、聚集和推导可以提高数据查询的性能。例如,客户经理号与客户经理名,客户经理名依赖客户经理号,如果在客户经理业绩表中仅有客户经理号,在查询客户经理业绩时就需要做表的关联,从而降低查询响应速度。非规格化以数据更新和数据空间的损失为代价换取数据访问的优化。一般的非规格化形式有:列复制,创建数据阵列,预连接表,预聚集数据。

  (4)算法设计

  良好的算法,对提高性能有很大的帮助。对于一个业务功能,可以用多种算法去实现,因此应该评估每种算法的执行效率,从而选择最优算法。

  这里说一下排序。是排序,就要耗费资源,所以应尽量减少排序,避免不必要的排序,简化排序。可以将数据放在临时表中以避免排序,减少所需排序的行数,用简单关键字排序,排序较少或较小的列,以简化排序。

  如果要排序应尽量使用内排序,避免使用外排序。外排序和内排序相比较要慢很多,而且磁盘排序会消耗临时表空间中的资源。

  四、数据库系统参数调整

  OLTP系统为了达到更新交易吞吐量的最大化,一般使用缓冲日志,增加物理日志长度,最大化写入缓冲百分比。为防止任何DSS类型的查询占用系统资源,可通过将相关并行查询参数配置设为较小值以限制并行查询的资源(如Informix的PDQPRIORITY、Oracle的PQO并行查询选项、DB2的INTRA_PARALLEL、CURRENT DEGREE等)。

  要使查询引擎处理的查询数最大化(吞吐量),以Informix为例,可以将相关的并行查询参数设为PDQPRIORITY≤25%。

  要使单个查询的处理时间最小化(响应速度),可设置PDQPRIORITY=50%,最好采用快速CPU多处理器。

  以上看起来似乎有些矛盾,但应根据实际情况平衡优先级。在不同的运行时间或针对不同的执行任务,使用不同的设置。例如,日常工作时间用户数较多时,将PDQPRIORITY设置为较低,同时限制一些大数据量的查询,大数据量的查询可以放在非工作时间做,可设置较高的PDQPRIORITY。

  一些数据库管理系统允许用户设置页面大小,如DB2,对于OLTP应用程序采用较小的页面更为可取,这样消耗的缓冲池中的空间更少。对OLAP应用程序,通常使用较大页面,可以减少在读取特定数量的行时发出的I/O请求的数量。较大的页面还可以减少索引中的层数。但是,如果行长度小于页面大小的1/255,则每页中都将存在浪费的空间,因为每页最多只能有255行(对于索引数据页不适用)。在这种情况下,采用较小的页面大小或许更合适一些。

  DB2、Informix、Oracle都有许多参数可以调整,这里不一一叙述。

  五、硬件系统方面的考虑

  对于数据分析系统而言,由于系统用户较少,网络一般不会成为瓶颈。所以系统方面主要考虑处理器、内存和磁盘,原则是并行性相较于速度而言对提高性能更有效。

  对于大型分块表,使用多CPU可以并行搜索每个分块。增加CPU个数可以支持更多的用户数并增加并行性。CPU越快,越能支持复杂查询和大型数据库。处理器的缓冲区越多就越快,多层缓冲可以帮助平衡处理器负荷。

  一般来说,处理器、内存越多越好,但在现实环境中,数据处理的瓶颈常在输入/输出上,存储器与计算机间的数据传输速度比计算机运算速度一般慢2~3个数量级,磁盘速度的提高远远落后于CPU。我们在多个数据分析系统中发现存在I/O瓶颈。

  系统中磁盘利用率一般不应超过45%。磁盘除了考虑磁盘机速度、控制器与通道速度外,还要考虑当前和最大驱动器数(磁盘多多益善,多些小驱动器比少些大驱动器好,新驱动器较快但较大)。

  如果为了提高可靠性使用了RAID磁盘设备,为提高I/O性能,最好采用RAID10而不是RAID5。在DB2中可以用DB2_PARALLEL_IO注册表变量,强制对由多个物理磁盘组成的单个RAID容器表空间执行并行I/O。

  使用裸设备、对存储空间分块可以显著提高系统性能。

  1.使用裸设备

  I/O操作有两种方式:文件系统或cookied file(熟文件)和裸设备Raw I/O(或原始设备、生设备)。

  文件系统又分为缓冲(Buffered)I/O、内存映射(Memory Mapped)I/O、DIO、CIO。以往最常用的文件系统为Memory Mapped I/O、Buffered I/O。DIO可以在文件系统级越过caching,减少CPU负载。2003年IBM在AIX 5L version 5.2.10文件系统JFS2推出了CIO,包含了DIO的优点,多线程可以同时读写共享的文件,但性能仍比裸设备Raw I/O低。

  与文件系统相比,裸设备有以下优点:
  (1)空间是物理连接的,由一大块相邻磁盘空间构成,数据库管理引擎不需要跳过磁盘寻找数据时,能大大提高性能。熟文件的磁盘空间可能由多个Unix文件共享。连续的磁盘空间是设计表格与索引的重要因素。
  (2)数据直接在共享内存与磁盘之间传输,不需要操作系统缓冲过程,从而加快了响应速度。数据库管理引擎对数据库操作优化I/O,避免其他涉及操作系统的步骤,而文件系统的实现要通过caching和锁机制。
  (3)利用裸设备能更好地保证系统出现故障时恢复数据。
当然,文件系统使用比较方便,Raw I/O对存储管理要求比较高。I/O按性能速度从高到低为Raw I/O、CIO、DIO、Memory Mapped I/O、Buffered I/O。有许多测试表明,裸设备比熟文件快15%~25%。

  2.磁盘分区

  DB2、Informix、Oracle建表时都可以确定Extent初始值。Informix建议Extent不超过33个。DB2对Extent Size的建议为估计空间大小/4k×16M。Oracle Extent的管理很灵活,除了操作系统自身的限制外,可以指定Extent数量的最大和最小值。

  数据分析系统包含了当前和历史的数据,一般数据量都很大,需要分布存放。一些数据库管理系统有限制:如在一个分区上的总页数不能超过16M页,如果超过这个限制,为了提高性能则需采用分布存储方式,把数据存放在不同的物理设备上,通过并行读写可以有效利用多磁盘的I/O带宽,实现真正的数据分布并发处理。如果存在磁盘瓶颈,应确保表空间分布在所有可用磁盘上。如果磁盘利用率仍然很高,可能需要更多的磁盘。

  数据分块的方法有范围分割法、哈希分割法、循环分割法、表达式分割法等,哈希分割法普遍使用于数据仓库。如:对于交易数据可以按交易日期存放,对账户数据可以按所属分支机构存放。各数据库管理系统可以采用的分割法可能不同。

  给数据对象分配空间时应注意:
  (1)把频繁访问的表尽量放置到不同的表空间中。
  (2)把索引和表数据分开放置到不同的表空间中。
  (3)高增长表不要放到同一个表空间中。
  (4)把经常使用的表存放在磁盘中间。

  数据分布存放的另一个好处是,可以提高数据的安全性,某个表空间损坏不至于影响到其他表空间。

  六、运行规划

  数据分析系统必须每天装载、更新生产交易系统下传的数据。系统从初始化开始正常运行后,数据会随着业务的增长而增长,分析功能及用户也会随之增长。每天在生产交易系统下传数据到达后,需在规定的有限时间里完成这些任务。所以做好运行设计,不但要考虑现在每天的任务安排,还要考虑未来的增长情况。

  运行规划包括以下几个部分:

  (1)首先确定批处理系统可用时间窗口和终端用户可用时间窗口。例如,每天早晨三点收到总行数据中心的数据,终端用户在上午九点就要查看到最新数据,这之间有六个小时可以用来做批处理。
  (2)确定任务完成窗口。估算数据抽取、清理/转换、装载需要的时间,估算汇总统计、更新等正常业务功能处理需要的时间,各种查询的响应时间,各种任务的执行周期等。确定哪些必须在终端用户工作时间之前完成,哪些可以在终端用户工作时完成,哪些可以在终端用户工作时间之后完成。
  (3)计划性维护。确定何时维护及维护的内容。随着时间的推移、用户需求的改变,有的数据会过时,应将其定期归档,把长时间不用的数据转移到其他设备中予以存储,删除休眠数据,清理脏数据。还要考虑备份,包括备份的数据量,备份所需时间,备份的级别,何时备份,备份的周期等。
  定期更新数据表的统计信息是计划性维护中一个很重要的任务,如运行DB2的runstats on命令、Informix的update statistics for命令等,这些统计信息直接影响查询的执行计划。DB2有一个实用程序REORGCHK,如果运行RUNSTATS后仍不能改进性能,REORG实用程序可以选择根据指定的索引将数据重新排列成一个物理序列。对有大量更新的表,如果统计信息后性能提高不明显,可以删除和重建索引。
  (4)纠正性维护。包括允许维护的时间,允许多少故障时间和恢复时间。
  一般情况下,银行购买产品后很少做参数调整、程序优化等方面的工作。针对机器出现的性能方面的问题,生产厂商也往往是推出系统升级方案。而银行数据分析系统同交易系统不同,由于其需求不断增加,没有确定的边界,因此,性能调整也是一个没有结束的过程,若要最终达到资源极限,则需要升级硬件。
                                               

          原 作者: 张振华 王浩 (来源: www.fcc.com.cn )  http://www.csai.cn  2005年07月12日作者主要介绍:张振华,国家高级程序员和系统分析员,CSAI专业顾问。张振华具有十多年银行软件开发与管理经验。先后在《计算机世界》、《中国计算机报》、《中国计算机用户》、《软件世界》、《中国金融电脑》等报刊上发表了多篇文章。

分享到:
评论

相关推荐

    基于Spark的网络数据分析系统研究与实现.pdf

    相较于传统的分布式Keras深度学习集群,基于Spark的网络数据分析系统不需 要在深度学习与数据处理两个独立集群之间传递大型数据,并且能够轻松将 Keras 代码迁移到此平台上,减少了系统复杂性和数据传输延迟。...

    Oracle9i数据库系统优化与调整.pdf

    第49章 应用程序性能调整* 第50章 内存和CPU的优化 第五部分 ORACLE系统高级用法介绍 第52章 安全管理+ 第53章 分布式数据库管理 第54章 复制管理- 第56章 Oracle并行服务器安装与配置 第57章 并行环境应用...

    ORACLE_优化设计与系统调整(doc)

    第49章 应用程序性能调整* 339 第50章 内存和CPU的优化 348 第五部分 ORACLE系统高级用法介绍 358 第52章 安全管理+ 359 第53章 分布式数据库管理 360 第54章 复制管理- 385 第56章 Oracle并行服务器安装与配置 391 ...

    《Oracle高性能SQL调整》

    使用Oracle8i优化器计划稳定性、基于成本的优化器和基于规则的优化器,调整SQLDML语句、SQK子查询和数据仓库SQL,调整带有临时表和索引的SQL语句,使用STATSPACK诊断和优化系统性能。 本书内容丰富、分析透彻,可供...

    如何做性能测试-性能测试过程详述

    数据分析 2 性能测试过程详述 2.1 确定目的 2.1.1 如何确定测试目的 问主管 问项目经理 问市场人员 问客户 看需求规格说明书 看系统设计文档 靠经验 2.1.2 确定分析方法 需要收集哪些数据 由这些数据...

    如何对Oracle数据库系统性能进行优化.doc

    本文主要介绍Oracle系统性能优化的基本方法,并从操作系统、数据库结构规划、数据表设计、数据库参数调整、应用程序SQL语句分析及设计等几个方面给出具体的优化策略,供技术人员在Oracle系统管理和开发应用中参考。

    ORACLE9i_优化设计与系统调整

    §10.13 应用系统性能优化原则 123 §10.13.1 分而治之 123 §10.13.2 预分配,预支取,预编译 123 §10.13.3 筛选 124 §10.13.4 大量(bluk),块和批处理 124 §10.13.5 对应用适当的分段 124 §10.13.6 优化目标 ...

    Linux服务器性能调优

    通过本书,将可以学习以下内容: ·安装和配置linux以便达到最高性能 ·为用户的linux环境评估并选择适当的硬件体系结构 ·理解linux2.4至2.6版本的内核:组件、性能问题以及优化可能性 ·掌握linux性能调整的核心...

    “最后一公里”系列培训之性能测试最佳实践

    此外,开发人员也需要参与性能测试过程中的数据分析和优化工作,以提高系统的性能。 总之,性能测试是一个非常重要的测试流程,可以帮助开发人员和测试人员更好地评估系统的性能和稳定性,并为调整和优化系统提供...

    人工智能-项目实践-数据增强-使用反混淆技术来增强推荐系统针对分布外的数据的推荐性能.zip

    使用反混淆技术来增强推荐系统针对分布外的数据的推荐性能 顺序事件预测的目标是根据一系列历史事件估计下一个事件,并应用于顺序推荐、用户行为分析和临床治疗。在实践中,下一个事件预测模型是利用一次性收集的...

    信息化项目数据量分析方案.docx

    如优化数据处理算法、提升硬件性能、调整系统配置等,以提高数据处理效率。 五、数据安全与隐私保护 数据安全风险分析:识别项目中可能存在的数据安全风险,如数据泄露、非法访问等。制定相应的安全策略和措施,...

    PHP秒杀系统 高并发高性能的极致挑战 从万次到亿万次的性能优化,从单机到分布式的架构升级

    从需求分析、数据结构创建到基础功能开发、程序优化实现完整开发思路3.不仅仅是CDN/Redis数据库索引等常用优化方法更有程序逻辑细节调整,产品策略技巧全新的优化思维4.从单机到web集群,从多服务器到多机房数据中心...

    毕业设计:Python基于循环神经网络的情感分类系统设计与实现(源码 + 数据库 + 说明文档)

    4.3.3 系统性能和稳定性 18 4.3.4 数据安全和隐私保护 19 4.4系统实现 19 4.5 系统展示 21 4.5.1 注册登陆界面 21 4.5.2 文本检测界面 21 4.5.3 数据管理界面 22 4.5.4 公告管理界面 22 4.5.6 数据分析界面 23 4.5.6...

    数据治理-数据生命周期管理-大数据整合.pdf

    源系统的数据分析是数据整合最为关键和重要的⼀步,需要确认源系统中的数据结构、数据含义,与⽂档及业务⼈员理解的是否⼀ 致,是否存在偏差。同时,也需要对源系统数据的数据质量进⾏分析,了解数据质量状况,并...

    计算机网络系统设计分析-.doc

    计算机网络系统设计分析 【摘要】本文首先对网络数据分析和计算机网络系统设计之间的结合进行了解,重点阐 述计算机网络系统主要应用的设计方法,然后以计算机网络综合布线系统设计作为研究 案例,希望能够对提高...

    论文研究-基于轻量数据挖掘方法的数据库锁表优化.pdf

    依赖于DBA,来分析性能数据,然后进行系统优化,在系统越来越复杂、负载持续波动的情况下是很困难的,数据库系统的自我优化,是很有前途的解决系统性能问题的技术。针对数据库锁表管理,使用基于轻量数据挖掘的优化...

    操作系统维护服务目录.xls

    交付成果 040301.01,操作系统运行监控,操作系统运行状态检查、监控及预警,5*8,2次/天,现场/远程,《巡检报告》 ,,,7*24,,, 040301.02,操作系统定期巡检,操作系统性能分析、设备日志检查分析等,5*8,1次/月,现场/远程,...

    Oracle和MySQL高性能数据库设计

    前言:系统上线几年,性能慢慢的变差,不断优化SQL,但并非所有的SQL都是可以通过技术手段优化。只有调整数据库设计,此时发现非常困难,因为数据库就像是房子的地基,如果地基要改变,上层代码都要相应调整,工作量...

    (完整版)多路数据采集系统的设计毕业设计.doc

    数据采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡回 检测,并且能够对数据实行存储、处理、分析计算以及从检测的数据中提取可用的信息 ,供显示、记录、打印或描绘的系统。 数据采集...

    大数据实践之数据建模.pdf

    采⽤ER模型建设数据仓库模型的出发点是整合数据,将各个系统中的数据以整个企业⾓度按主题进⾏相似性组合和合并,并进⾏⼀致性处理,为数据分析决策 服务,但是并不能直接⽤于分析决策。 其建模步骤分为三个阶段。 ...

Global site tag (gtag.js) - Google Analytics