数据库索引范文
时间:2023-03-23 20:48:59
导语:如何才能写好一篇数据库索引,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
篇1
随着空间数据应用的增加,存储空间开销的加大以及索引空间重叠的剧增,空间数据库的索引性能下降。为提高空间查询的效率,空间数据库索引技术应运而生。下面我们将从四个方面来对空间数据库索引技术进行探讨。
1.高维空间索引技术
随着三维地理信息系统、多媒体数据库及时空数据库的研究和发展,对多维空间目标的搜索及更新功能的要求越来越迫切。而目前常用的空间索引技术,主要是针对一维或二维空间中的空间数据。将这些索引技术运用于三维或更高维空间数据时,其查询效率将大大降低,有时索引机制甚至不起到作用。因此,如何索引这些高维数据是一个很大的挑战,有必要研究新的可扩展的高维索引技术,使之不但能有效地检索一维或二维空间数据,而且能有效地检索高维的空间数据。
高维空间数据索引的一种实现方法是降维,然后再降维后的子空间里运用一维或多维空间索引技术。其降维的方法包括空间填充曲线、奇异值分解、距离映射算法等。由于高维空间数据索引结构的复杂性,高维空间数据索引技术的研究仍然存在很多问题有待于进一步探讨。
2.基于空间关系的索引技术
基于空间关系的数据索引技术在空间数据库中占有十分重要的地位。这是因为,空间数据库涉及对现实世界大量具有不规则几何形状空间目标的处理,这些目标之间存在着复杂的空间关系。很多查询和分析操作都是基于目标间空间关系的。只有在相应的空间数据结构基础上,依据目标间的空间关系建立良好的索引机制,才有可能有效地提高对空间数据的处理效率,尤其是空间查询的效率。否则,查询某个空间目标时,必须将该目标的特征值与空间数据库中存储的所有目标进行一一比较,以最终确定要查找的目标,这显然是令人难以容忍的。由此可见,基于空间关系的空间索引技术研究具有十分重要的意义。
目前的空间索引技术都有其固定的优势和不足,其共同特点是基于空间目标的空间位置来建立相应的索引结构,其主要目的是提高空间数据库系统中区域查询效率。然而目前的空间索引技术难以根据目标之间的空间关系来建立有效的检索机制,从而极大地影响了系统的功能和效率。若能根据空间目标之间的某些空间关系来动态地相应的索引机制,使之能够依据目标间的空间关系,快捷地查找到相关的目标,这必将极大地提高空间查询和空间分析的效率,从而有效地扩充空间数据库系统的数据组织、数据分析和数据维护功能。
3.基于Web技术的空间索引技术
与传统的空间数据库相比,基于Web的空间数据库在体系结构上有了根本的转变,它主要包括以下几部分:(1)基于Internet/Ineranet环境,采用了TCP/IP通信协议,大大扩展了空间信息共享范围。(2)在应用层采用了HTTP协议,客户端只需要有通用的浏览器即可,不需要有特殊的软件,大大增强了系统的性能。(3)应用的分布性。可以根据网络带宽、计算机性能等一系列资源状况,将应用按照功能分布到不同的结点上,如分布到多台服务器上或是将一部分简单应用分布到客户机上,复杂的应用仍交给服务器执行,这样可以大大提高系统的性能。(4)空间数据的分布性。空间数据可以根据其本身具备的空间特征存储在最适宜的位置上,从而大大简化了对空间数据的管理。
基于Web的空间数据库为信息的高度共享提供了可能,它改变了以往数据信息传输、、共享及应用的过程和方式,是空间信息系统发展的必然趋势。基于Web的空间数据库目前还处在发展阶段,还存在着许多关键问题尚未突破,空间数据的存储、检索及相关索引技术结构的建立即为其中等待解决的难题之一。
4.基于空间数据仓库的索引技术
随着信息技术的飞速发展和空间数据库业界对海量空间数据存储、管理、分析和交换的需求,以面向事务处理为主的空间数据库系统已不能满足需要,空间信息系统开始从管理转向决策处理,空间数据仓库就是为满足这种新的需求而提出的空间信息集成方案,它与传统空间数据库的主要差别为面向主题的数据组织和管理、数据的集成、数据的维护与管理及空间数据的时空序列变化这四个方面。
空间数据仓库是对空间数据进行管理的数据仓库,它将各种空间数据集成在一起提供给用户。由于空间数据本身具有的特点,空间数据仓库具有许多更加复杂的特性与关键技术,如空间数据仓库内数据的组织与显示,空间数据变换,客户端数据分析等,空间数据的高效存储和数据索引技术也是空间数据仓库的关键技术之一。空间数据库为了支持高层次的决策分析需要大量的数据。这些数据可能分布在不同的已有应用中,存储在不同的平台和数据库中。空间数据仓库则根据主题通过专业模型对不同源数据库中的原始业务数据进行抽取和聚集,形成一个多维视角,从而为用户提供一个综合的、面向分析的决策支持环境。这一过程的完成需要一套高效存储和数据索引技术作为保证才能完成。随着空间数据仓库研究的不断发展,基于数据仓库的空间数据索引技术也将得到不断的完善和发展。
5.结束语
空间数据索引是提高空间数据查询最有效的方法,也最难全面掌握的技术,因为正确的索引机制可能使查询效率提高一万倍,而无效的索引可能会浪费了数据库空间,甚至大大降低查询性能。采用不依赖于商用数据库空间扩展技术的空间数据引擎,具有良好的空间存储和访问效率,移植性好,灵活性高,更易于提高和完善,对于应用模型的设计也更为有利。缺点是实现难度大,且不支持扩展SQL查询,数据维护复杂。商用空间数据库的空间扩展最大的优点在于对象级的数据存储机制和支持扩展SQL的查询。采用数据库厂商提供的抽象数据类型存储空间数据,使得数据共享和互操作更有潜力。目前的各种商用空间数据库引擎或空间扩展技术有待于进一步研究。
参考文献:
[1]谈国新.一体化空间数据结构及其索引机制研究.测绘学报,1998,27(4):293299
[2]孙小燕,谭勇桂.空间索引技术―回顾与展望.计算机工程与应用.2002,24:197200
篇2
1.1 索引对象的概念
数据库对象是一种逻辑结构的集合,索引是供用户快速查找到记录的数据库结构,在逻辑上和物理上都独立于表的数据。索引可以在表内创建一个或多个列的组合,当建立索引以后表中数据会按照索引创建语句所定义的排序方式返回给用户。索引有多种类型,除了标准索引外,还包括唯一索引、位图索引、组合索引、基于函数的索引、反向键索引等。
建立索引能够提高 SQL 语句执行的性能,减少磁盘I/O。无索引查询,通常是全表搜索后才会得到结果,全表搜索会让数据库服务程序遍历表中的所有记录然后返回结果;而建立索引后查询,可以让数据库服务程序快速地定位到表中的确定行。当表被删除时所有与表相关的索引也将被删除。
索引可以被创建、重建和删除,索引建立语句:CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;索引重建语句:ALTER INDEX item_index REBUILD;索引删除语句:DROP INDEX item_index。
创建索引是为了提升数据库查询性能,在使用索引时需要注意以下情况:
1) 对于小表来说,使用索引对于性能不会有任何提高;
2) 当索引列中有极多的不同的数据和空值时索引会使性能有极大的提高;
3) 经常执行更新、修改操作的字段需要谨慎创建索引,因为更新索引的开销会降低创建索引所期望获得的性能;
4) 不要将索引与表存储在同一个驱动器上,分开存储会去掉访问的冲突从而使结果返回得更快。
1.2 索引对象优化方法
在业务系统中针对索引对象的优化,主要包括三种方式:一是重建过高的索引层次;二是清除无效的索引;三是对索引碎片的清理。
2.2 风险防范措施
针对数据库对象的优化,总体应该遵循如下的风险防范原则:
1) 确保数据库备份完整可用;
2) 所有操作和检查环节都使用事前完成并预演通过的脚本,避免临时修改脚本;
3) 每部分完成,通过检查确认无误,再进行其它部分,避免互相干扰;
4) 专家现场支持,及时处理突发问题。
在遵循上述原则的基础之上,对索引对象的优化需要注意以下风险:
1) 监测时间不够,在一个监测周期内未操作过表,监测过后又用到了这个表,需要索引,但此时此索引已被列为被优化的对象;
2) 监控过后,需要取消在用索引的监控;
3) 监控时如果rebuild index ,会取消监控,同时索引标记为已使用,这种情况下会影响监控效果;
4) 监控时如果在做统计分析时涉及到此索引,索引也会标记为已使用,同样影响监控效果。
为避免上述风险发生,通常采用的措施是在监控期间停止database、schema、table、index等级别的索引收集,避免影响监控效果。
2.3 优化效果分析
数据库级别的性能数据主要是以下关键指标:响应时间、CPU时间、等待时间、物理读,这些指标可以看出目前平均每事务的反应速度、每事务需要消耗的CPU与IO量。为了得到优化的效果,还需要保证进行数据对比的时间内,数据库的负载基本相同。数据库的负载指标一般以执行的事务数、Redo size等指标来表示。表1是某业务系统的这些指标在索引对象优化前后的对比数据。
通过索引对象的优化,可以从对比表中明显看出性能得到了大幅提升,影响较大的数据库操作瓶颈主要集中在大表的查询操作、关联表的更新操作、大业务数据的统计分析操作等,在优化后其操作响应时间已经能够满足用户的业务需求。这些数据对比符合数据库索引优化方案的预期成效,也说明索引对象对数据库性能的重要影响。
3 总结
企业的业务系统经过长期的运作,积累了大量的业务数据,同时随着业务增长、流程优化、人员变动等因素,会造成系统性能瓶颈。此时,需要运维和管理人员根据实际需求,按照系统优化原则,制定详细、多番论证的优化方案,对系统实施优化,这样才能满足用户不断变化、业务不断增长的需求。该文通过详述数据库索引对象的优化方法、应用案例,阐述了索引对象对系统性能影响的范围和程度,并就优化方案给出了应遵循的原则和风险防范措施。在性能优化中,针对数据库性能瓶颈,索引对象优化只是其中最常见的一种方案,具体优化还需要根据对系统长时间监测情况的分析,做出正确选择。
参考文献:
[1] 罗海滨,范玉顺,吴澄.工作流技术综述[J].北京;软件学报,2000,11 (7).
[2] 盖国强.深入浅出Oracle数据库——DBA入门、进阶与诊断案例[M].北京:人民邮电出版社,2006.
篇3
【关键词】空间数据库,索引,查询优化
中图分类号:G250文献标识码: A
一、前言
近年来,OracleSpatial的空间数据库正在不断的完善,但依然存在一些问题和不足需要改进,在技术快速发展的新时期,不断完善OracleSpatial的空间数据库的索引与查询优化,对空间数据库的发展有着重要意义。
二、查询模型
OracleSpatial使用双层查询模型来解决空间查询问题,即初级过滤操作和二级过滤操作。经过两次过滤,将返回精确的查询结果集,在的级操作过滤步骤中,近似匹配满足条件的一组候选对象,这些对象有可能满足给定的空间查询要求,其结果集是精确查询的父集。
选择近似表示的条件为:如果对象A与对象B的近似满足一种关系,那么对象A与对象B就可能具有那种空间关系。例如,如果近似表示是分离的,那么对象A和对象B就将是分离的,但是如果近似表示非分离的,对象A和对象B仍可能是分离的。然后通过二次过滤,对初次过滤结果再次求精,就得到实体间的精确空间关系。使用这样的二次过滤策略有几项优点:空间对象一般都很大,因此要占用大量主内存。空间对象的近似表示在载入内存时占用的时间和空间要少的多。对空间对象的计算一般都很复杂,计算花费很大。对象越复杂,计算空间关系就越复杂。使用近似对象的计算一般会很快,需要的计算周期也要短的多。
三、空间索引
OracleSpatial将空间索引功能引入数据库引擎,是一项重要特征。空间索引是根据空间准则把搜索限制在各表(或数据空间)内的一种机制。对于在与查询区域重叠的数据空间中查找对象之类的查询,要对其做出有效处理就需要索引。这由一个查询多边形(封闭定位)定义。第二种类型的查询(空间连接)是从两个数据空间内找出对象对,这两个数据空间在空间范围内互动。OracleSpatial为建立空间数据的索引提供了基于线性四叉树的索引方案和基于参考树的索引方案。
1、四叉树索引
线性四叉树索引把几何对象映射到一组编号的“瓦片”(title)。二维空间中的一个瓦片就是一个方框,它的四边形与两条坐标轴正交。所有几何体得以存在的坐标空间以一种规则的分级方式进行分解。坐标范围(即坐标空间)可视为一个矩形。在第一级分解中将此矩形沿每一坐标方向分为两半,形成四个“子瓦片”,被称为“四分片”。在接下来的每一级分解中,每一个四分片由被沿每一坐标方向分成两半,再形成四个子瓦片。顾名思义,四叉树的4叶结构可以用来构造索引树。此过程持续进行,直到某些终止条件(如瓦片的大小)得以满足。这些瓦片可以用z-排序方案或等价方案进行线性排序,从而产生线性四叉树。
2、参考树索引
除了提供四叉树索引功能之外,OracleSpatial还提供了参考树索引。参考树索引既可以用来代替四叉树索引,也可以与四叉树索引并用。此外,参考树索引还可用于对数据进行三维和四维索引,这对于解决石油勘探、体系结构、工程设计以及许多其他科学应用中的问题至关重要。
3、可扩展索引
应用程序可在Oracle数据库内(以表的形式)或Oracle数据库外(以文件形式)存储索引数据。应用程序通过管理、检索和使用索引数据来计算用户查询。实质上,应用程序控制着域索引的结构和语义内容。数据库系统通过与应用程序交互来创建、维护和使用域索引。
域索引数据最好存储在数据库中,这样,它就可以处理物理存储。
四、空间查询的优化
1、空间查询优化的原理
我们已经知道了Oracle在空间查询过程中会采用双重过滤的优化方法,而在实际应用的空间查询中,查询条件往往包含一些一维查询的条件的限制。当把查询直接提交给Oracle数据库进行执行时,Oracle数据库并不会区分一维查询的条件和空间查询的条件,直接进行一次过滤与二次过滤,得到查询的数据,而在一次过滤时,往往要过滤的数据量就可能会很大,因此会十分耗时。如果当空间查询中包含普通一维查询条件时,或许可以利用一维查询条件使得执行一次过滤时的数据量减少,从而减少空间查询所需消耗的时间,提高空间查询的效率。优化原理也正是基于上个段落中提到的想法,当空间查询包含普通一维查询时,将空间查询分两步进行:第一步,根据一维查询的条件执行普通一维查询,将查询得到的结果存入临时表中;第二步,根据空间查询的条件,对创建的临时表进行查询,得到原查询应得到的结果。如果,当根据一维查询的条件执行普通一维查询的所得到的数据较原查询一次过滤时需处理的数据量有明显减少时,便可起到减少时间、提高效率的优化作用。
2、空间查询优化的技术支持
OCI是Oracle提供的调用接口,英文全称为OracleCallInterface。它是Oracle数据库的最底层数据访问接口,在各类访问接口中,功能最全、效率最高,却也最复杂,但是OCI却提供了很好的灵活性和高效性,为用户的二次开发提供了很好的平台。
3、空间查询优化程序的设计
(一)、程序流程
空间查询优化程序接收输入的空间查询SQL语句,判定其是否符合优化程序的优化条件。如果不符合优化的条件,则直接执行SQL语句,进行空间查询;如果需要优化,则进入优化程序。首先,分析输入的SQL语句,提取语句中要查询的列、需要查询的表格、查询条件中关于空间查询的限制以及关于普通一维查询的限制;然后,根据已提取出的内容,生成新的SQL语句;最后提交给Oracle数据库执行,将结果显示出来并存入文件中。
(二)、可优化的条件
当查询的条件中包含两个或两个以上的约束,并且约束条件中至少有一个为空间查询的约束时,即可实行优化,否则的话,程序将不会进行任何优化,直接把SQL语句直接提交给Oracle数据库执行。
4、空间查询优化程序的实现
(一)、SQL语句的分析与优化
由于SQL语句良好的语法结构和空间查询函数的结构特点,因此很容易将空间查询的SQL语句进行分析,例如,可以很清楚的知道所要查询的内容在select――from字段之间,所查询的表在from――where之间,查询的约束条件在where字段之后;而约束条件的区分则依靠空间查询函数的特点――以“sdo_xxx”作为函数的开始。在分析过程中,由于要进行字符串的匹配,为了提高匹配的效率,在匹配过程中采用了KMP算法。
(二)、优化语句的生成
优化语句的生成分两步执行。生成优化语句的第一步是根据普通一维查询的约束条件,将所要查询的表的符合约束条件的所有内容存入到临时表中。
(三)、提交优化后的SQL语句
优化工作的最后一步为将优化后的SQL语句提交给数据库执行,显示查询结果并将结果写入到文件中。在输出的过程中,必须知道每一列的类型才可以输出结果。类型的明确通过调用OCI提供的OCIAttrGet函数实现,将每一列的类型记录到对应的标识列类型的数组中,在输出时,根据列的类型将相应的值写入用于输出的变量中,显示在屏幕上、存储在文件中。整个优化工作完成,结束会话,断开与数据库的连接,程序结束。
五、结束语
空间数据库发展至关重要,因此,基于OracleSpatial的空间数据库的索引与查询优化,要不断提高技术水平,加强对空间数据库的索引与查询的重视,促进OracleSpatial的空间数据库应用水平的提高。
参考文献
[1]潘农菲.基于OracleSpatial的GIS空间数据处理及应用系统开发[J].计算机工程,2002
篇4
一、数据库的优化查询方法
1、基于索引的优化
数据库的优化方法多种多样,不同的方法对提高数据库查询效率也不相同。
索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。而优化查询的重要方法就是建立索引,建立适合关系数据库系统的索引,这样就可以避免表扫描,并减少了因为查询而造成的输入输出开销。有效提高数据库数据的查询速度,优化了数据库性能。然而在创建索引时也增加了系统时间和空间的开销。所以创建索引时应该与实际查询需求相结合,这样才能实现真正的优化查询。
1.1判断井建立必要的索引对所要创建的索引进行正确的判断,使所创建的索引对数据库的工作效率提高有所帮助。为了实现这一点。我们应做到以下要求:在熟记数据库程序中的相关sQL语句的前提下,统计出常用且对性能有影响的语句,判断数据库系统中哪些表的哪些字段要建立索引。其次,对数据库中操作频繁的表。数据流量较大的表,经常需要与其他表进行连接的表等,要进行重点关注。这些表上的索引将对SQL语句的性能产生重要的影响。
1.2对索引使用的一些规则索引的使用在一些大型数据库系统中会经常使用到。这样可以有效的提高数据库性能,使数据库的访问速度得到提高。但索引的使用要恰倒好处,所以我们在使用索引时应遵守使用原则:建立索引可以提高数据库的查询速度。但索引过多,不但不能实现优化查询,反而会影响到数据库的整体性能。索g作为数据库中实际存在的对象,每个索引都要占用一定的物理空间。所以对于索引的建立要考虑到物理空间容量,以及所建立索引的必要性和实用性。
1.3合理的索引对SQL语句的意义索引建壶之后,还要确保其得到了真正的使用,发挥了其应有的作用。首先,可以通过SQL语句查询来确定所建立的索引是否得到了使用,找出没有使用到的索引。分析素引建立但没有使用的原因,使其真正发挥作用。其次,索引得到使用以后,是否得到了预期的效果,对数据库的性能是否实现了真正意义上的提高,只有合理的索引才能真正提高数据库的性能。
2、优化SQL语句
在使用索引时可以有效的提高查询速度,但如果SQL语句使用不恰当的话,所建立的索引就不能发挥其作用。所以我们应该做到不但会写SQL,还要写出性能优良的SQL语句。下面,就如何优化引用例子进行说明。
首先,在进行查询时,返回的值应该是查询所需要的。在查询中应该尽量减少对数据库中的表的访问行数,使查询的结果范围最小,这就意味着在查询时,不能过多的使用通配符,如:selecf*fmm tablet语句,而应该做到最小化查询范围,要查询几行几列就选择几行几列,如:selectcoil from tablel ;多数情况下,用户并不需要查询到的所有数据,而只是部分或靠前的数据时,我们也可以通过SQL语句来进行限制查询的结果,如:select top 50 coll from tablel。
其次,对于一些特殊的SQL语句,在使用时应正确选择。我们用一组例子来说明,如:EXISTS,NOT EXISTS。
语句一:select sum(tt,c1)from t1where((select count(*)from t2 where t2,c2=t1,c2)>0)
语句二:select sum“1,c1)from tl whereexists(select*from t2 where乜,c2=t1,c1)
两个语句所得到的结果相同,但,语句二的效率要远高于语句一,因为语句一在查询中产生了大量的索引扫描。
在对数据库查询时,所使用的语句多种多样,但选择恰当的的字句能够有效的提高查询效率。
最后,WHERE子句在使用时应该注意的问题。
在WHERE子句中可以使用exist和not exist代替in和not in,应该尽量避免使用in,not in,0r或者having。可以使用表链接代替exist。Having可以用where代替,如果无法代替可以分两步处理。
二、数据库系统的安全
数据库系统的安全框架可分为三个层次:网络系统层次、宿主操作系统层次和数据库管理系统层次。由于数据库系统在操作系统下都是以文件形式进行管理的,因此入侵者可以直接利用操作系统的漏洞窃取数据库文件,或者直接利用OS工具来非法伪造、篡改数据库文件内容。因此,数据库系统的安垒性很大程度上依赖于数据库管理系统。如果数据库管理系统安全机制非常强大,则数据库系统的安全性能就较好。根据数据库安全的三个层次,笔者提出了一个数据库入侵检测系统,其外层用基于网络的入侵检测,中间层用基于主机的入侵检测,内层采用人侵容忍。此系统采用系统整体安全策略,综合多种安全措施,实现了系统关键功能的安全性和健壮性。
三、数据库入侵检测技术
数据库入侵检测系统的研究与设计借鉴了针对网络和针对主机的入侵检测技术,在此基础上,又考虑了数据库自身的特点。按照检测方法分为:误用检测和反常检测。
(1)数据库误用检测
误用检测是指将已知的攻击特征存储在误用特征知识库里面,然后根据用户的当前操作行为与知识库里的误用人侵规则进行匹配检验,如果符合知识库中的入侵特征,则说明发生了入侵。误用特征知识库中的入侵规则由安全专家定义,可以随时添加、修改,然后保存在知识库中,用来对审计数据进行匹配比较。误用检测的优点是检测的准确率高,缺点是只能对已知的攻击特征进行匹配检验,对未知的攻击类型无法发现,而对未知攻击类型的检测要依靠异常检测。所以,误用检测常常与异常检测结合起来使用。
(2)数据库反常入侵检测
篇5
关键词: oracle数据库;sql;数据库索引;查询优化
query optimization method of oracle9i database
abstract: the basic tasks of a database are data storage and management,and the only characteristic of the database that terminal users can see is its capability, a database enquiry operation is the impact of the key factors of applications response time. thus,the query system in a logic and reasonable way is the key to develop database application system successfully.so construct the query system reasonably is a very important link of develop the database application system successfully.this paper has introduced the experiences and methods of raising the query efficiency of oracle database from the following four aspects:hit ratio improving,large tables query optimizing,and tuning of sql statement.
key words: oracle database;sql;index; query optimization
引言:
1 oracle9i数据库常见的资源瓶颈类型
oracle9i数据库运行时,常见的瓶颈现象有以下几种类型:
内存瓶颈:当oracle9i进程需要更大的内存空间超过系统可提供时。
磁盘i/0瓶颈:由于内存缓冲区的空间不足,或者表空间及其文件在硬件上的分配不合理而导致进程对磁盘的频繁i/0读写。
cpu瓶颈:尽管多数情况下,都是由操作系统的内核来管理分配有效的cpu给oracle9i数据库进程使用,但是,仍然会出现过多的应用进程对cpu使用周期激烈竞争的现象。
oracle9i资源瓶颈。
对以上各种资源瓶颈,通常可以从多个方面进行调整,但是,当对oracle9i数据库某一方面进行调整后,必然会影响到其它方面的性能。所以,对oracle服务器进行性能优化调整,应该采取一种综合优化调整策略,本文重点阐述对数据库查询优化方法。
2 针对sga 内存区的调整
首先进行oracle实例调整。oracle实例涉及到sga 内存区和一组oracle后台处理进程。对oracle实例的调整就是对sga 内存区和oracle后台处理进程的调整。在对该问题的解决中,主要是针对sga 内存区的调整。
2.1 sga 内存区结构
sga就是系统全局区,是指内存中允许多个进程相互通信的区域。在oracle中,sga对所有进程来说都是全局的可用的。图1为sga结构图。缓冲区高速缓存是sga 中为所有用户和系统进程保存数据的区域,任何数据在传递给一个调用的应用程序之前,都必须驻留在这片高速缓存中。
这片区域是共享的,所以多个进程可以从这片高速缓存读取同样的数据块,而不必每次都从物理磁盘中读取。共享池是sga 中的另一个区域,其中保存着关于待执行的sql语句的信息。他由两部分组成:数据字典高速缓存,存放从数据字典中读取的信息以用于处理sql请求;库高速缓存,存放需要执行的sql语句信息,包括每个sql语句的语法分析树和执行计划。如果多个用户要执行同样的sql语句,那么语法分析树和执行计划就可以重复利用,省去了语法分析步骤的昂贵花费。
2.2 调整sga 结构
一般来讲,在系统硬件支持的情况下,系统全局区越大越有利于数据库高效的运行。大的缓冲区高速缓存可以缓存更多的数据块,这样可以提高缓存命中率,节省物理磁盘读取的高昂代价;大的共享池意味着大的库高速缓存。库缓存的内存结构如图2所示。
图2 库缓存的内存结构
库缓存越大,可以保存的sql语法分析信息越多;此外,数据库中的一些对象,如表、索引、过程、触发器、软件包等也在首次执行后进驻库高速缓存。大的库缓存可以保证对这些对象的高命中率,从而节省解析和载入代价。作为一个通用的优化原则,我们在解决该问题时,适当增大了sga 的容量,从而保证oracle实例可以比较高效的运行。设置缓冲区高速缓存的容量为32 m ,设置共享池的大小为56m。运行rpt_lib.sql程序检查库高速缓存不足率(还没有运行该脚本),表明库缓存足够。
2.3 oracle数据库的物理结构和逻辑结构
oracle数据库的物理结构从操作系统一级查看,就是由一个个的文件组成,从物理上可划分为:数据文件、日志文件、控制文件和参数文件。数据文件中存放了所有的数据信息;日志文件存放数据库运行期间产生的日志信息,它被重复覆盖使用,若不采用归档方式的话,已被覆盖的日志信息将无法恢复;控制文件记录了整个数据库的关键结构信息,它若被破坏,整个数据库将无法工作和恢复;参数文件中设置了很多oracle数据库的配置参数,当数据库启动时,会读取这些信息。
oracle数据库的逻辑结构则是由一些数据库对象组成,这也是数据库管理员和应用开发人员经常用到和查看的逻辑对象,如:数据库表空问、表、索引、段、视图、存储过程、触发器等。数据库的逻辑存储结构(表空间等)决定 7数据库的物理空问是如髓使用的,其关系示意图如图3所示
3 查询优化的策略
3.1基于索引的优化
索引是数据库中一个常用而重要的数据库对象,而优化查询重要的方法是建立索引,在关系数据库系统的表上建立合适的索引,可以避免表扫描并减少因查询而造成的i/o开销,提高数据库数据查询的速度,改善数据库性能。但是创建索引会增加系统的时间和空间的开销。因此创建索引时必须要与实现应用系统的查询需求密切结合,才能达到优化查询的目的。
3.1.1建立必要的索引
判断索引必要性的最终标准则是判断这些索引是否对数据库的工作效率有所帮助。在实际应用的过程中,应该为优化工作做以下几点准备:
首先必须熟悉数据库应用程序中所有的sql语句,并从中统计出常用且可能对性能有影响的部分语句;然后分析、归纳出作为where条件子句的字段及其各种组合方式;在这一基础上可以初步判断出哪些表的哪些字段应该建立索引。其次,必须熟悉应用程序,要了解哪些表是数据操作频繁的表;哪些表经常与其他表进行连接;哪些表中的数据量可能很大;数据量大的表中各个字段的数据分布情况如何等等。对于满足上述条件的这些表,必须重点关注。因为建立在这些表上的索引,将对sql语句的性能产生举足轻重的影响。
3.1.2 使用索引的一些规则
在大型应用开发或表较大的情况下,使用索引可以极大减少数据库读写次数,从而提高数据库访问速度,所以,索引在应用程序开发中经常被使用,但如何正确使用索引以发挥它的优势需遵循以下原则:
在主键(primly key)的索引方面,不应有超过25%的列成为主键,而只有很少的普通列,这会浪费索引空间在索引的使用效率方面,当选择数据少于全表的20%,并且表的大小超过oracle的5个数据块时,使用索引才会有效,否则用于索引的i/o加上用于数据的i/o就会大于做一次全表扫描的i/o.
另外,在数据分布不均匀的特殊情况下,选择性不高的索引也要建立。假设表someinfo中数据量很大,有一百万行,其中有一个字段flag,取值范围为枚举值:[0,l,2,3,4,5,6,7]。按照前面所述索引建立的规则,该字段只有8种取值,索引值的重复率很高,索引选择性明显很低,通常被考虑为不必建立索引。然而,如果该字段上数据值的分布情况非常特殊,如表l所示:
假定常用的查询中,查询flag<6的情况既多又频繁,毫无疑问,如果能够建立索引,并且被应用,那么必将大大提高这种情况的查询效率。
使用索引尤其应当注意的是,在表连接操作时的驱动表/被驱动表的关系。oracle核心使用至底向上、从右至左的规则,如:from 子句中的最后一个表才是oracle用傲为驱动表的表;where子句的最后一个条件中所台的列,它所属的表才是最先被引用的表。总之,在from子句中,将表名按被驱动表-驱动表排序,在where子旬中,将条件语句按最少约束-最多约束排序。当指向被除行的索引所占空间超过总索引空间的20%时,就应删除并重建索引,以节省空间,提高性能。
3.1.3 让sql语句用上合理的索引
建立必要的索引之后,并非意味着数据库性能的提高已经得到了令人满意的结果,还要针对某些具体的sql语句进行分析:
首先,确定索引是否真正得到了使用。不发挥作用的索引,正如建好的楼宇无人居住,这是对资源的浪费。不允许有闲置的索引,应竭力让那些仍没有使用索引的sql语句发挥作用。
其次,判断索引是否利用得合理。特别是一些复杂的sql语句,当其中where子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。错误的索引不会使数据库性能得到预期的提高,往往还会产生一些与愿望背道而驰的负面影响。下面,就如何使用合理索引的问题,引用实例进行说明
3.2 基于sql语句的优化
由于oracle9i是关系型数据库,sql语句是面向结果而不是面向过程的查询语言,所以它包含一个基于开销的优化程序(cost based optimizer)及一个基于规则的优化程序(rule based optimizer)来对用户提交的及时查询提供一个最佳的执行策略,这个执行策略就是执行这个查询所需的一系列步骤。
3.2.1 查询优化程序中sql语句的调整
要对查询语句进行优化,一个简单直接有效的方法是对sql语句进行调整,减少计算量,提高查询的响应速度。对sql语句进行调整时要遵循下列原则:
首先,选择运算尽可能先做,并在对同一个表进行多个选择运算时,选择影响较大的语句放在前面。
其次,在执行连接前对关系作适当的预处理,预处理的方法有两种,在连接属性上建立索引和对关系进行排序。
最后,应避免相关子查询。sql概念上将位于where子旬中的相关子查询处理成获取参数并且返回—个单独的值或值的集合(也可能为空集)的函数。它是按以下方式执行的:首先计算位于外层查询的form子句中关系的笛卡尔积,然后对该笛卡尔积的每个元组用位于where子句中的谓词进行测试。这种执行方式技术上称为相关执行,相关执行方式效率不高,因为子查询要对应位于外层查询的每一个元组进行单独的计算,从而导致大量的随机磁盘i/o操作。所以在实际应用中,若可以用连接查询代替的子查询,则用连接查询实现;例如,有以下相关子查询语句:
select sname
from student
where exists(
select *
from student_grade
where score>90 and student.sno =student_grade.sno)
用连接查询实现以上子查询如下:
select sname
from student,student_grade
where score>90 and student.sno =student_grade.sno)
如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
3.2.2书写sql的一些经验
(1)不要在索引的字段上面进行任何操作(包括函数操作),例如select *from emp where sal*12>10000;要写成select * from emp where sal>10000/12:
(2)尽量使用union替换掉or的操作,如果可能,使用uni0n all
(3)如果能用连接操作处理的语句,最好不要使用嵌套子查询
(4)如果返回的结果集超过表记录的40%以上,最好使用全表扫描,而不要使用索引,因为使用索引除了通过rowid对表进行操作外,还增加了对索引的操作。
(5)如果不打算使用某个索引。对于字符类型的字段a(有索引),可以用aii代替,对于数字类型子段b(有索引),使用b+0就可以使基于开销的优化程序(cbo)不使用索引。
(6)尽量不要在含有索引的字段里面添加null,因为对null的判断将不使用索引。
(7)使用复合索引时要注意索引列在where 中的位置,只有当复合索引中的第一列出现在where 中时,才会成功的使用该复合索引。
3.3其它优化手段
3.3.1使用存储过程
存储过程是sql语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理,创建后便可转换为可执行代码,作为数据库的一个对象存储在数据库中,存储过程的代码驻留在服务器端,因而执行时不需要将应用程序代码向服务器端传送,可以大大减轻网络负载。同时,由于存储过程已编译为可执行代码,不需要每次执行时进行分析和优化工作,只需要从高速缓冲存储器中调用存储过程已编译好的二进制代码来执行,从而减少了预处理所花费的时间,提高了系统的效率。另一方面,使用存储过程还易于维护,且表的结构改变时,不影响客户端的应用程序。
3.3.2避免相关子查询
如果一个列的属性名同时在主查询和where子句查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越深,效率越低,因此,应尽量避免子查询,如果不可避免,那么要在子查询中过滤掉尽可能多的行。
3.3.3避免或简化排序
应当简化或避免对大型表中的数据进行重复排序,如果利用索引能以适当的次序自动产生输出时,优化器就能避免这种排序。以下是一些主要的影响因素:
(1)索引中不包括一个或几个待排序的列。
(2)group by或order by子句中列的次序与索引的次序不一样。
(3)排序的列来自不同的表。
为了避免不必要的排序,应正确增建索引,合理合并数据库表,在必要时对表进行反规范化处理。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
4 结束语
数据库应用的性能调整是一个不断摸索、总结的过程,涉及的方面很多。优化数据库整体的应用性能是提高计算机系统处理速度的一种行之有效的办法,本文从索引优化,sql语句以及oracle10g的新特性的优化等方面的优化进行讨论,结果表明优化后的数据库性能有所提高,但在实际应用中要根据系统的实际情况具体分析,对优化的方法反复实验,最后再确定最终的优化方法,这样才能达到较好的优化效果。实现快速、高效的数据查询和应用分析,同时也使硬件资源得到最充分的发挥。在实践中必须分析影响性能的各方面因素,针对不同的具体情况选择合理的优化措施;同时还需要不断了解oracle提供的新技术并加以合理利用,从而更好地进行数据库的调优。
参考文献:
[l](美)bulusu lakshman.oracle 9i pl/sql开发人员指南.清华大学出版社.2004.
[2](美)kevin loney marlene theriault.oraele9idba手册.机械工业出版社.2002.
[3]oracle91.6管理员指南.北京希望电子出版社.2003年1月.
篇6
关键词:Oracle数据库;数据库配置优化;SQL 语句优化
中图分类号:TP312文献标识码:A文章编号:1009-3044(2010)22-6151-02
Oracle10g Database Performance Optimization and Adjustment
ZHEN Fu-dong
(Civil Aviation Air Traffic Control Branch of Gansu, Lanzhou 730087, China)
Abstract: Oracle database is currently the most widely used large-scale databases, database data with the increase of the number of concurrent users increases, the throughput of the system often appears lower, longer response time performance problems, how to effectively optimize and adjust database performance, avoid system bottlenecks and to ensure efficient operation of the base Oracle database. This paper analyzes Oracle database system performance impact factor, we focused on the Oracle10g database system optimization strategy, including the memory area to adjust and optimize disk I / O optimization, disk fragmentation, rollback segment set, CPU performance tuning and optimization of SQL statements and so on, through the introduction of these optimization strategies, hopes to Oracle10g database system for optimum performance.
Key words: oracle database; database configuration optimization; optimizing SQL statement
Oracle 数据库是现在使用最广泛的大型数据库之一,选用Oracle 作为数据库的应用系统一般规模比较大, 需要处理的用户数目较多,对于这样的数据库系统来说,效率是最重要的指标之一,在实际应用中,随着系统数据库中数据的增加,访问量的加大,数据库系统性能将会下降,数据库的优化逐渐突显出其重要作用。
1 影响Oracle 数据库系统性能的因素
Oracle 数据库系统性能受到数据库运行的诸多方面的影响与制约,包括数据库服务器性能、数据库配置、网络I/O、应用程序性能等。
1) 数据库服务器性能
数据库服务器是整个系统的核心,它的性能直接影响到整个系统的性能。数据库服务器的性能主要取决于服务器上运行的操作系统以及服务器的硬件配置。
2) 数据库配置
数据库的配置情况直接决定了数据库的性能优劣,是数据库性能优化的核心。[1]主要包括内存区的设置、I/O 设置、参数设置、CPU 调整、回滚段设置以及碎片整理等。数据库配置及其调整贯穿于数据库设计、创建、运行的各个阶段。
3) 网络I/O
应用程序与数据库服务器之间的交互需要通过网络来进行,网络的性能,特别是网络I/O 对整个系统性能有重要的影响。
4) 应用程序实现
应用程序的实现方法对数据库性能也有很大的影响,特别是SQL 语句的应用、数据库连接方式的选择、数据库端程序设计以及数据库对象的使用情况等,都影响系统的执行效率。
2 Oracle10g数据库系统性能优化与调整策略
Oracle 数据库的性能优化,可以从数据库的体系结构、软件结构、模式对象以及具体的业务和技术实现出发,进行统筹考虑。优化是有目的地更改系统的一个或多个组件,使其满足一个或多个目标的过程。下面从几个不同方面介绍Oracle 数据库优化设计方案。
2.1 内存区调整与优化
Oracle 数据库实例的内存结构主要由SGA 和PGA 构成,其中SGA 主要包括数据缓冲区、共享池、日志缓冲区,它们的分配是否合理直接决定了数据库性能。
1) 数据缓冲区调整与优化。数据缓冲区用于存储从数据库中检索的数据。如果用户请求的数据在数据缓冲区中,则数据从数据缓冲区中直接返回给用户,查询时间短。如果用户请求的数据不在数据缓冲区中,则先由服务器进程将数据从数据文件读取到数据缓冲区,然后再从数据缓冲区中将数据返回给用户,查询时间延长。因此,保证尽量多的用户请求数据在缓冲区中,避免读取数据文件,可以大大提高数据的操作性能。[2]
2) 共享池调整与优化。设置共享池的目的为了缓存已经被解析过的SQL,而使其能被重用,不再解析。[3]通过确保大多数语句能够在共享池中查找到它们自己的一个已分析版本,就可以提高语句分析和执行的效率,降低资源消耗。共享池中存放的信息是应用程序需要经常访问的,因此需要保持这些信息的高命中率。共享池大小是否合适,主要体现在库缓冲区和数据字典高速缓冲区的命中率上。
3) 日志缓冲区调整与优化。日志缓冲区用于存放数据的修改信息。日志首先写入日志缓冲区,在一定条件下由L GWR 进程将日志缓冲区的信息写入日志文件。如果日志缓冲区已满,但还没有写入日志文件,则日志写入处于等待状态,即日志缓冲区写入失败。过多的日志写入失败,说明日志缓冲区偏小,影响数据库性能。
4) PGA 区调整与优化。PGA 区主要由私有会话区以及排序区构成。其中,排序区设置是否合理对数据库性能有一定的影响。在Oracle 数据库中,排序可以在PGA 的排序区或临时表空间的临时段中进行,由于使用临时段时需要对磁盘进行I/O 操作,降低的排序的效率,因此Oracle 建议尽量在排序区中进行排序操作。
2.2 磁盘I/O 调整
对于数据库系统来说,磁盘I/O 操作是数据库性能最重要的方面,影响磁盘I/O性能的主要原因有磁盘竞争、I/O次数过多和数据块空间的分配管理。减少磁盘I/O操作的最根本的方法就是利用高速缓存存放频繁使用的数据信息,最小化磁盘I/O,降低Oracle 服务器查找和返回行所花费时间的最有效的方法之一就是利用索引、分区。
1) 索引Index 的优化设计。索引是数据库中重要的数据结构,是优化的基础,索引把表中的逻辑值映射到RowID,因此索引能进行快速定位数据的物理地址。索引必须充分利用才能加快数据库访问速度, 建立索引根本目的是提高查询效率,利用索引行记录定位,减少磁盘的读写次数,从而达到提高查询速度的目的。一个建有合理索引的数据库应用系统可能比一个没有建立索引的数据库应用系统效率高几十倍,但并不是索引越多越好,在那些经常需要修改的数据列上建立索引,将导致系统性能的下降和存储空间的浪费。
2) 使用Oracle 分区技术。分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。这样,当对这个表进行查询时,只需要在表分区中进行扫描,而不必进行FTS(Full Table Scan,全表扫描),明显缩短了查询时间,另外处于不同磁盘的分区也将对这个表的数据传输分散在不同的磁盘I/O,一个精心设置的分区可以将数据传输对磁盘I/O竞争均匀地分散开。
2.3 回滚段设置
回滚段用于保存回退条目,将被修改的数据的初始版本保存在回退条目中,利用该信息,用户可以撤销未提交的事务,Oracle 可以维护数据库的一致性,并从实例崩溃中恢复。因此,回滚段在数据库事务处理中起着关键的作用,其设置是否合理直接影响到系统的性能。
在Oracle 10g 中,可以使用撤销表空间自动进行回滚段的管理,也可以手动进行回滚段的管理。在手工管理中,应该根据事务大小不同建立不同大小的回滚段,并分散到不同的表空间中。回滚段的数量与事务的数量有关,假设有n 个并发事务,当n < 16 时,需要建立4 个回滚段,当16 ≤ n < 32 时,需要建立8 个回滚段;当n ≥32 时,需要建立n/ 4 个回滚段[4] 。
2.4 碎片整理
由于数据库中数据库对象不断变化以及数据操作不断进行,导致磁盘碎片的产生。数据库中碎片可分为表空间级、表级、索引级三类。
1) 表空间级碎片是由于段的建立、扩展和删除引起的。可以通过重组表空间、执行AL TER TA2BL ESPACE . . . COAL ESCES 命令或先通过EXPORT程序将数据先导出,然后利用TRUNCATE 删除表中数据,最后利用IMPORT 程序将数据导入的方法消除表空间级碎片。[5]
2) 表级碎片是由于行迁移或行链接导致数据存储不连续而形成的。可以通过设置合适大小的数据块以及PCTFREE、PCTUSED 参数以尽量避免表碎片的产生。通常在创建数据库时,根据应用中记录的大小来设置标准数据块大小,保证其可以存储一条完整的记录。
3) 索引级碎片是由于索引太多、索引值变化频繁而导致B - TREE 结构失衡、叶节点排序混乱引起的。可以通过减少表上索引数量,以及在数据变化频率较低的列上创建索引或先进行数据的插入操作,然后再为表创建索引等方法,减少索引表的变化,降低索引碎片的产生。
2.5 CPU 性能调整
服务器的CPU 使用情况对数据库的性能影响很大,调整CPU 可以更有效地利用服务器的各种资源, 提高数据库的运行速度和效率。
1) 尽量利用多个CPU 处理器来执行事务处理和查询CPU 的快速发展使得Oracle 越来越重视对多CPU 的并行技术的应用,只要可能,应该将数据库服务器和应用程序的CPU 请求分开,或将CPU 请求从一个服务器移到另一个服务器。
2) 使用PQO 方式进行数据查询PQO 方式不仅可以在多个CPU 间分配SQL 语句的请求处理,当所查询的数据处于不同的磁盘时,一个个独立的进程可以同时进行数据读取。
2.6 SQL 语句优化
对数据库进行的各种操作(包括添加、删除、查询等等)最终都是通过数据库的SQL 语句来执行,因此SQL 语句的执行效率最终决定了Oracle 数据库的性能高低, SQL 语句的书写,通常应该遵循以下原则:
1) 尽量避免对全表扫描。
2) 对经常查询的表创建合理索引, 对大表的查询应在索引上进行。
3) 在字符串查询中尽可能少用通配符。
4) 如果多个表经常被查询,尽可能使其放在同一数据块中。
5) 尽量使用(not)exists 的操作替代(not)in 这样的操作。
6) 连接查询时, 要有充分的连接条件。
3 结束语
Oracle10g数据库系统性能优化与调整是一个复杂、繁琐的系统工程,贯穿于数据库系统开发的整个过程。数据库系统的优化和调整,包括内存结构调整、磁盘I/O 调整、磁盘碎片调整以及CPU 性能调整等,直接决定了整个数据库系统的性能,应该充分利用各种性能优化与调整策略进行反复的调整,以获得系统的最优性能。
参考文献:
[1] 藤永昌.Oracle数据库管理员大全[M].北京:清华大学出版社,2004.
[2] 布莱拉,马树其.Oracle 10G 新特性学习指南[M].北京:电子工业出版社,2005.
[3] 王海亮.精通Oracle 10G系统管理[M].北京:中国水利水电出版社,2005.
篇7
【关键词】性能优化;性能调整;Oracle数据库
0 前言
计算机网络领域应用较为普遍的信息管理工具就是数据库系统,而Oracle数据库是应用最为广泛的信息数据管理系统,为计算机用户带来了极大的便利,为了达到数据库系统能够有效管理数据信息的目标,需要不断调整优化Oracle数据库性能,为其安全稳定运行提高保障,保证Oracle数据库的持久发展。
1 Oracle数据库简介
1.1 Oracle数据库概述
Oracle数据库功能相当强大,起源较早,最开始出现的形式是关系型数据库技术,可以实现对数据之间的关系的了解,并通过信息库的构造将这些关系真实的反映出来。1984年Oracle数据库实现了桌面计算机与关系数据库的有效结合,随着Oracle数据库的不断发展,其各项功能也不断健全,并提供给企业类的、网络工作组、高可靠性的、产业化的应用可靠的技术支撑,实现对关系数据的高效处理[1]。
1.2 Oracle数据库主要特点
Oracle数据库的主要特点有支持多用户和大数据的高性能事务处理、硬件环境独立、对完整性和安全性的良好控制,同时Oracle数据库还遵守网络通信协议、数据存取语言等相关的工业标准。另外Oracle数据库支持分布式数据库和分布处理,拥有可连接性、可兼容性、可移植性的特征。实现不同型号的计算机和不同操作系统下可以运行Oracle数据库的需求,其自身独有的特点满足了不同用户的不同要求,符合时展潮流。
2 Oracle数据库性能调整
2.1 调整Oracle数据库内存参数
Oracle数据库内存参数的调整主要是针对其系统全局区进行的。其主要组成部分有日志缓冲区、数据缓冲区、共享池。系统全局区伴随着环境的变化做出相应改变,在对其进行调整的过程中要考虑数据库的运行模式、操作系统的内存容量、系统的类型是裸设备还是文件系统、物理内存的大小。系统全局区大约占数据库物理内存的40%-60%,系统全局区大小直接受初始化参数的决定性影响,主要参数有WORK
AREASIZEPOLICY、LOGBBUFFER、SHARED_POOL_SIZE、DB_CACHE_
SIZE、DB_BLOCK_SIZE。WORKAREASIZEPOLICY参数的有MANUAL和AUTO两种可选值,可根据实际情况进行选择;LOGBBUFFER能够指定Oracle数据库内存空间的大小,即写入到重做日志文件中的通过缓冲区写入的重做日志;SHARED_POOL_SIZE对数据库共享内存池其直接决定作用;DB_CACHE_SIZE对默认缓冲池的大小产生决定效用;DB_BLOCK_SIZE对创建数据库每个模块的尺寸产生直接影响。对这些参数进行调整有利于实现Oracle数据库的内部优化,为Oracle数据库的稳定运行提供可靠的后台保障[2]。
2.2 调整Oracle数据库操作系统资源
运行服务器的操作系统对Oracle数据库服务器产生直接影响,操作系统的性能若是出现故障,则无法进行Oracle数据库性能的有效调整。首先,需要对操作系统的换页空间进行适当的调整,优化配置其内存分配,通过数据库的实际运行情况的调查,相关的管理人员可以调整内在资源,同时对操作系统的换页空间也要做出相应的调整。在换页空间的大小检查过程中,当换页空间的物理内存大于2G时,就需要对其进行适当的调整,如果物理内存小于2G,则需要将换页空间的大小设定为物理内存的1.5倍。另外在创建换页空间的时候,应尽量将换页空间设置在不同的硬盘中,提高换页空间的性能,通过smitty mpks增加换页空间或者是利用smitty chps对原有的换页空间的大小进行修改,以此来调整其性能。其次,对数据库的硬盘I/O进行调整,在I/O的设计阶段管理员就应当优化调整其操作方式,管理员想要实现的系统类型与与I/O设计联系密切,不同的数据库系统需要不同的I/O设计方案和不同类型的I/O模式。当创建系统之后就需要对系统的内存进行调整,将磁盘I/O调移,以此保证磁盘I/O调整工作顺利进行,简化调整程序,不必考虑缓冲区命中率过低的问题。对于数据库的性能来说磁盘I/O操作发挥了极大的作用。影响磁盘I/O性能的因素有I/O次数过多和磁盘竞争等,对其调整时可以将组成同表的数据分置在不同的磁盘中,使硬盘之间的I/O负载达到均衡。最后是对数据库的核心参数配置进行调整,通常情况下设置系统核心参数时都会设置较低的参数值,需要在运行的过程中不断进行调整,在运行Oracle数据库过程中将Default128增加到500,调整maxuproc来发挥效用,保证Oracle数据库的稳定运行。
3 Oracle数据库性能优化
3.1 优化Oracle数据库索引
由于索引在用户使用数据库的过程中为用户检索提供了便利,所以Oracle要优化数据库中的索引,索引出现问题直接影响Oracle数据库的利用效率,为用户的数据库使用和查询带来不便。对Oracle数据库索引进行优化主要有两种方式,第一种是手动优化,在Oracle数据库中通过手动方法对其索引进行优化主要依靠Oracle数据库的图形性能工具Oracle Enterprise Manager Console,在相应的Oracle数据库中,通过用户的登陆权限登陆到指定的索引界面,找出SYAPP数据库中的位于索引区里的XTWHZDBMB_X功能菜单,点击鼠标右键选择功能菜单中的“移去”选项,将不正确的索引选中并删除,或者将不符合数据库实际信息内容的索引进行修改,及时更新数据库的索引列表。第二种索引优化的方法是命令行方法,根据Oracle数据库提供的相关SQL环境,利用特有的命令语句,在索引命令设置时输入DROP INDEX XTWHZDBMB_X命令语句,利用该命令执行删除不必要索引的的指令,或者输入其他的命令将索引进行索引替换、更新命令执行语句,对Oracle数据库的索引进行优化。通过这两种方式实现Oracle数据库索引的优化,从而保证Oracle数据库的安全运行,为用户数据利用和检索查询带来便利。
3.2 优化Oracle数据库内存
对Oracle数据库的内存进行优化主要是在SGA调整的基础上进行优化,在使用Oracle数据库过程中不断检查,首先,对共享池优化,对其优化的原因是它能够高速缓存PL/SQL、SQL语句,通过最少算法进行管理的功能程序,当共享池内的SQL语句超出额定值之后,该算法则除掉不常使用或很少访问的语句,为新的SQL语句提供更多的空间。使用共享池的这项功能可以实现Oracle数据库将用户常用和流行的PL/SQL、SQL语句保存在数据库中,逐步将不常用的语句更新换代,优化Oracle数据库的内存,得到最新的信息,以此来适应用户对数据库不同的需求。其次,是对缓冲区高速缓冲存储器进行优化工作,实现用户对自己的PL/SQL和SQL语句缓存版本的检索,还可以查找到请求的相关数据。充分发挥缓冲区高速缓冲存储器的作用。用户在使用的过程中常用LRU列表进行管理,用户对应用程序的访问模块大多存放在最近使用端,通过全表扫描对对常访问的表进行优化检查,当发现常用表较小的时候,就有很能全表扫描对该表进行访问。但当全表扫描在LRU列表的最少使用端放置该表的缓冲区,这些该缓冲区就容易被移走,只有程序用户重新利用的时候,才会在内存中看到,解决这一问题,采取的优化方式就是在全表扫描的过程中,将缓冲区存储在LUR列表的最多使用端,利用这种方式可以将内存中的缓冲区留存的时间更久,便于用户对其进行有效访问。提高Oracle数据库的利用效率。
3.3 优化Oracle数据库分区
Oracle数据库引用分区技术有效的解决了大索引、大表的可用性和相关性能的问题,通过对其拆分,在对操作资源的请求上进行限制,分区变小就会加快系统的访问速度,提高系统效率。Oracle数据库的分区技术还可以有效的解决信息资源管理数据库的其他检索和相关表的使用问题,对Oracle数据库分区进行优化同时可以实现对其他性能的优化。Oracle数据库虽然拥有分区技术,但在实际应用中仍存在缺陷,Oracle数据库中已有的普通表无法实现直接修改属性转换为分区表,只有通过重建的方法才能进行转换,但是信息资源数据管理系统适用的时间较长,一旦投入使用其各项性能设计都已经定型,很难通过重建对普通表进行分区表转换。这时在优化的时候可以利用交换分区技术和在线定义功能对普通表进行分区化转化,实现对Oracle数据库分区的优化。在线定义功能是指在保证数据的一致性的基础上对操作表进行命令指示,进行DML操作,切换完成后可以不进行其他额外管理程序。交换分区是修改表的定义,对数据不进行任何操作行为,从而提高数据库优化的效率,准确的检查表中的数据的完整性。在对其分区转化之后,就可以实现对Oracle数据库的优化,从而提高Oracle数据库工作效率。
4 结论
综上所述,通过对Oracle数据库性能调整与优化的分析研究,可以看出Oracle数据库性能的调整和优化意义重大,完善Oracle数据库各项功能有助于实现Oracle数据库的稳定运行,在使用过程中不断的进行优化检查,及时对性能进行优化,实现Oracle数据库的持久发展,推动数据库技术的发展,为人们提供利用和服务。
【参考文献】
篇8
【关键词】MES;数据库;中间件;优化
1.问题的提出
包钢宽厚板MES于2007年年底与生产同步上线,系统的投入运行在生产质量控制方面起着举足轻重的作用,但随着系统的的使用,新需求的提出和改进再所难免,上下互联的系统间的交互业务非常频繁,用户多,访问量非常大。作为业务支撑的软件系统也处于不断的改进和变化之中。该系统数据库经过一段时间的运行以后,随着数据库表规模的不断扩大,数据量的不断积累和增加,应用程序访问的改进和变化,其性能随着使用时间的延长而逐步呈现下降的趋势,所以对该系统数据库的性能优化有着重要的意义。
2.MES系统构成
宽厚板MES系统的主机平台采用两台IBM公司UNIX小型机P55A,组成集群(Cluster)结构的高可用硬件平台,一台作为数据库服务器,另一台作为应用服务器。每台服务器配置4路1.65GHz CPU,内存为8GB,内置2块73GB硬盘。两台P55A服务器采用双机热备份的方式,当一台服务器故障时,由HACMP集群软件提供的自动切换功能使另一台服务器可自动接管故障服务器的功能,保证整个主机系统不间断地运行。两台服务器之间用专用快速通道互连构成Cluster集群系统的高速心跳线,并共享一套磁盘阵列,以保证应用系统的高可用性。数据库采用ORACLE公司的10g企业版数据库,极大地提高了系统的可靠性及处理能力,保证系统持续运行。系统中间件软件采用BEA公司TUXEDO 8.1交易中间件。与相关外部系统之间的通信采用基于TCP/IP SOCKET协议的XCOM通讯中间件进行电文通讯,软件则是采用C/M/S三层架构方式,前台采用流行的.net开发,实现用户UI画面,操作简便易行,前台把用户的请求转化为与TUXEDO中间件的数据交互。中间件TUXEDO,它具有高可靠性,负载平衡等优点,它屏蔽了底层操作系统的复杂性,使程序开发人员变得简单统一,大大减少程序设计的复杂性。客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间的集成和事务控制都由TUXEDO来完成。数据库后台开发采用PROC C,采用固定模板针对业务逻辑进行数据的转换和处理,把获取的数据传递给TUXEDO,来实现相应的业务逻辑功能。
3.服务器优化
宽厚板MES系统初期使用了两台服务器,由于资金限制只购买了两台服务器,一台运行数据库和应用,另外一台作为测试和开发平台使用。自2007年上线后,随着生产的稳定运行,信息数据量逐步增加,服务器的负荷也越来越大,在使用高峰时CPU使用率为55~78%左右,明显感觉到应用的迟滞不流畅,鉴于这种情况,我们在2010年申请又购置了两台服务器,把应用和数据库彻底分离,新购服务器一台替换原先的测试开发平台,另一台则作为系统数据库备份。分开后的的数据库服务器和应用服务器,其CPU在使用率上没有超过50%,系统运行效率明显得到提高。
4.TUXEDO优化
宽厚板MES系统在运行某些占用时间较长的应用时,多个人同时操作,会出现长时间的等待后,前台画面会报一个“后台程序调用失败”的错误,经过我们分析,原来在中间件TUXEDDO系统中每个服务SERVER默认只启动了一个进程,这样导致当多个请求同时发起时,一些请求会因为超时导致调用失败,查找资料,我们发现服务SERVER可以启动多个进程,假如原来某个SERVER所启动的进程数较少,可适当增加它的进程数,以下所示:
"qmhppsrv"SRVGRP="GROUP4"SRVID=3 MIN=1 MAX=1
RQADDR="qmhppsrv"REPLYQ=Y
改成
"qmhppsrv"SRVGRP="GROUP4"SRVID=3 MIN=1 MAX=4
RQADDR="qmhppsrv"REPLYQ=Y
我们针对使用频度较高的服务SERVER这样更改之后,出现调用失败的几率大大降低。
5.前台程序优化
当数据库结构固定不变的情况下,前台程序操作数据库的优化核心目标是减少数据的返回量,主要措施是限制查询条件来减少返回的数据量。由于系统代码由多人完成,每个人的水平和编程习惯不同,造成我们后期使用中发现大量性能上的问题,对此我们做了大量修正。
比如:没有采取后台分页技术,直接在返回全部数据后再在前台上做分页,这样导致数据库和网络负荷的增加,效率低下,操作时间一般在几十秒以上,通过修改后操作时间基本是原时间的十分之一左右。还有就是经常使用的一些数据字典小表,每次操作都要从后台再获取一遍,效率较低,改动的办法是当进入该UI画面时只获取一次,这样也减少了系统负荷。另外针对一些多个数据表关联,大数据量操作的应用,做了业务拆分,分画面分步骤实现。
总之,前台优化总体把握就是减少数据量的操作和访问的原则,在这个前提下的优化工作基本上难度不大,且效果显著。
6.数据库SQL优化
系统后台程序的优化工作主要是SQL语句的优化,从获取的大量资料来看,SQL语句的优化是数据库最有成效的一个手段,因此SQL语句的影响非常大,系统往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,应用服务器断连、超时,严重影响业务的正常运行。宽厚板MES系统中发生多次性能危机中,90%都是SQl语句使用不当造成。
这里我们借助使用第三方Oracle工具TOAD,进行系统问题的查找定位,具体方法如下:
首先通过数据库系统性能的监控,定位出现性能危机时的准确时间。
根据时间段通过导出ORACLE的AWR报告,分析其中I/O、CPU占用较高的SQL语句
通过TOAD中执行计划具体分析SQL语句的cost,cost的高低决定数据库执行的效率,cost越小效率越高。
使用ORACLE中SQL优化功能建议,结合实际情况,对后台程序进行优化。
下面列举一些常用的手段和方法。
6.1 建立必要的索引
必须熟悉数据库应用程序中的所有SQL语句,从中分析、归纳出作为Where条件子句的字段及其组合方式;在这一基础上可以初步判断出哪些表的哪些字段应该建立索引,索引对SQL语句的性能会产生举足轻重的影响。
建立索引常用的规则如下:
表的主键、外键必须有索引;
经常与其他表进行连接的表,在连接字段上应该建立索引;
经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
索引应该建在选择性高的字段上;
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
频繁进行数据操作的表,不要建立太多的索引;
删除无用的索引,避免对执行计划造成负面影响;
由于许多索引未建,导致全表扫描,尤其当数据量大时,基本上查询时间需要几分钟左右都不一定完成,所以,建立合适的索引非常重要。
6.2 提高使用索引的效率
虽然建立了索引,但实际编程过程中,不同的SQL语句的写法,会导致索引无效。
避免对列的操作,任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
增加查询的范围限制,避免全范围的搜索。从而提高查询效率。
尽量去掉“IN”、“OR”,对含有“N”、“OR”的Where子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。然后再做一个简单的加法,与原来的SQL语句相比,查询速度更快。
分解复杂查询,用常量代替变量,对于复杂的Where条件组合,Where中含有多个带索引的字段,考虑用IF语句分情况进行讨论;同时,去掉不必要的外来参数条件,减低复杂度,以便在不同情况下用不同字段上的索引。
like子句尽量前端匹配,因为like参数使用的非常频繁,因此如果能够对like子句使用索引,将很高的提高查询的效率。在做like查询时,应该尽量使查询的匹配端是具体值,例如使用like‘512%’。
应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的,让字段顺序与索引顺序相一致。
索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
任何地方都不要使用select*from t,用具体的字段列表代替“*”,数据的提取速度就会有相应的提升。
尽量避免大事务操作,提高系统并发能力。
以上的方法,是完全可以相互结合同时运用的。而且各种方法之间相互影响,紧密联系。这种联系既存在一致性,也可能带来冲突,当冲突发生时,需要根据实际情况进行选择,没有固定的模式。
7.数据库备份系统
宽厚板MES系统运行到目前已经有6年多了,数据随着时间不断增长,部分数据表的量已达几千万,历史数据的查询使用由于数据量大会直接影响系统的正常稳定运行,原系统没有历史数据导出备份功能,因此,做为优化系统性能重要一部分工作内容,我们自主开发了历史数据导出备份系统,将其中的历史数据,按照合同关系的逻辑,从订单开始到发货结束进行打包归档,减轻在线系统的负荷,目前备份系统已经投入运行。
8.结束语
应用系统的性能调整与优化是一个系统工程,涉及的方面很多,是一个长期不懈、不断比较分析和调整的过程,需要全面系统地规划考虑才能对数据库运行状况做出一个综合评估。只有深入领会和掌握Oracle数据库系统所提供的强大功能,正确观察和分析系统运行中提供的各种信息,充分结合实际应用特点,才能合理制定出良好的优化策略,目前,本系统数据库经过长期的研究开发、推敲测试和调整优化,数据库性能已有较大的提高,较好的满足了本系统众多软件程序的访问使用,本系统数据库表现出了较高的稳定性和较好的使用性能,从而验证了所述采取的若干优化措施是切实可行有效的。
当然存在的问题也不少,有一部分应用由于业务逻辑复杂,优化有一定的难度,光从SQL语句单一优化已经提高不了多少效率,将来只能从业务逻辑拆分,简化分步流程来实现优化的目的。
参考文献
[1]王勇.基于SQL数据库的性能优化问题分析[J].电脑知识与技术,2008,15:1004-1007.
[2]吕华,杜忠军.数据库性能优化[J].计算机应用,2003, 23(06).
篇9
关键词:中文期刊,全文数据库,数据库系统
引言在追求快速、方便的网络时代,只提供题录、文摘数据库已不能满足读者的要求,全文数据库的建设是今后发展的方向。许多文献数据库都是通过网络和提供检索的,面对的是没有检索经验的用户和巨大的文献处理的难题,如何建立一个有价值的、用户满意的、实用的全文数据库就成为广大图书情报人员深入研究的课题。
全文数据库除提供一般题录数据库的题名、分类等检索途径外,还提供全文检索。全文检索是利用了文献中的自然语言作为一个检索入口,这种自然语言的检索方式比较符合用户的易于利用的需求。
中文与西方国家的语言不同,由大量独立汉字组成,因此在建设中文全文数据库时要注意数据库系统、编码与开发工具的选择。
1 全文数据库系统软件基本模块的设计构想由于全文数据库是非结构化的数据,因此全文数据库的结构(记录、字段、子字段等)的划分及长度的确定,往往随文献本身的内容特点而彼此有很大的差异。与之相对应,全文数据库系统的软件及其功能模块也会有很大的不同。作为功能完备的全文数据库系统,应该具有以下的结构特点及全部或大部分功能模块。
1.1 数据库结构定义模块这一模块主要是确定库的记录、字段(包括重复字段或子字段),确定相应记录或字段的索引方式。字段设计之目的在于:增加正文之外的信息项,增加检索的切入点;提高检索的查准性,借以进行字段限定检索,并提高检索速度;索引方式的确定,以字段为单位。索引方式有四种:全字段作为一个完整单位作索引;以< >标引符号内字符串作索引;以%分割的重复字段作索引;每个字作索引(单字索引,主要用于正文字段)。在一条记录中,字段的个数应不限,一般最多能达到数百个字段。
1.2 数据预处理模块由于全文数据库的数据基本上来源于外部数据,对不同格式的数据处理采用不同的方法。
电子排版文本。这种文本中含有排版符号。如果全文数据库建立在这种排版软件基础上,则文本无需加工。但多数全文数据库系统并非建立在这种排版文本基础上的,因此有必要通过软件一次全部删除排版符号,同时应解决由于删除排版符号而带来的问题,如补字、数学公式、上下标等等,使之成为完整的纯文本文件。
网上下载的PDF文件、网页文件、光盘上记录的某些特殊格式的数据。如果全文系统采用纯文本格式,则需对其转换。
以上这些文件的转换,需要编制工具软件,或利用已有的转换工具。
文本预处理还包括数据的批式标引。这是建立全文数据库之前特别是数据装载之前,主要是利用文字处理软件和专门自动标引软件对数据进行的标引,或按自己建立的标引词表,对文本进行的扫描标引。
1.3 装库模块装库就是将数据预处理后的文本数据导入已有的库结构之中。
有的全文库要求将数据转换成ISO2709(CNMARC)格式才能装库;有时可将有一定标志的文本格式装库;有的则将文本按原格式导入库结构;有的不实际装库,只在系统中建立指向文本文件地址的指针。可以根据具体情况选择装库方式,但最后一种方法不推荐使用。
1.4 标引模块全文库正文的单字索引,不必建立,因为系统有识别每个汉字和其他符号或外文字串索引功能。
在以单字为基础的索引中,以布尔逻辑为手段进行检索,误检率极高,需以位置检索手段进行检索,用以提高查准率。以单字为基础的索引的优点在于不需要人工标引,可实现索引的自动化,从而大大提高了建库的效率。但单字索引也存在明显的缺点,即同义词、相关词无法控制,解决办法可以通过在检索匹配模块设置后控词表进行后控检索。
1.5 索引作业模块索引作业就是按照库结构定义中的索引字段生成索引的过程,一般生成一个索引即可。为了区别不同字段的索引款目,可以在索引定义中加文字常量。这样在混排索引中就可以把不同属性的索引款目相对集中,在检索时,可以进行按字顺显示。如要检索作者为“高山”的著作,应这样输入检索式:“AU = 高山”,从而可以避免检出作为关键词的“高山”及正文中的“高山”。全文索引的主体应该是正文的单字索引,借助这种索引可以使全文中的任何信息、中心主题信息与边缘性信息都能被检索出来,避免标引中的遗漏和主观武断,从而实现检索的彻底性。
1.6用户输入检索式模块这一模块是全文数据库系统与用户之间最直接的接口,也是决定检索结果好坏的关键。全文数据库的使用者往往缺乏系统检索经验,要查到一些信息容易,但查全、查准信息较难。全文库检索主要是使用自然语言,缺乏词汇的控制,因此随意性较大,检索效果的评价也缺乏明显的验证标准。要引导用户正确提出检索式,一般来说有三种基本的引导用户的模式:
询问表方式。即在用户检索时,系统提出一个询问表格,检索项目由用户填写。这些项目如:欲检索的篇名、作者姓名、关键词、分类号、单字等等。不必要求用户每项都填,即使只填一、二项也可。询问表方式引导用户表达自己信息需求的方式,对无检索经验者较为有用。
词典式检索。此方法适用于一般用户。按词典检索时,应能允许用户从显示词表中用光标选词,并且可选一个以上的词,被选中的词以“或”方式连结。如果读者要用“与”“非”方式,应能从表下所附的AND、NOT中点出这些运算符,使之形成检索式。总的来说,其目标应该是减少用户自己输入汉字和运算符,以提高效率并减轻其负担。
命令方式。这是供有一定检索经验的用户使用的,功能最为强大。命令方式主要是布尔运算、位置运算、括号嵌套、截断符号、字段限定等。
1.7 用户检索分析处理模块系统对来自屏幕的用户检索式加以处理,使之形成便于运算的检索方式。论文参考。对于复杂的检索式,需要进行逆波兰变换,确定各检索项的运算次序。对询问表的检索式也需根据用户所填数据形成检索式。对标引词表显示中用户光标指定词加以收集,并形成检索式。
在这一模块中,系统还应该检查用户提问检索式是否有错误(如左右括号不配对,数个运算符连用,字段文字常量输错等),如发现错误,应向用户做出提示,并给出修改建议。
1.8 检索匹配模块这一模块与一般检索系统相同,但作为全文数据库来说还应具备下列功能:
较强的位置检索功能。由于全文库往往对正文字段单字索引,因此对单字的布尔检索不大适用,而应以位置检索为主。位置检索时,应对紧密相邻的几个字采用连写方法,不必插入位置运算符。或者说,字与字之间默认的运算符是彼此紧密相邻。
全文库或指定集合中的顺序扫描匹配检索。当对正文作单字索引的情况下,允许用户使用这种扫描匹配进行检索。用户只需输出一个字符串(词或短语),计算机就开始对全库或指定集合进行检索匹配。
1.9 检索结果的处理模块检索结果的处理主要包括:显示浏览有关记录(段或句子)文本。排序:可由用户指定排序键。排序键可以是年代、字顺或命中频率。排列次序可以是升或降序。聚类:在有属性标引的全文库中可进行聚类。打印:可将命中结果打印输出。下载:可以提供文本格式或机内数据格式两种下载方式。
2 数据库系统、开发工具及中文编码的选择2.1 数据库系统的选择理论上现在成熟的大型关系数据库软件均可作为中文期刊全文数据库系统,但从市场占有程度及成本和易用性考虑,用来存储中文期刊全文的数据库系统建议从以下几种平台中进行选择。如果服务器端操作系统为Unix或Linux,并且经费预算允许,建议选择Oracle作为数据库系统。Oracle数据库是一种具有无限可伸缩性与高可用性,并可在集群环境中运行商业软件的互联网数据库,具有400多个领先的数据库功能,在集群技术、高可用性、商业智能、安全性、系统管理等方面都实现了新的突破。如果从降低成本考虑,可以选择MySQL作为数据库系统。以上两种数据库还提供支持Windows操作系统的版本,具有跨平台能力。
如果服务器端操作系统为Windows,则建议选择SQL Server作为数据库系统。SQL Server是一个全面的数据库系统,使用集成的商业智能(BI)工具提供了企业级的数据管理。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,可以构建和管理用于业务的高可用和高性能的数据应用程序。
2.2 开发工具的选择如果系统需要跨平台部署,在选择Oracle或MySQL数据库系统的基础上,建议选择Java为开发工具。Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。如果对跨平台没有要求,并选择SQL Server数据库系统,则建议选择Visual Studio为开发工具。Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应用程序开发环境。目前已经开发到 9.0 版本,也就是 Visual Studio 2008。Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office 插件。
2.3 中文编码的选择中文编码主要有以下四种:
GB2312:简体中文编码,一个汉字占用2字节,在大陆是主要编码方式。当文章中包含繁体中文、日文、韩文等等时,这些内容可能无法被正确编码。
BIG5:繁体中文编码。主要在台湾地区采用。
GBK:支持简体及繁体中文,但对其它国家非拉丁字母语言还是有问题。论文参考。
UTF-8:Unicode编码的一种。Unicode用一些基本的保留字符制定了三套编码方式,它们分别UTF-8,UTF-16和UTF-32。在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。论文参考。这种方式的最大好处,是UTF-8保留了ASCII字符的编码作为它的一部分。UTF-8俗称“万国码”,可以同屏显示多语种,一个汉字占用3字节。
因此,为了保证全文数据的存储和显示不出现问题,建议选择UTF-8为数据库系统编码,应该在装库操作前对所有内容进行编码转换,统一转换成UTF-8编码。
结语全文数据库以其内容完整、直接提供一次文献等特点,越来越受到人们的关注。全文数据库给网络环境下的信息交流提供了更为方便快捷的途径。在全文检索技术日趋成熟的条件下,全文数据库在供读者利用方面表现出的优势是其它类型数据库所无法替代的。因此,对中文全文数据库的设计进行研究,是信息服务发展的必然要求。
参考文献[1]秦剑.我国数据库建设的思考与展望[J]河南图书馆学刊,2002,(04).
[2]程文艳.数字图书馆——数字中国的开路先锋[J]情报科学,2002,(06).
[3]杨丽兵.浅谈中文过刊编目数据库建设工作[J]农业图书情报学刊,2004,(01).
[4]何凯文.我国高校图书馆数字资源建设的问题及发展途径[J]图书馆建设,2004,(05).
[5]曾莉红.基于点击率的全文数据库检索结果组织方法探讨[J]情报杂志,2007,(06).
篇10
关键词:Oracle数据库;索引;硬解析
引言
Oracle数据库以支持大数据量、多用户、高并发事务处理等优势,越来越多的被应用在大型企业,如电信、银行、电力等部门,随着高访问量所带来的压力逐渐增大,系统会出现吞吐量低,响应时间长等性能问题,为了解决这个问题有必要对数据库进行优化,数据库的优化可从两方面进行分析研究,制定出优化策略。
1 影响Oracle数据库系统性能的因素
Oracle数据库性能问题受到多方面因素影响,包括硬件环境,网络I/O,应用程序规范,数据库参数配置,行迁移等
(1)数据库服务器硬件环境:cpu,内存,网络传输状况等方面均会影响oracle的性能。
(2)数据库参数配置:Oracle数据库为用户提供了大量的参数配置,根据具体的应用环境,调整参数配置,可以使数据库达到更优,相反,错误的参数配置可能令数据库性能低下。
(3)网络I/O:计算机的输入输出(I/O)是很耗时的系统行为,I/O优化就是通过一定的措施减少I/O消耗时间。
(4)应用程序的实现:对于程序员而言,不合理的sql语句书写直接影响到Oracle数据库的性能,且后期更改难度大。如书写sql语句不使用绑定变量,会使数据库出现大量的硬解析,从而影响数据库性能。
(5)行迁移:表中存在的数据,在update操作过程中,行可能会变长,此时,行会使用数据块内的剩余空间,当数据块内没有剩余空间的时候,数据会选择新的数据块进行存放,行头会保留在原数据块中,指针指向新的数据块内的行,造成读取数据的时候产生两次I/O,下降了数据库的性能。
2 数据库优化
2.1 内存区调整
(1)在Oracle 10g以及以上版本,提供了内存的自动管理,Oracle会根据应用的特点和服务器本身环境自动调整内存,SGA_TARGET参数就决定了是否使用SGA自动管理,该参数不为0时为自动管理,该参数为动态管理。
(2)将数据常驻内存:在生产数据库中,有些经常被访问的小表,可以将其常驻在内存中,以避免对该表访问时频繁产生磁盘I/O,以空间换时间,使响应速度增大。具体方法:
SQL> alter system set db_keep_cache_size = 200M;//开辟出200M的常驻区域;
SQL> alter table t1 storage (buffer_pool keep);//把表t1常驻在内存中。
2.2 磁盘I/O调整
(1)分开存储数据文件和索引文件。Oracle数据库在提取数据的时候会去索引和数据文件里读数据,将这两个文件分开存放在不同的硬盘上可以增加读取速度以提高性能。
(2)日志文件的存放位置。日志文件写操作比较频繁,可以选择存储在固态硬盘等高速存储上。
(3)使用分区来避免磁盘争用。当一个表很大的时候,如:1GB(具体和环境有关),可以考虑分区,把一个表的分区存放在不同的磁盘上,吞吐量可以大大增加。分区的类型有多种,如范围分区、哈希分区、组合分区、列表分区。
2.3 回滚段设置
回滚段保存着数据更新的前映像,当事物回滚时会用到此前映像,原则上讲,建议每个回滚段能同时进行4个事物处理,但也应该根据系统需求来设定回滚段的数目。
2.4 碎片整理
SQL> ALTER TABLE T1 ENABLE ROW MOVEMENT;//允许表T1 可以在线回收碎片
SQL> ALTER TABLE T1 SHRINK SPACE;//进行空间回收
2.5 处理行迁移
利用移动表的存放位置来消除行迁移,操作语句为:
SQL> ALTER TABLE T1 MOVE TABLESPACE tablespace_name;
此操作会使T1表在数据库中重新码放,但是索引会失效,注意要重建索引。
2.6 绑定变量
移动渠道管理系统是OLTP(On-Line Transaction Processing联机事务处理)系统,绑定变量是OLTP很受关注的一个技术点,OLTP数据库系统中大量的sql语句并发执行,速度飞快,内存效率极高,绑定变量后会减少大量的sql语句解析消耗,从而减少数据库压力。
2.7 索引的建立与维护
索引是将无序的数据有序化,这样可以在查询数据的时候减少数据块的读取,实现快速定位数据。数据库自动维护索引,但随着大量的增删改操作,索引会产生许多空洞,可以采用合并或重建索引的方法进行优化,以提高访问速度。操作命令为:
SQL> ALTER index index1 coalesce;//合并索引的空洞
SQL> ALTER index index1 rebuild;//索引的重建
合并并不释放索引段所拥有的空间,不处理正在变化的行,重建只能在没有事物的情况下进行,如果有未提交的事物,则会报错。
3 Oracle常用优化工具
(1)Oracle数据库数据字典和动态性能视图,Oracle动态性能视图能反映出Oracle动态运行情况,对于数据库的性能调整很有帮助。
(2)Oracle Statspack是DBA用来诊断数据库的工具,在Oracle8i已经被引入,并经过多次调整增加的许多强有力功能,可以帮助DBA迅速定位数据库瓶颈所在。此工具脚本存放在$ORACLE_HOME/RDBMS/ADMIN目录下,spcreate.sql为建立用户和表脚本,以后采集的数据库信息会放在这个用户和表内。spreport.sql为收集快照脚本。
(3)Oracle AWR(automatic workload repository自动工作负载信息库),Oracle建议用户用这个取代statspack,AWR实质是Oracle的一个内置工具,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在问题。它产生两种类型的输出,文本格式和HTML格式,提供了非常友好的用户报表。此工具脚本存放在$ORACLE_HOME/RDBMS/ADMIN目录下,名字为awrrpt.sql。在sqlplus下可以直接执行,如:SQL>@$ORACLE_HOME/RDBMS/ADMIN/awrrpt.sql
(4)Oracle ASH(Active Session History),此工具从Oracle10gR2开始引入,和AWR相比,ASH侧重于当前活动回话的信息分析,Oracle每秒钟会对数据库中活动的回话信息进行采样,这些信息被存放在一个动态循环使用的内存区域中(位于SGA区),此区域是循环使用的,数据库活动越频繁,老的数据越会被快速覆盖掉。软件包也存放在$ORACLE_HOME/RDBMS/ADMIN目录下,名字为ashrpt.sql。
4 结束语
文章针对移动渠道管理系统数据库性能调整的实践经验,总结了导致数据库性能下降的原因和优化方法,数据库性能问题在最近几年越来越受到DBA的关注,只有在实践中反复实验调整,才能使数据库系统获得最优性能。
参考文献
[1][美]Richard J・Niemiec,Oracle 10g Performance Tuning Tips & Techniques[M].北京:清华大学出版社,2010.