基于电信网管系统中查询的研究

时间:2022-09-09 10:50:11

基于电信网管系统中查询的研究

摘 要:在电信网管系统中,为了对电信设备进行管理和性能优化,数据查询操作是必不可少的。因为劣质SQL语句和优质SQL语句之间的操作速度差别可达上百倍,因此采用了SQL语句优化技术来提高查询的效率,又因电信网管系统常需进行海量数据查询,所以利用恰当的分页显示技术,进一步提高系统的响应速度。实践证明了该方案的可性行。

关键词:电信网管系统;查询;SQL;分页显示

中图分类号:TP311 文献标识码:A

文章编号:1004373X(2008)0113703

Study of Inquiry on Telecommunication Network Management System

JU Chunfei

(Xijing University,Xi′an,710123,China)

Abstract:In telecommunication network management system,in order to carry on the management and the optimizing performance to the telecommunication equipment,the data inquiry operation is essential.Because the difference between SQL sentence operating speed may reach hundred times,therefore using the SQL sentence optimization techniques to enhance the efficiency of inquiry.And further because the telecommunication network management system often carry on the magnanimous data inquiry,so using Pagination-display further enhances the system the speed of response.The practice indicated that,this plan is feasibility.

Keywords:telecommunication network management system;inquiry;SQL;pagination-display

在设计电信网管系统时,为了提高设备的可维护性、可管理性及优化设备的性能,相关数据的查询和统计是必不可少的,可以说查询的效率直接影响到系统的响应速度。要想提高系统的响应速度,可通过SQL语句的优化来实现,对于海量数据,劣质SQL语句和优质SQL语句之间的操作速度差别可以达到上百倍。此外,对大数据量的查询结果,还可以采用分页显示技术来进一步减少系统的响应时间。

本文根据电信系统中数据查询的特点,结合相关查询技术研究的新进展,讨论了如何在电信系统设计中应用SQL语句优化和分页显示等查询技术提高系统的效率。对电信网管系统中统计和查询模块的设计具有一定的指导作用。

1 SQL语句优化技术

1.1 SQL语句优化的原因

电信系统数据库的优化通常可通过对网络、硬件、操作系统、数据库参数和应用程序的优化来进行。根据统计对网络、硬件、操作系统、数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右,其余60%的系统性能提升全部来自对应用程序的优化。因此可以肯定,通过优化应用程序来对数据库系统进行优化能获得更大的收益[1]。

对应用程序的优化通常可分为两个方面:源代码的优化和SQL语句的优化。由于涉及到对程序逻辑的改变,源代码的优化在时间成本和风险上代价很高。另一方面,源代码的优化对数据库系统性能的提升有限,因为应用程序对数据库的操作最终要表现为SQL语句对数据库的操作。

对SQL语句进行优化有以下一些直接原因:

(1) SQL语句是对数据库(数据)进行操作的惟一途径,应用程序的执行最终要归结为SQL语句的执行,SQL语句的效率对数据库系统的性能起到了决定性的作用。

(2) SQL语句消耗了70%~90%的数据库资源。

(3) SQL语句独立于程序设计逻辑,对SQL语句进行优化不会影响程序逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低。

(1) SQL语句可以有不同的写法,不同的写法在性能上的差异可能很大。

(2) SQL语句易学难精通,SQL语句的性能往往同实际运行系统的数据库结构及记录数量等有关,不存在普遍适用的规律来提升性能。

1.2 SQL语句优化的难点及解决方案

人们在使用SQL时往往会陷入一个误区,即太关注所得到的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中表现得尤为明显。存在的问题有:不良的SQL往往来自于不恰当的索引设计、不充分的连接条件和不可优化的WHERE子句。在对他们进行适当的优化后,其运行速度有了明显地提高。下面将从这3个方面分别进行总结[4]:

1.2.1 不合理的索引设计的解决方案

(1) 有大量重复值、且经常有范围查询(between,>,< ,>=,< =)和order by,group by发生的列,可考虑建立群集索引;

(2) 同时存取多列,且每列都含有重复值可考虑建立组合索引,组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。

1.2.2 不充分的连接条件的解决方案

表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。因此要充分考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。

1.2.3 不可优化的WHERE子句的解决方案

优化即WHERE子句利用了索引,不可优化即发生了表扫描或额外开销。

(1) 对列的操作都将导致表扫描,他包括数据库函数、计算表达式等,查询时要尽可能将操作移至等号右边。

(2) in,or子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开,拆开的子句中应该包含索引。

综上所述SQL语句优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充分利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。根据电信系统查询的特点,可把索引建立在日期上,因为他可以缩小查询的范围,而且是电信查询中最频繁使用和最需要排序的字段。

1.3 SQL语句优化的实现

1.3.1 建立“适当”的索引

经分析电信网管系统的库表结构,发现设备告警和日志的库表中都有入库时间,设备性能库表中都有起始时间和中止时间,而且重复较少。又因为我们的WHERE子句使用了多个列作为SELECT的条件,所以可以在库表的多个列上建立复合索引。由于设备告警和日志都需要以设备名为统计限制条件,而性能是以设备号为限制条件的,所以我们可以在入库时间、起始时间、中止时间、设备名和设备号上建立组合索引,进一步提高效率。

以日志为例建立索引:

建立好索引后,就要设计WHERE子句尽量使关键查询形成索引覆盖,只有这样才可以很好地利用建立的索引,以提高统计和查询的效率。

1.3.2 优化WHERE子句

经过分析和研究,我们发现WHERE子句按照以下规则编写可以提高效率。

(1) 选择一个好的表连接顺序。当在WHERE子句中有多个表连接时,WHERE子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在WHERE子句中的最后。

(2) 最好不要在WHERE子句中使用函数或表达式,如果要使用的话,最好统一使用相同的表达式或函数,这样便于以后使用合理的索引。

(3) 同一个SQL子句应该尽可能简单,将复杂的SQL 子句改写为简单的SQL子句。

(4) 使用WHERE (NOT)EXISTS来代替(NOT)IN子句,使用NOTEXISTS 子句可以有效地利用索引。

(5) 通过使用>=、

(6) 在查询时尽量少用格式转换。

(7) ORDERBY语句。ORDERBY语句决定了数据库如何将返回的查询结果排序。任何在ORDER BY语句的非索引项或者有计算表达式都将降低查询速度。仔细检查ORDERBY语句以找出非索引项或者表达式,他们会降低性能。解决这个问题的办法就是重写ORDERBY语句以使用索引,也可以为使用的列建立另外一个索引,同时应绝对避免在ORDERBY子句中使用表达式。

(8) ISNULL与ISNOTNULL。不能用NULL作索引,任何包含NULL值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有NULL,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在WHERE子句中使用ISNULL或ISNOTNULL的语句优化器是不允许使用索引的。

根据以上总结,我们进行统计的SQL语句可以组合为以下形式:

(1) 日志查询

select count(*) from日志库表 where username = 用户名 and devtype=设备类型 and devname=设备名 and cmdtime>=某时间 and cmdtime

(2) 告警查询

select count(*) from告警库表 where devtype=设备类型and devname=设备名and alarmtype =告警类型and cmdtime>=某时间 and cmdtime

在以上的SQL语句中使用>=、

2 数据分页显示技术

2.1 数据分页显示技术的比较

由于电信系统数据库的数据量较大,在进行网管数据查询的时候,需要遍历数据库中的每一条记录。经试验当查询的结果超过8万条记录时,查询结果的显示就会出现问题,因此需要采用分页显示技术,使查询结果更快、更好地显示给用户 [2]。

目前比较广泛使用的分页显示方式是将查询结果缓存在内存中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期的数据;二是如果数据量非常大时第一次查询遍历结果集会耗费很长时间,并且缓存的数据会占用大量内存,效率明显下降。

经典的数据分页方法是:ADO记录分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但是这种分页方法仅适用较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存;游标一旦建立,就将相关的记录锁住,直到取消游标;对于多表和大表中定义的游标(大的数据集合),循环很容易使程序进入一个漫长的等待甚至死机。尤其对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据的方法是非常浪费资源的。

较好的分页显示做法应该是每次翻页的时从数据库里检索页面大小块区的数据,从而加快数据的显示,也不会耗费大量的资源。

2.2 数据分页显示的实现

根据电信网管的特点,利用SQL语言的游标,确定需要返回的当前页的搜索结果,并将其保存在内存中,后续的记录再通过连数据库取得,下面是分页的实现。

在数据库中创建一个存储函数,这个存储函数的输入参数是:当前的页数、每一页的记录数和从数据库得到的要输出的总记录数。根据以上输入参数,得到要显示页的内容。具体的存储过程如下:

名称:sta[CD#*2]pageView

参数设置:

实现过程:

(1) 根据用户输入的查询条件,统计出符合条件的总的记录数,记录在@recordcount 中,假设用户要访问id号为 @pageid页的内容。

Select @recordcount = count ( * )from sta[CD#*2]pageView where pageid = @pageid

(2) 为上述的查询结果定义游标。一方面可以节省资源,另一方面可以避免扫描整个记录集,提高定位速度。

(3) 利用游标和我们设定的参数,确定当前页的第一条记录和最后一条记录的绝对位置,并把他们存在 @pagebegin 和 @pageend 中。

(4) 返回 @pagebegin 和 @pageend之间的记录,即我们要访问的那页记录。

最后在查询模块中调用以上存储过程,将记录集保存在一个二维数组中。遍历这个二维数组,就可以获得所有本页的内容,并以适当的形式显示出来。

2.3 数据分页显示性能分析

(1) 每次只传回一页记录,而且只形成一个记录集,而不必像传统的游标法用:s.next来输出Recordset记录,读取速度得到提高。

(2) 数据库没有用到临时表,比转储记录集的速度大大提高。

(3) 采用一个滚动游标,而且游标只经过2个操作就完成定位,速度也会大大提高。

选择不同的数据,测试采用分页显示方法前后的效率和差异。测试数据和测试结果见表1。

从测试结果可以看出,采用了这种分页显示方法后,查询速度随着查询量的增大而明显提高。

3 结 语

随着电信网管技术的不断发展,人们对网络性能数据的统计和分析的重视程度越来越高,因而对数据查询的效率和精度的要求也在不断提高,从而在对网管中设备的定性分析基础上,为网络管理提供维护和建设的依据。而查询的效率和精度的提高与多种技术有关,并且很多技术也在不断更新,所以要及时了解相关研究的新进展,及时采用新技术,充分发挥查询在电信网管中的作用。

参 考 文 献

[1]闵翔.人工智能数据库系统优化的捷径[J].中国计算机报,2001,16(5):14-16.

[2]勾成图,张Z,李军怀.海量数据分页机制在Web信息系统中的应用研究[J].计算机应用,2005,8(8):11-13.

[3]王雄英,韩卫占.通信网管理技术[M].北京:国防工业出版社,2003.

[4]Poetier P J.数据库技术大全[M].北京:电子工业出版社,1999.

[5]刘宇雷,钱淘.WWW对大量数据查询的一种实现[J].微计算机应用,2001,22(6):344-346.

[6]罗骏,何羽.SQL实用简明教程[M].北京:清华大学出版社,2004.

[7]蔡葵.SQL语句的查询优化分析[J].华南金融电脑,2004(8):45-46.

[8]盘莉莉.SQL语句优化原则[J].福建电脑,2004(8):12-42.

[9]马宁.如何提高SQL语句的查询效率[J].江西电力职业技术学院学报,2005,18(2):37-38.

[10]Thomas Connolly,Carolyn Begg.Database Systems A Practical Approach to Design,Implementation and Management[M].Third Edition.北京:机械工业出版社,2005.

[11]Paulley G,Larson P.Exploiting Uniqueness in Query Optimization[C].In:IEEEInt.Conf.on Data Engineering,1994.

作者简介 巨春飞 女,1974年出生,陕西省兴平县人,助教,硕士。主要从事软件工程方向的研究。

注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”

上一篇:洁净室过滤器效率现场测试的实现 下一篇:基于无线传感器网络轴温探测系统的设计