|
数据分析系统性能调整 |
银行数据大集中之后,业务部门越来越迫切地希望能从现有的数据中找到对开展业务有价值的信息,提供更多的辅助功能。在此背景下,出现了各种各样的分析系统,有的银行正在规划数据仓库(DW)的开发,有些银行已开发了客户关系管理(CRM)系统。 DW与CRM都以数据分析为基础,有的称之为决策支持系统(DSS),有的称之为商务智能(BI)。但无论是CRM还是DW,都不容易实现,即便在欧美发达国家已经有了成功的实践经验,国有四大商业银行的账务数据量之大和客户数之多可能是欧美任何一家大银行都无法相比的。在欧美,如果银行的客户数或账户数超过一千万就是大型银行了,与我国四大国有商业银行的一些省级分行的数据量相当。 要在四大国有商业银行实施数据分析系统,即使使用最先进的计算机设备,最先进的应用系统,最科学的算法,都不得不面临一个共同的问题——性能调整。
数据分析系统对响应速度的要求虽然没有联机交易系统高,但也有一定的业务要求,每天增量的数据转换、装载、抽取、更新等必须在规定许可的时间内处理完。 响应时间和吞吐量仍是数据分析系统最为关注的两个问题,与传统的OLTP系统不同的是:
1.首先建立并定义性能指标。在系统正式投入生产之前就有明确的性能需求,数据量与要求实现的功能决定了要采用的系统平台。
性能调整不仅是系统管理员的事,更需要应用开发人员的配合。不好的应用设计会吞噬掉机器的性能。 1.使用存储过程 为了提高处理性能,应尽可能采用存储过程而不采用嵌入SQL。存储过程主要有以下优点: 有数据表明,实现同一个功能,采用存储过程只需采用嵌入SQL的20%的时间。 2.使用C程序设计语言作为补充 不要使用C++程序设计语言处理数据,更不要使用Java程序设计语言。在所有的高级程序设计语言中,C程序设计语言的运行效率是公认的,可以使用C程序设计语言作为补充。存储过程有自身的缺陷,如编程语言SQL功能较差,与编程环境集成不够,移植性差,能提供的内部功能函数有限,执行过程中能提供的信息有限,不便调试等,对于一些特定的业务需求目标和数据的具体情况,可能用嵌C更好。 3.建立索引 建索引是提高数据访问效率的重要途径,但建索引有时并不一定能起到作用,索引不能满足未知需求,有时会适得其反,降低系统性能。关于索引,可归纳出以下几点: 4.优化查询 优化查询的出发点是如何减少查询的资源利用:减少I/O,减少运算量。可以用Set Explain命令分析各种查询语句的效率。 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低。 与文件系统相比,裸设备有以下优点: 2.磁盘分区 DB2、Informix、Oracle建表时都可以确定Extent初始值。Informix建议Extent不超过33个。DB2对Extent Size的建议为估计空间大小/4k×16M。Oracle Extent的管理很灵活,除了操作系统自身的限制外,可以指定Extent数量的最大和最小值。 数据分析系统包含了当前和历史的数据,一般数据量都很大,需要分布存放。一些数据库管理系统有限制:如在一个分区上的总页数不能超过16M页,如果超过这个限制,为了提高性能则需采用分布存储方式,把数据存放在不同的物理设备上,通过并行读写可以有效利用多磁盘的I/O带宽,实现真正的数据分布并发处理。如果存在磁盘瓶颈,应确保表空间分布在所有可用磁盘上。如果磁盘利用率仍然很高,可能需要更多的磁盘。 数据分块的方法有范围分割法、哈希分割法、循环分割法、表达式分割法等,哈希分割法普遍使用于数据仓库。如:对于交易数据可以按交易日期存放,对账户数据可以按所属分支机构存放。各数据库管理系统可以采用的分割法可能不同。 给数据对象分配空间时应注意: 数据分布存放的另一个好处是,可以提高数据的安全性,某个表空间损坏不至于影响到其他表空间。 六、运行规划 数据分析系统必须每天装载、更新生产交易系统下传的数据。系统从初始化开始正常运行后,数据会随着业务的增长而增长,分析功能及用户也会随之增长。每天在生产交易系统下传数据到达后,需在规定的有限时间里完成这些任务。所以做好运行设计,不但要考虑现在每天的任务安排,还要考虑未来的增长情况。 运行规划包括以下几个部分: |
原 作者: 张振华 王浩 (来源: www.fcc.com.cn ) http://www.csai.cn 2005年07月12日作者主要介绍:张振华,国家高级程序员和系统分析员,CSAI专业顾问。张振华具有十多年银行软件开发与管理经验。先后在《计算机世界》、《中国计算机报》、《中国计算机用户》、《软件世界》、《中国金融电脑》等报刊上发表了多篇文章。