计算机工程
COMPUTER ENGINEERING
1999年 第25卷 第12期 vol.25 No.12 1999



快速查询TMN系统中实现
候方男　戴　蔡　窦　文
TMN(电信管理网络)系统是保证电信网络正常、高效运转必不可少的手段。目前应用以及建设中的TMN系统，功能比较全面，但都存在一个突出的问题，即话务数据查询的性能不够理想。本文就这一问题提出了一种独特的设计方案，可使查询速度得到大幅度提高。为了说明问题方便，着重讨论一个具有代表性的问题，即有关本地网去话务查询。 
1 现有TMN系统对本地网去话务的处理
　　在电信网管系统中，主要的监控对象为交换机。每台交换机配置有若干中继群，交换机每隔一小时吐出所配各中继群在本小时内的话务数据。现有系统一般采用结构如表1的数据表存储去话务数据。我们将其称为原始数据表。
表1 原始数据表结构
原始数据--BD_QHW
统计时刻
THSK-pkey中继群编号
ZJQBH-pkey交换机编号
JHJBH-phe试呼次数
HSCS(int)接通次数
JTCS(int)其它指标
......(int)
1999-1-1 0:0ZJQ_A1JHJ_A10002000......
1999-1-1 0:0ZJQ_A2JHJ_A9001900......
1999-1-1 0:0ZJQ_B1JHJ_B6001000......
1999-1-1 0:0ZJQ_A1JHJ_A11002000......
1999-1-1 0:0ZJQ_A2JHJ_A9501900......

　　在表1中，"TJSK+ZJQBH+JHJBH"构成表的主键，且为聚簇索引。第一行表示交换机"JHJ_A"所属中继群"ZJQ_A1"在"1999-1-1 0:00～1999-1-1 0:59:59"这一小时内的各话务数据，第四行表示同一中继群在"1999-1-1 1:00～1999-1-1 1:59:59"这一小时内的各话务数据。数据存储以一年为一个统计周期，即一年后所有数据表被清空。
　　对去话务数据的查询需求主要有如下4种：
　　(1)小时段查询，如查询"1999-2-1"至 "1999-2-10" 每天 9 点这一小时段的某交换机所属各中继群去话务数据(求累加或平均)，使用频率约占60%；
　　(2)连续日查询，如查询 "1999-2-1 "至 "1999-2-10 " 这一连续10日内某交换机所属各中继群去话务数据(求累加或平均)，使用频率约占20%；
　　(3)连续时间查询，如 "1999-2-1 8:00"至 "1999-2-10 18:00" 这一连续时间内某交换机所属各中继群去话务数据(求累加或平均)，使用频率约占10%；
　　(4)单点查询，如 "1999-2-1 8:00" 这一小时内某交换机所属各中继群去话务数据，使用频率约占10%。 
2 快速查询方案对本地网去话务的处理
　　新的设计方案力求提高查询速度，特别是提高"小时段查询"的速度，因为这是最常用的查询。
　　在数据库系统中，查询的速度既是优化的问题，更是设计的问题。在软、硬件环境达到最佳配置的时候，良好的数据表设计就成为提高性能的根本途径。研究表明，80%的性能改进来自于IO的改善。因此，减少IO操作，特别是磁盘IO，是新方案的设计出发点。
　　为了达到这一目的，新方案对数据存储作了如下两项关键的改进。
　　(1)将"范围查询"转化为"点查询"原系统将交换机吐出的数据逐行存储，存储的是"步进"数据。新系统中，表的第一行存储本统计周期第一小时的数据，第二行存储的数据为第一小时的数据加上第二小时的数据，其余类推，也就是说，改为存储合计数据，如表2所示。
表2 存储方式对比
统计时刻原 系 统新 系 统
1999-1-1 0:0010001000
1999-1-1 1:009001000 + 900 = 1900
1999-1-1 2:0010501900 + 1050 = 2950

　　这样，跨越几天甚至几月的查询都不必扫描所跨时间范围，只须查询时间起点和终点处的数据，从而将"范围查询"转化为"点查询"。
　　(2)时间切片式处理为了与实际业务配合，并不能简单地按照表2所示随小时累加，而须将逐步汇总的过程在25个时间片上进行，如图1所示： 

图1 时间切片
　　图1中，"小时0合计"为整个时间范围内的第0小时切片，对应数据表为"速查小时表0"。在"速查小时表0"里面，第一行为"1999-1-1 0:00～0:59:59"的话务数据；第二行为"1999-1-2 0:00～0:59:59"的话务数据，再加上第一行即"1999-1-1 0:00～ 0:59:59"的话务数据，其余类推。这样，一天24小时就有24个时间片，分别对应数据表"速查小时表0"，直至 "速查小时表23"，共24个表，结构如表3所示。
表3 速查小时表
速查小时0--BD_QHWHOUR0
统计起始时刻
TJSK-pkey中继群编号
ZJQBH-pkey交换机编号
JHJBH-pkey试呼次数
SHCS(int)接通次数
JTCS(int)其它
(int)计数(int)
COUNT
1999-1-1 0:00ZJQ_A1JHJ_A10002000...1
1999-1-1 0:00ZJQ_A2JHJ_A9001900...1
1999-1-2 0:00ZJQ_A1JHJ_A21004000...2
1999-1-2 0:00ZJQ_A2JHJ_A18503800...2

　　表3中，"TJSK+ZJQBH+JHJBH"构成表的主键，且为聚簇索引。
　　需说明一点，实际运行中，由于意外的原因交换机可能会缺失某个小时的数据，为使平均值计算正确，用字段"计数-COUNT"记录交换机吐出的每一中继群实际数据次数。除各速查小时表外还有一"速查日表"，其结构与表3相同。其中，第一行存储"1999-1-1"全天24小时累加的结果；第二行存储"1999-1-2"全天24小时累加的结果，再加上第一行，即"1999-1-1"全天的数据，其余类推。 
3 查询性能对比
　　如前所述，性能的提高主要来自于IO的改善，因此，查询所需引用的数据页数目越少，则所需的IO就越少，查询完成的时间就越短。在实际对比中，数据库为Sybase11.5，原始数据表有50万条记录，时间从"1999-1-1 0:00"至"1999-7-1 0:00 "。
　　(1)小时段查询
　　例如，查询交换机JHJ_A从"1999-1-10"至"1999-1-20"每天9点的去话务数据合计值。
　　1) 从原始表中查询
　　select ZJQBH, sum(SHCS), sum(JTCS) from BD_
QHW
　　where JHJBH = 'JHJ_A' 
　　　　and ( TJSK > '1999-1-10 0:00'and TJSK < '1999-1-20 23:59 ' ) 
　　　　and datepart(hour, TJSK) = 9 
　　group by ZJQBH 
　　2) 从速查表中查询
　　.取时间起点各数据
　　select ZJQBH, SHCS, JTCS from BD_
QHWHOUR9
　　where JHJBH = 'JHJ_A' 
　　　　and ( TJSK > '1999-1-9 0:00'and TJSK < '1999-1-9 23:59 ' )
　　.取时间终点各数据
　　select ZJQBH, SHCS, JTCS from BD_QHWHOUR9 
　　　　where JHJBH = 'JHJ_A' 
　　　　and ( TJSK > '1999-1-20 0:00'and TJSK < '1999-1-20 23:59 ' ) 
　　.相减
　　即终点各值减去起点各中继群对应值。
　　3)性能对比
　　比较两种方案完成查询所需读取的数据页数(不含工作表处理)，可绘制出如图2的性能曲线：

图例───────速查表查询性能曲线
--------------原始表查询性能曲线

　　从图2可以看出，速查表查询具有良好的性能且保持稳定；原始表查询随着时间跨度的增大，需读取越来越多的数据页，响应时间明显加长。
　　(2)连续日查询
　　原始表查询将读取整个时间跨度内的数据页，速查表查询则只需读取"速查日合计"中的起点和终点处的数据，性能明显提高。
　　(3)连续时间查询
　　例如，查询如 "1999-2-1 8:00"至 "1999-2-10 18:00" 的话务数据之和，将其拆解为三段，即"1999-2-1 8:00～1999-2-1 23:00"、"1999-2-10 0:00～1999-2-10 18:00"和整日段"1999-2-2～1999-2-9"。其中，整日段将从"速查日合计"表中取出，性能亦得到提高。
　　(4)单点查询
　　该类查询不能从速查表中得到明显改善。
4 对快速查询方案的进一步探讨
　　速查表的维护由系统自动完成，每插入一条记录，则触发速查表维护过程。通过事物提交或回退确保原始表数据与速查表数据的一致性。
　　建立速查表的方案在原始表的基础上增加了24个小时合计及1个日合计表，由于小时合计表和日合计表的大小均为原始表的1/24，所以系统增加了25/24的存储空间。在目前磁盘容量、价格的情况下，以空间为代价换取的性能提高是值得的。另外，还起到了数据备份的作用，因为速查表的数据逆向计算可得到原始表数据。
　　速查表使数据分散分布，从而减小了锁冲突的概率。
　　前面的讨论中，我们只是比较了读取数据页的多少，并没有指出是磁盘读还是逻辑读。SQL Server 的优化器认为磁盘读的代价为18，逻辑读的代价为2。由于原始表的巨大性，无法将其全部绑定在高速缓存上，因此，大量的数据页需从磁盘读取。而速查表则小得多。根据用户的查询习惯，"小时段查询"往往只针对话务忙时，如上午9点、下午3点等少数小时段进行，因此，可以将忙时对应的小时速查表绑定在高速缓存上，从而具有很高的Cache命中率。
5 结束语
　　良好的数据库设计以及运行过程中的系统调优，是数据库系统高效运行的重要保证。本文所述的话务数据存储与快速查询方案，成功运用于湖南邮电TMN系统中。从这一方案的设计与实现过程中，深深体会到将系统的特性与应用的实际融合在一起，是应用成功的重要保证。
参考文献
1 本地电信网综合网管监控系统(内部资料).湖南省邮电管理局， 创智软件园，1996
2 王珊.Sybase原理:高级系统管理与性能调优.北京：中国水利水电 出版社，1998
3 [美]Paulsell K.Sybase SQL Server11 性能及其优化技术.北京希望 电脑公司，1998
