2012年2月 计算机工程与设计 COMPUTER ENGINEERING AND DESIGN Feb.2012 Vo1.33 No.2 第33卷第2期 基于索引性能分析的情报信息管理系统研究 曾传军,傅秀芬 (广东工业大学计算机学院,广东广州510006) 摘要:在系统开发数据库应用中,通常由于一条SQL语句的问题占用了大部分的资源,使得后续的会话无法正常快速的 执行。这类问题中一部分是开发人员在SQL编写时,没有考虑对表建索引,忽视了索引在性能方面的作用,以致系统性能 提不上。以电子政务情报信息管理系统为应用研究背景,使用Oracle性能工具以及成本计算着重分析了建立索引确实在系 统性能优化上起了重要作用。 关键词:甲骨文数据库;索引;性能分析;电子政务;情报管理 中图法分类号:TP309.3 文献标识号:A 文章编号:1000—7024(2012)02—0570—05 Intelligence information management system based on index performance analysis ZENG Chuan-j un,FU Xiu-fen (College of Computer,Guangdong University of Technology,Guangzhou 510006,China) Abstract:Database applications in the development of system,a problem of one SQL statement often took the bulk of the re— sources,making follow-up session could not perform normally and quickl ̄Some of these problems appeared in SQL writing, had not considered building indexes on the table,and ignored the role of the index in terms of performance which brought about low system performance.A intelligence information management system is taken as the application background,by using Oracle performance tools and the cost analysis,the result prove index indeed plays an important role in optimizing the performance. Key words:Oracle database;index;performance analysis;electronic government;information management 0引 言 在开发情报信息管理系统时,数据库的数据量非常大, 部分表数据上百万、千万条,给处理带来效率方面的难度。 尽管有Oracle这样强大的数据库作为后台支撑,效率问题 仍然是系统运行的瓶颈。对于只管将功能实现,而不关心 系统优化的开发过程已经严重影响后期的系统维护与使用。 很多公司企业将系统优化工作放到系统开发完成后,那是 一后期,调整的代价越大,相反,越早开始着手调整,收益 越大。因此开发出性能优越的系统,设计开发人员的前期 工作至关重要。 l 系统业务与相关技术 1.1系统业务 情报信息管理是情报业务系统中的一个子系统,主要 处理已经采集好的情报、重大事件等。通过此子系统,工 种既耗时又费力的工作,如果资金不是很雄厚的公司企 作人员可以对当前提交信息或历史信息查询、分析、统计, 从这些数据中获得有价值的线索,对工作人员在处理事件, 业,更要考虑其在后期优化所承担的经济重担。传统的观 点认为调整优化是数据库管理人员的任务,其实良好的系 统环境在设计和开发期问,设计开发人员就应该设置性能 迅速做出决策、提高业务水平具有重要的意义。其业务如 图1所示。 1.2索引 期望值,并结合Oracle特性和优势以达到某个目标。良好 系统设计,可以在系统应用的生命周期中消除性能的代价 和挫折。具有多年经验的系统开发员知道:系统越到开发 Oracle提供了多种索引类型,但在情报信息管理系统 中常用的是B*Tree索引。B*Tree是传统的索引,是 收稿日期:2011-02 06;修订日期:2011 O4—1O 基金项目:广东省自然科学基金项目(07001802) 作者简介:曾传军(1985一),男,广东惠州人,硕士研究生,研究方向为计算机协同软件与数据库技术、网络安全;傅秀芬(1957一), 女,福建漳州人,硕士,教授,研究方向为网络多媒体软件、数据库技术、协同软件、网络安全等。E-mail:chua ̄unzeng@163.corn 第33卷第2期 曾传军,傅秀芬:基于索引性能分析的情报信息管理系统研究 ・571・ 情报信息管理l 重大事件管理l 研判分析管理l锋嚣 \ 预案管理 I 零 舆情管理 I 系统业务 H 服务器” 用户 web浏览器 问数据库 图1 系统业务访问 Oracle和大部分其它数据库中使用最多的索引。其结构与二 叉树相似,依据关键码提供对单行或多行的快速访问,通 常需要很少的读取就能找到正确的行。 在物理层上,Oracle读取的最小单位为数据库块(多 个连续的操作系统块组成),一次读取的最大值由操作系统 一次I/O的最大值与muhiblock参数共同决定,所以即使 只需要一条记录,也会将该记录所在的数据库块一并读入 内存。逻辑上,Oracle用如下存取方法访问数据:全表扫 描、通过rowid的表存取、索引扫描。索引扫描先通过in— dex查找数据对应的rowid值,然后根据rowid直接从表中 获得具体的数据,索引过程形如图2所示。索引的类型与 where条件的不同,产生4种类型的索引扫描:索引唯 一扫描、索引范围扫描、索引全扫描、索引快速扫描。 图2索引扫描过程 1.3执行计划 执行一个SQL语句,Oracle有可能要实现许多环节, 这些环节的每一步或从数据库中物理检索数据行,或用某 种方法准备数据行,供语句发出的用户使用。Oracle用来 执行语句的这些环节的组合称之为执行计划。执行计划是 SQL优化中最为复杂、关键的部分,只有了解Oracle内部 如何执行该SQL语句,才知道优化器选择的执行计划是 否最优。 1.4性能工具 为测试在情报信息管理系统中表加索引后,与之前没 加索引所产生的性能变化对比,使用了autotrace等性能工 具。这些工具可以查看SQL的执行计划、资源的占用以及 方案对比。性能工具在分析SQL活动起了很大作用,方便 开发人员判断语句优劣,从而调整优化。 2 性能分析 2.1执行计划分析 作为索引性能分析,选取了系统中数据量比较大的一 张线索事件信息表b—qbgl—xssJxx作为分析对象,系统当 前存在100 123条记录。表中线索信息编号(xsxxbh)建有 索引。配置好autotrace工具,在应用程序sq1*plus上执行 命令set autotrace on,就可以看到Oracle运行SQL语句的 执行计划。对于此表,测试下面SQL查询,得到执行计 戈0:select systemid from b—qbgl—XSSJ XX t where xsxxbh% 2000000 and departmentcode=‘370100000000 ; 当线索信息编号(xsxxbh)建有索引时的执行计划: Execution Plan O SELECT sTATEMENT Optimizer—ALL~ ROWS(Cost=3 Card=1 Bytes=50) 1 0 TABLE ACCESS(BY INDEX ROWID)OF ‘B—QBGL—XSSJXX’(TABLE) (Cost=3 Card一1 Bytes=5O) 2 1 INDEX(RANGE SCAN)OF‘IDXB—~ QBGL—XSSJXX01’(INDEX)(Cost=2 Card=1) 消除xsxxbh所建的索引后的执行计划: Exeeution Plan 0 SELECT STATEMENT Optimizer:ALL~ ROWS(Cost=1590 CaM=l Bytes=50) l 0 TABLE ACCESS(FULL)OF‘B~QBGL~ XSSJXX’(TABLE)(Cost=1590 Card=1 Bytes=50) 从执行计划可以发现,使用了CBO优化器执行SQL 语句。字段没建索引,查询方式为全表扫描(FULL),而 建索引,采用了索引范围扫描(RANGE SCAN)。其中 Cost代表CBO在这一步消耗的资源,CaM表示计划中这 一步所处理的行数,Bytes指CBO中这一步处理所有记录 的字节数,是估算出来的一组值。当为线索信息编号 (xsxxbh)建索引时,查询的花费(cost)只有3,而没建 索引的查询花费达到1590,且执行时间比约为1:7。资源 花费相比之下,它们在查询当中的效率有明显差别。 计算机工程与设计 2.2索引访问成本分析 2.2.2减少源表访问 2012年 在3.1节中,给出索引带来访问数据高性能的简单例 子。以下从索引访问数据时的成本计算中,剖析索引性能 调整问题的机理。成本公式为 Cost—blevel+ceiling(1eafblocks*effective in— —系统中线索事件信息表(b—qbgl—xs ̄xx)经常对某 个单位到当天数据量的进行统计查询。但其查询效率非常 低。所用的SQL语句如下: select count(1)from b—qbglxssjXX where depart— dex selectivity)+ceiling(clustering—factor*effective ta— mentcode=‘370000000000’and createdtime ̄sysdate: ble selectivity) 在sql plus上set timing on和打开autotrace后,虽然 公式中成本(Cost)包含3部分: (1)根节点块(Root Block)以及分枝节点块(Branch departmentcode,createdtime单独建立索引,执行了4次, 发现执行也很快,平均也达到0.1253s,令人满意。但这是 Block)访问成本。blevel表示索引B*Tree树节点的层数, 也就是从根节点块访问到叶节点块时所经过的分枝节 点块数。 (2)索引的叶节点块访问成本。leaf—blocks*effec— tive index selectivity,leaf—block表示索引叶节点块数,ef— fective index selectivity指的是sql的查询条件中的用于扫描 时的字段选择率。 (3)索引取mwid,从rowid访问表的成本。clustering— factor表示聚集因子,反映了表数据的有序程度。effective table selectivity指查询条件中能够在索引上进行过滤字段的 所有字段的选择率。 遇到性能问题要用索引解决时,通常会考虑这3个部 分在成本上的消耗。例如,减少blevel可以减少大量的逻 辑读,减小effective table selectivity,尽量使数据通过索引 访问,减少访问表次数。降低clustering factor,可以减少 I/O操作的次数。 2.2.1降低聚集因子 因为索引中的数据是有序排列的,Oracle也是按照索 引的顺序访问数据,索引中rowid指向的数据如果在同一 个数据块中,那么就可以减少逻辑1/O。而一般表索引中 列是固定顺序排列的(即聚集因子固定),不会因再建索引 而降低聚集因子,只有重建表,按照用户的需要排列数据 才能改变。 (1)运行3.1节的SOL语句,已经知道建索引时,资 源花费很少。但从statistics的数据分析,其逻辑一致性读 (consistent gets)7344次,物理读(physical reads)223 次。这个统计数据不那么另人满意的。 (2)重新按条件排列数据。 create table clusterfactor—test as select*fromb—qbgl— xssjxx t where xsxxbh<2000000 and departmentcode一 ‘37O1OOOOOOOO’: select systemid from cluster —factor.—test where xsxxbh< 2000000 and departmentcode ̄‘370100000000’; 从执行计划statistics分析看到,逻辑一致性读只有11 次,不到原来的1/70o,而物理读。次。由此看到抽取数据 按条件重新顺序排列,数据紧凑,聚集因子降低,性能明 显提升。 因为只有1O万左右的数据量才有这样的结果。如果数据量 达到了百万、千万条,在查询时会慢的多。就这张拥有1O 万条数据的表如果使用(select*)此类查询,输出时间平 均也在2分钟以上,运行非常慢。基于种种考虑,开发时 把两个字段(departmentcode,createdtime)合起来建立一 个复合索引,意在减少源表的访问,再运行上面的sQI 语 句。可以从表1看到两者建索引与复合索引的性能区 别,大约用了原来时间的1/4。而且表数据量越大,区别 越明显。 表1索引与复合索引比对 统计记录数Cou ̄t(1)一100055。索引 (O.1253)/复合索引(O.0315)≈3.98,可知1O万条数据 在建立复合索引后,时间上提高了3倍左右。可想在数据 量更大的处理中,这种索引应用会有多大的好处。复合索 引之所以能提高性能,最主要是减少了effective table selec— tivity基数,使得经rowid访问表的数据量大大减少,进而 降低成本。在情报系统中,应用广泛。 2.3其它索引技术 索引调整性能还有很多的技术,需要根据不同的环境 背景,采取合适的索引。在情报信息管理系统中,应用了 多种索引技术解决性能问题。如为在大量情报中查询到符 合用户需要的情报正文,建立了interMedia文本索引。系 统还使用了索引降序扫描、反向扫描等技术,限于篇幅, 在此不再赘述。读者可以从今后的系统开发体会它们在性 能提高的作用。 3实验与结果分析 3.1情报统计应用索引 在情报系统中经常要对情报进行统计,用户通过页面 显示的统计信息,可以及时了解当天,当月的动态,方便 研判分析工作。现存在统计汇总表b—qbgl—tjxx,3张源 第33卷第2期 曾传军,傅秀芬:基于索引性能分析的情报信息管理系统研究 ・573・ 表:分别是入库情报信息表b—qbgl—jsqk,分发情报信息 表b~qbgl—jsqk—clxx,研判情报信息表b—qbgl—yptqh。 从后3张表中,以不同的单位分组,统计出当天不同类别 的情报信息量。存储过程具体实现如下: insert into b—qbgl—tjxx(systemid,rkqb,ffqb,ypqb, dwdm,tjrq) select getid(nul1),sum(qbs),sum(ffs),sum (yps),dwdm,v—date from ( (select count(1)qbs,0 as ffs,0 as yps,jsdw as dwdm from b—qbgl—jsqk where createdtime ̄..and ereat— edtime ̄..group by jsdw)union all (select 0 qbs,count(1)ffs,0 as yps,fsdw as dwdm from b—qbgl—jsqk—clxx where fssj>..and fssj<..group by fsdw) union all (select 0 qbs,0 as ffs,count(1)yps,ypdw as dwdm from h—qbgl—yptqb where yprq>..and yprq<..and sfyp一‘1’group by ypdw) ) group by dwdm; 实验是对3O万,9O万,150万条数据量,分别在crea— t ̄ime,fssj,yprq这3个字段上建有索引与否时,测试出所 使用的花费与运行时间。排除其它情况,只考虑3个索引同 时存在和同时不存在的情况。抽取上面查询语句运行得到执 行计划,在sql*plus上运行的结果如图3,图4所示。 0.48 O.O9 .嘲 O-26 .嘲 1 2 3 数据量 髓有索引 一无索引 图3时间消耗对比 稚{ 牲 数据量 +有索引 +无索引 图4执行计划中的花费代价(cost)曲线 两个图的X轴上的数据量:1表示3O万条、2表示9O 万条、3表示150万条表记录。 3.2结果分析 3 2 l 0 上面结果是在一种理想状态下所给出的测试结果,数 5 3 5 2 5 1 5 O 据量增大,而SQL语句控制查询出符合条件的量一定,都 是54997条。由图3所示,建有索引的不同数据量上运行时 间分别是0.09s、0.26s、0.48s,无建索引时对应的是2.39s、 2.75s、3.3Js。对比之下,可见建索引对语句执行效率的重 大影响。图4也能体现建索引的好处,使执行语句的资源花 费降低到一定的程度。另外可以看到,随着数据量的增加, 查询所花费的时间,资源也相应的增加,但这也是在理想的 状态下所呈现的趋势,并不是任何环境下都会出现相似的结 果,需考虑多方面的影响。如所查询的数据块已经存在于内 存,语句执行时间与I/o操作必然会相应的减少,相反在内 存中并没有驻留语句所需要的数据块,其结果是从数据库中 寻找,再映射到内存,这样必然增加数据的I/O操作,延 长执行的时间。因此,即使数据量再少,也有可能比数据 量大的所花费时间长。在测试的多数情况下,都能发现这 样的奇怪现象,其实这是数据库在后台结合多种技术的隐 性处理,对语句的高效处理起了重要作用。 4结束语 情报系统是一个结构复杂、业务繁多、安全性和保密 性要求高的电子政务系统。由于数据量庞大,系统数据处 理压力相对也大,因此在系统的分析设计阶段就需考虑性 能问题,以提供用户高效的交互效率。通过对索引在系统 开发中的性能分析,调整SQL语句的编写,为情报管理系 统获得高效的运行速度提供了技术依据。在使用索引相关 技术调整后,系统运行更加流顺通畅,用户通过Web浏览 或后台数据访问获得了满意的效果。系统开发是一个复杂 过程,在以后的开发中需要根据不同的情况分析,合理应 用不同的索引技术,以达到更好的性能效果。 参考文献: [1]Conner McDonald,Chaim Katz,Christopher Beck.Mastering oracle PL/SQL practical solutions EM].蔡伟毅,译.北京: 人民邮电出版社,2009. E2]Thomas Kyte.Expert Oracle database architecture 9i and lOg programming techniques and solutions[M].USA:Apress Expert,2005. [3]Hector Garcia-Mdina,Jeffrey D Ullman,Jennifer Widom. Database system implementation EM].杨冬青,吴愈青,包小 源,等译.北京:机械工业出版社,2010. [4]WANG Dong,ZHENG Zh ̄hong.Reserach and design of Ecomrnerce component[J].Computer Engineering and De- sign,2010,31(2):374—377(in Chinese).[王东,张志鸿. 电子商务领域构建的研究与设计[J].计算机工程与设计, ・ 574・ 计算机工程与设计 2012年 2010,31(2):374—377. Es]儿ANG Yi,JIANG Xin,FANG Miao.Text translation index based on intertextuality calculation口].Computer Engineering and Design,2010,31(15):3490—3491(in Chinese). [姜 怡,姜欣,方淼.基于互文性度量的文本翻译索引[J].计算 机工程与设计,2010,31(15):3490—3491.] [6]LEI Chun-hong,YU Jian-qiao.B+tree index for encrypted data— base based on modified binsearch EJ].Computer Engineering and Design,2010,31(4):713—716(in Chinese).[雷春红,余建 桥.基于密文块数组折半查找的B+树密文数据库索引l=J].计 算机工程与设计,2010,31(4):713 716.] [7]CHEN Hui—ping,YU Guo-zheng,WANG Jian-dong.Study on application of full—-text indexing technology in office automa—— tion system[J].Application Research of Computers,2007, 24(2):222—224(in Chinese). [陈慧萍,于国政,王建东. 全文索引技术在办公自动化系统中的应用研究_J].计算机应 用研究,2007,24(2):222—224.] [8]PAN Imng-xi,SUN Le.Index technique for dynamic corpus [j].Application Research of Computers,2009,26(1):11— 14(in Chinese).[潘隆禧,孙乐.基于动态文档集的索引技 术[J].计算机应用研究,2009,26(1):11—14.] E9]XIAO Hui,LI Qing-quan.Access methods in moving objects data— bases[J].Journal of Computer Applications,2010,30(4): 1064—1067(in Chinese).[肖辉,李清泉.移动对象数据库索引 研究综述EJ].计算机应用,2010,30(4):1064—1067.] [1o]YU Yan,LINWei—hua,TAN Xiao—jun.Spatial indexmethod based on R tree__J].Computer Engineering,2010,36(12): 31—33(in Chinese).[余艳,林伟华,谈晓军.一种基于R-tree 的空间索引方法EJ].计算机工程,2010,36(12):31—33.] [11]LI Yun-peng,XIONG Oui—xi.Traffic management domain-orien— ted classifide index algorith[J].Computer Engineering,2009, 35(2O):276 280(in Chinese).[李云鹏,熊桂喜.面向交通 管理领域的分类索引算法EJ].计算机工程,2009,35(20): 276 280.] [12]WANG Bin,ZHANG Ji-long,XU Ying xiao.New method of integrating data persistence and full text index[J].Com— puter Engineering,2009,35(3):42—44(in Chinese).[王 彬,张计龙,徐迎晓.整合数据持久化与全文检索的新方法 EJ].计算机工程,2009,35(3):42—44.] [13]DENG Pan,LIU Gong—shen.Effective storage structure of inverted index[J].Computer Engineer and Applications, 2008,44(31):149—152(in Chinese).[邓攀,刘功申.一 种高效的倒排索引存储结构_j].计算机工程与应用,2008, 44(31):149—152.] [14]Hyunho Lee,Wonsuk Lee.Query optimization for web BBS by analyticfunction and function based index in Oracle DBMS[c]. Luoyang,Henan,China:Advanced Language Processing and Web Information Technology,2007:606—611. [15]Christian Antognini. Troubleshooting Oracle performance [M].童家旺,胡怡,冯大辉,译.北京:人民邮电出版 社,2009.