无线网络优化平台数据库性能优化设计思路
2015-04-13王志海
王志海
(中通服网优技术有限公司,上海 200050)
1 引言
随着移动互联网的迅速发展,运营商成为一个海量信息的制造者和处理者,信息的爆炸式增长速度已远远超过比摩尔定律。由于IT环境日趋复杂,数据量暴增,给电信运营支撑系统带来了巨大的压力,传统的IT系统出现不同程度的性能问题亟待解决。
无线网络优化平台是运营商重要的IT支撑系统,需要抽取各厂商设备的性能、参数、告警、话单等各类数据源,3G的快速发展使得用户上网记录数据快速增长,逐月呈现指数级增长速度,给数据平台带来了巨大的压力,数据加载、数据处理和数据查询出现不同程度的性能下降,网络优化平台运维工作面临巨大压力和严峻挑战。如何解决性能下降,保证系统平稳运行成为平台运维支撑的首要任务。
2 性能概述
不同系统会有不同的资源需求,当资源需求不能满足时,便会产生不同性能瓶颈。系统资源中的CPU、内存、磁盘和网络都有可能成为性能瓶颈。要确定一个系统的性能瓶颈,可以通过逐项排查进行问题诊断,在此基础上进行问题分析和定位。
通常系统资源在达到一定利用率时便会对系统性能产生严重影响,不同的系统和硬件可能会对资源利用率的定义有所不同。CPU仅仅只能决定运算速度,即使是运算速度都还取决于与内存之间的总线带宽以及内存本身的速度;内存大小决定了所能缓存的数据量,主要决定了热点数据的访问速度;磁盘的转速决定了每次I/O请求的延时时间。硬件资源所能提供的处理能力一定是它们多方面共同决定的整体能力,任何一个方面出现瓶颈,都能导致整体性能出现下降。
3 问题分析
系统资源中,CPU负责所有计算任务,是最重要的一个子系统,基于摩尔定律,CPU是发展最快的一个硬件,所以瓶颈很少出现在CPU上。对于无线网络优化平台,线上环境通常是配置较好的小型机做RAC,CPU资源充裕,通过诊断观察显示CPU的利用率持续保持在20%以下,利用率很低,CPU出现性能瓶颈的情况基本排除。通过对内存的检查发现,物理可用内存free持续维持在大于20%的范围内,数据库实例的内存利用率也在80%以下,故内存出现性能瓶颈的情况也可以排除。一般来说,应用与数据库之间的网络交互所需的资源并不是非常大,所以这个环境遇到瓶颈的可能也并不是非常大。平台运行在运营商内部局域网通常采用千兆带宽,通过对线上网络环境的检查也排除网络资源瓶颈的可能。
对于数据库系统,如果数据保存在磁盘中,磁盘性能对于系统性能就非常重要;如果要对流数据进行压缩和解压缩,CPU的速度和内存容量也非常重要。由于无线网络优化平台数据库要传输和读取大量的数据,因此磁盘比CPU、内存等更加重要。
无线网络优化平台采用单I/O节点服务多个计算节点的模式。数据都存储在I/O节点上,系统发起一个计算任务时,首先将计算任务分配给多个计算节点,而每个计算节点又要访问同一个I/O节点以获取请求的数据。这样I/O节点的负载在整个数据请求和返回过程中都非常大,要处理所有计算节点发来的请求,而计算节点只需要等待I/O的返回结果,处理自身分配的计算任务,负载非常小。当请求的数据量以及查询数据量越大时,I/O的负载和处理压力就越大。当需要处理的数据急剧增长时,I/O效率就会严重下降,出现瓶颈。因此,改进I/O效率成为问题解决的关键所在。
4 优化设计
运营商IT支撑系统性能问题的解决思路通常有:一是优化系统、深化设计,通过技术设计解决或缓解当前性能问题;二是技术架构的重构,引入新技术和新产品来解决性能问题。技术架构的重构的一个有效途径是引入大数据产品,需重点考虑现有数据架构与大数据产品的融合和互补,形成有效应用模式,这通常需要投入大量人力物力,对现网环境的影响也较大,要达到成熟应用的目标通常需要较长周期的过渡。在现有资源和技术架构条件下,既要保证对现网环境的影响减到最小,又要在短时间内解决性能问题,通常现实可行的思路就是进行系统优化、深入设计,保证现网系统正常运行。在现网系统正常运行的前提下,再根据问题诊断的结果预测数据增长可能带来的后续问题,以及是否需要进行技术架构的重构和升级。结合无线网络优化平台线上实际情况,本文主要介绍以下方面的优化设计思路:
4.1 时间价值分级
从应用访问方式上,有些数据需要频繁进行查询,而有些数据需要进行频繁修改。如果数据查询频繁但是几乎不进行修改,在数据库设计时可以考虑应用访问的内容,考虑进行一些物理的不规范化处理,使得尽量通过简单的查询就可以得到结果;而对于需要频繁修改的数据,在进行设计时就需要按着范式的要求进行设计。无线网络平台是一个数据仓库系统,多数的数据属于一次写入频繁访问,所以在物理不规范化设计上需要多考虑应用系统的需要。
时间作为一个信息维度,是很多日志类的数据查询和统计的关键条件,通过对应用请求的统计,约95%的请求访问近7天的数据,其中80%的请求访问近24小时的数据,因此在数据存储和数据模型设计时可以考虑在物理上将近期数据单独存放在高性能的存储设备上,甚至可根据实际应用将近期实时数据存储在内存中,如图1所示。这样可以大大提高应用访问的效率和速度,减少查询和统计对数据库的负载。
图1 数据的时间价值分级示意图
4.2 精准索引设计
有效地使用索引是数据库应用系统取得高性能的基础。同时,索引的建立需要占用额外的存储空间,并且在增、删、改操作中也会增加一定的工作量。因此,增加适当的索引并删除不适当的索引,将有助于优化数据库性能。合理的索引设计是建立在对各种查询的分析和预测的基础上,只有精准索引设计,使索引与程序有效地结合起来,才能产生最佳的索引优化方案。
索引能大大加快数据库的查询速度,快速定位数据的物理地址。但是,对于大型表建索引却不一定能取得预期的优化效果,有时反而会降低数据库的整体性能。由于大型表存储数据量较大,对其建立索引,其索引数据会优化使用系统的数据块缓存,导致系统不得不频繁地访问磁盘来获取请求数据,从而导致数据库整体性能下降。在这种情况下,可以考虑根据应用数据特点进行分区及建立分区索引。所以,对大型表有时不建索引反而更好,即使创建索引也应尽量保证索引尽可能地符合应用访问的需求以及数据的特点,在建立索引时不能简单地认为创建索引就可以提高查询性能。索引必须指定一个适合所需的访问路径,这就要求在进行索引设计时应避免简单设计,一定要结合应用和数据的特点进行精准设计。
4.3 混合分区设计
分区技术提供了一种在物理上将大数据库对象分解为多个小的、易管理的实体的机制,其使得那些令人畏缩、难以实施的海量数据操作变得简单、易于管理和控制。分区将大的数据表或者索引分割为独立管理和并行处理的小对象,使得大型数据库的整体性能得以优化。
分区在物理上将数据分开存储,对一个表建立分区,当查询这个分区表时,系统根据查询条件只需要在对应的表分区中进行扫描,避开全表扫描,从而大大缩短扫描的时间。同时,分区分散在不同的磁盘上,当多个分区并行工作时也就大大减少了I/O的负载,此时分区将多个数据传输请求对磁盘I/O访问分散开来,如图2所示。实际应用中,数据访问经常会涉及到多个维度的组合,此时可以根据实际业务查询场景来设计混合分区模式,对于维度多、查询条件复杂、查询场景多的业务表的访问性能会有显著的性能提升。网优平台中对于像无线上网记录这样的大型表,可以考虑根据频繁访问的时间和网元维度建立混合分区,这样可以根据应用将数据分散到不同的磁盘I/O,快速定位查询数据,减少大量数据访问的时间。
图2 分区表的多任务并行执行模式图
4.4 并行处理机制
数据库并行处理机制的目标是高性能和高可用性,通过多个处理节点并行执行数据库任务,可以提高整个数据库系统的性能和可用性。
数据库并行处理机制高性能可以从2个方面理解:速度提升、范围提升。速度提升是指通过并行处理,可以用更少的时间完成成倍的任务;范围提升是指通过并行处理,在相同时间内可以完成更多任务。CPU的快速发展使得利用多CPU的并行技术来提升性能成为可能,对于多CPU系统尽量采用并行查询方式进行数据库操作,此时系统可以将查询请求分配给多个CPU间并行处理,每个独立的进程同时进行请求的处理,大大提高了应用访问的速度。对于大型的数据仓库系统,一般都会定期进行大量的数据加载工作,此时采用并行加载机制加载数据,也可以大大提高数据装载的速度,减少数据装载对数据库影响的时间。
4.5 高效SQL设计
由于应用程序SQL语句早于数据量的增长,所以对于很多SQL可能并没有考虑大数据量情况下对系统资源和消耗,SQL优化对无线网络优化平台来说是提升性能的一个有效途径。SQL语句优化时必须要考虑:一是根据数据库系统的技术特点进行优化的技巧;二是根据应用需求进行的针对性设计。特别是对于大数据量的数据库系统,在设计SQL时一定要关注查询的数据量大小,避免需求理解偏差以及返回的大记录集等情况,从而避免功能设计引起对大数据量访问的性能下降。在很多情况下,用户真的不需要大量数据的返回,通过功能设计完全可以避免或缓解。SQL优化和设计技巧有很多,针对类似无线网络优化平台的大数据量查询问题提出几个关键设计技巧如下:
(1)限制动态SQL的使用。动态SQL也会重新进行语法分析,重新占用资源,不考虑SQL共享池中是否有一个完全相同的查询值。
(2)避免不带任何条件的SQL语句。不带任何条件的SQL语句通常需要进行全表扫描,对于大型表将耗费相当多的资源和相当长的时间。
(3)尽量设计相同的或类似的SQL语句,以充分利用SQL共享池资源,查询数据在SGA中命中的几率也会大大提升。
(4)如果查询确实需要返回大量数据时,可以考虑先返回少量结果,等待用户发出新的指令,再查询返回全部结果集。
5 结束语
数据库面临的性能瓶颈大多数是因为新业务的增加导致资源耗尽,因此要解决数据库的性能瓶颈,就需要对数据库系统业务进行深入了解,明确业务需求和数据增长趋势,再采取针对性的应对措施。数据库性能问题没有一个统一标准的解决方案,通常可以从技术架构重组和优化设计这2个思路出发,结合具体的业务需求和技术实现来统筹考虑,从而制定解决方案。本文主要从优化设计的角度探讨了无线网络优化平台数据库面临数据增长带来的性能问题,分析了数据增长带来性能下降和性能瓶颈及其影响,并从技术层面提出了应对性能瓶颈的优化设计思路,这些优化设计思路在上海电信无线网络优化平台现网实测效果明显,较好地解决了当前数据增长带来的性能下降问题。
[1] 张永,张红蕊,路婧威. 海量数据离散化算法的并行设计与实现[J]. 计算机应用与软件, 2014,31(6): 21-23.
[2] 范庆彬,王为. 云计算在电信运营商中的应用[J]. 信息通信, 2011(3): 167-170.
[3] 陈宏伟,陈喜龙. 数据库的查询优化技术[J]. 科技资讯, 2008,15(5): 1-5.
[4] 王凯. MapReduce集群多用户作业调度方法的研究与实现[D]. 长沙: 国防科技大学, 2010.
[5] 郭忠南,孟凡荣. 关系数据库性能优化研究[J]. 计算机工程与设计, 2006,27(23): 84-90.
[6] 张义德,王国庆,汤幼宁. 更改的判定条件覆盖测试技术研究[J]. 计算机工程与设计, 2003,24(5): 19-22.
[7] 陈鑫,杨平. 应用MC/DC准则时需考虑的问题及其改进方法[J]. 计算机工程与设计, 2004,25(3): 406-409.
[8] 蒋承延,吴思远. 大型ORACLE数据库优化设计方案[J]. 电脑知识与技术(学术交流), 2007(12): 1518-1519.
[9] 黄锡滋. 软件可靠性、安全性与质量保证[M]. 北京: 电子工业出版社, 2002.★