基于物化视图的系统性能优化方法及系统的制作方法

文档序号:6468679阅读:135来源:国知局

专利名称::基于物化视图的系统性能优化方法及系统的制作方法
技术领域
:本发明涉及数据库领域,特别涉及一种基于物化视图的系统性能优化方法及系统。
背景技术
:作为高级的非过程化编程语言的结构化查询语言SQL(StructuredQueryLanguage),允许用户在高层数据结构上工作,它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,因此具有完全不同底层结构的不同数据库系统都可以使用相同的SQL语言作为数据输入与管理的接口。对于传统的SQL查询排序实现方式来说,需要把查询出的结果集,在表中做排序、分组、计算、过滤等操作,由于这些操作分析需要将结果集进行具体化的显示,因此象SQL查询和视图这种在使用时才需要读取的操作都需要消耗一定的资源。如果有大量的排序操作的动作,全表扫描就会对数据库的性能产生巨大的冲击,从而快速加升逻辑读的数量。当这种并发SQL查询很多的时候,数据库端的内存就成为瓶颈,并且这种方式对于小带宽的WEB应用不适用,因为每次都从大数据集取元数据进行分析的时候,数据库端的性能就会成为瓶颈,CPU、IO内存的资源消耗,带来这些性能指标的一定偏差,造成系统反应变慢,这时数据库服务器运行健康状态也不太良好。物化视图(MaterializedView)能够在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,从而不再需要重新执行查询。在查询要执行几次时(这在数据仓库环境中非常常见),这是一个很大的好处。物化视图提升性能的原理就是它是"视图+查询出的数据"形成的数据快照,一瞬间取出的数据结果集。对于查询出的结果集所做的一系列的操作,而它只要扫描一遍,所以物化视图这种快照、一瞬间的数据集的实现方式是一种最快的访问方法。但是,在数据稳定时,大量类型的SQL的排序,基于对基表(底层表)的大量分组、运算、排序来实现,从而造成的翻页查询程序,由于使用的物化视图依赖于基表的改变,所以基表的数据的浮动需要日常频繁的手工刷新,达到数据同步,但由于中间的人工操作,使出错的几率增大,程序的稳定性偶尔也会出现问题。
发明内容为解决传统的需要手动的刷新物化视图,引起数据的浮动从而带来数据不准确性的问题,本发明提出了基于物化视图提升性能优化方案。一方面,本发明提供一种基于物化视图的系统性能优化方法,包括如下步骤捕获SQL查询语句;确定引发系统全表扫描的SQL查询语句所构成的问g表;针对前述问题基表创建物化视优化所创建的物化视利用所优化的物化视图处理相应的SQL查询。其中,所述优化所创建的物化视图的步骤进一步包括为物化视图创建定时刷新机制的步骤;以及为物化视图创建索引的步骤。优选的,本发明根据以下步骤为物化视图创建定时刷新机制创建刷新物化视图的作业类;设置标准调度器工厂,生成调度器实例;创建一个作业详细信息实例,设置对应的作业实现类;设置触发器,设定进行定时刷新的触发时间;绑定作业详细信息与触发器;启动调度器。另一方面,本发明提供一种基于物化视图的系统性能优化系统,该系统由客户端和服务器端组成,所述服务器端包括系统服务器和性能优化服务器;所述性能优化服务器包括SQL查询语句监测单元,用于监听客户端发来的SQL请求;问题基表确定单元,用于从SQL查询语句监测单元监听的SQL请求中确定引发系统全表扫描的SQL查询语句所构成的问题基表;物化视图创建单元,用于根据问题基表确定单元确定的问题基表创建相应的物化一见物化视图优化单元,用于对创建的物化视图做进一步优化处理;所述系统服务器用于利用所优化的物化视图处理相应的SQL查询。与现有技术相比,本发明采用物化视图调用流程,改善了以前传统的需要手动刷新物化视图的不准确性问题,以及手动同步刷新给基表的操作性能带来的影响。本发明提供的定期自动刷新技术,加上索引,使数据达到比较佳查询状态,确保用户看到的数据快速准确。同时,釆用本发明,使得数据库服务器的底层资源的消耗随之变化,更有效地减少逻辑读取,因为不需要实时的进行数据复杂的运算进而减少的CPU的消耗,显著的提高数据快照的扫描速度。图1是本发明实施例的物化视图自动刷新流程示意图;图2是本发明实施例的设置定时刷新的流程示意图;图3是本发明实施例的总流程示意图;图4是本发明系统实施例的逻辑结构示意图。具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。为了更清楚直观的说明本发明的技术方案,将实现本发明的一个实施例所采用的示例性硬件和软件环境定义如下才喿作系统LinuxAS4内核版本64位MEM内存容量2Gswap^奐页空间2Gcpu:Pentium(R)DCPU2.80GHZoracle版本10.2.0.2.0需要说明的是,上述操作环境只是适当的操作环境的一个示例,并不意味着对操作环境的适用范围和功能的任何限制。其他适用于本发明本所述的基于物化视图提升性能优化方案的公知的计算机系统、环境和/或配置包括但不限于个人计算机、服务器式计算机、多处理器系统、可编程消费者电子产品以及包括任何以上系统或者设备的分布式计算环境等等。由于现有的大量并发SQL查询所带来的对数据库性能的巨大冲击,经常会导致系统运行緩慢,已经影响业务系统正常使用。比如,在上述示例性操作环境下,对于一个生产数据库系统来说,CPU的Idle已经几乎为0,消耗了几乎所有CPU资源,在正常情况下CPU的idle值为10°/。以上,同时IOwait(输入输出等待)也比较高,由此,可以基本判断,存在大表全盘扫描。为了解决这种全表扫描所带来的系统性能异常问题,需要在系统层面针对引发系统性能7耗费的SQL语句序列进行以下创建物化视图的处理,其处理流程如图1所示。1.捕获SQL查询语句捕获客户端发出的SQL查询语句,从中找出引发排序、分组和复杂运算的SQL语句,确定哪些SQL查询语句所构成的基表引发的全表扫描,造成大量逻辑读操作,消耗IO资源。比如,Consistentgets(—致性读)和physicalreads(物理读)的H量以及dbfilescatteredread(文件分散读取)及dbfilesequentialread(文件有序读取)等待数量,通常显示与全表扫描相关的等待。如果监测到Consistentgets、physicalreads非常高,查询时间延时,则i兌明引发这些读取操作的SQL查询语句所构成的基表引发了全表扫描,属于需要为之建立物化视图的问题基表。下面,通过举例说明捕获SQL查询语句的具体步骤。1.1查询v$session—wait获取各进程等待事件使用如下SQL:selectsid,event,pl,pltextfromv$session—wait;从查询结果中发现存在大量的dbfilescatteredread(文件分散读取)及dbfilesequentialread(文件有序读取)的进程,这种情况通常显示与全表扫描相关的等待。查询结果示例如下SIDEVENTPIPITEXT50dbfilescatteredread17file#81dbfilesequentialread17file#如上,表示SID(进程ID)为50、81的进程存在大量逻辑读操:作。1.2捕获相关SQL以SID(进程ID)为50的记录为例SELECTsql—textFROMv$sqltextaWHEREa.hash—value=(SELECTsql—hashvalueFROMv$sessionbWHEREb.SID=50)ORDERBYpieceASC通过上述SQL语句,获得该进程所执行的SQL,示例如下selects.ID,s.Bi函umber,s.MtrlIDfromSaleOrderEntryswheres.useflag=1ands.BizDate<==sysdateorderbys.BillNumberasc,s.SendDatedesc2.确定问;H&表在捕获到存在大量逻辑读的SQL后,利用程序代码从SQL中分离出所使用的基表名,实现逻辑示例如下1)从SQL中分离出所有含select的语句;2)找出每段select中包含的from以及join;3)从from以及join后找到相应的table名(基表名)。通过上述逻辑,从所捕获的相关SQL中分离出以table名(基表名)表示的问题基表,比如table名为SaleOrderEntry的问题基表,即销售订单分录信息表。由于关于销售订单的数据量非常庞大,使用此SQL语句来对销售订单分录表进行全表扫描,在性能上有非常大的问题,因此通过上述步骤能够有效确定引发全表扫描的问题基表。同样,通过上述步骤还可以找出应用系统执行数据库操作时,在哪些基表上还会进行全表扫描,从而确定问题基表,以对这些问题基表创建物化视图并用来优化应用系统性能。在系统数据库中建立如下表所示的物化视图记录表来存储这些分离出来的问题基表以及已经为这些问题基表建立物化视图的情况。假设下述物化视图记录表的名称为MVRecord:字段说明Tabl6Nam6分离出的问题基表名,如SaleOrderEntryMVName物化视图的名称,此处用来存放针对当前基表已经在数据库中建立的物化视图名称,以便于后续利用此物化视图名称来优化SQL。需要说明的是,在分离出table名后,并不马上将此table名插入到9MV—Record中,而是先从MV一Record中查找当前基表是否已经存在相应的物化视图。利用如下SQL语句SelectMVNamefromMV-RecordwhereTableName=当前基表名(如,SaleOrderEntry)如果不存在,则要创建相应的物化视图。如果存在,则直接使用此物化视图,而不必再次创建相应的物化^L图。在本发明的另一个优选实施方式中,如果MV—Record中存在与当前基表相应的物化视图,进一步判断该与当前基表相应的物化视图是否存在于当前用户的凝:据库系统表usermviews中,如果不存在于当前用户的数据库系统表usermviews中,需要从MVRecord中将该物化视图复制或者映射至当前用户的数据库系统表,以便于在当前用户状态下以物化视图处理用户的SQL请求。如果存在,则直接使用此物化视图。3.创建物化视图确定问g表之后,如果对应于该问题基表不存在物化视图,则为了解决上述全表扫描带来的问题,需要结合业务逻辑,考虑为引发系统资源浪费的SQL查询语句所构成的问题基表创建物化视图,以通过这些物化视图的中间存储消除不必要的全表扫描。在本发明的一个实施例中,考虑为有问题的SQL中所有的基表创建物化视图,在实际应用中,也可以考虑只为数据量在某某标准数量以下的基表建立物化视图,其原理与本发明所提供的实施例是一样的。有效地降低逻辑读是SQL优化的基本原则之一,因此,在创建物化视图的过程中,需要创建好物化视图的业务脚本,从而降低逻辑读,大大提高系统的性能。创建物化视图,首先要确定待创建的物化视图的刷新模式及刷新方式。物化视图刷新的模式有两种ONDEMAND和ONCOMMIT。ONDEMAND指物化视图在用户需要的时候进行刷新。ONCOMMIT指物化视图在对基表进行数据变更操作提交的同时进行刷新。ONCOMMIT能即时反应数据的变化,但是提交时间较长,特别是对数据变化较频繁的表,这种刷新对数据库的性能会有较大影响,因此本实施例采用的是ONDEMAND模式,也是系统默认的模式。10在刷新时,可以釆用COMPLETE(全刷)以及FAST(增量刷)方式,考虑到刷新速度,本实施例采用FAST(增量刷新)方式。下面以销售订单分录表为例,来创建物化视图creatematerializedviewmv—SaleOrderEntryasselects.ID,s.BillNumber,s.MtriIDfromSaleOrderEntryswheres.useflag=1ands.BizDate<=sysdateorderbys.BillNumberasc,p.SendDatedesc;以上物化-现图的名字mv一SaleOrderEntry是一个由系统随才几生成且不重复的字符串。将以上确定的刷新模式、刷新方式及物化视图脚本添加存储在数据库对应的物化视图记录表中,如下所示字段说明TableName分离出的问题基表名,如SaleOrderEntryMVName物化视图的名称,此处用来存放针对当前基表已经在数据库中建立的物化视图名称,以便于后续利用此物化视图名称来优化SQLMVSQL物化视图脚本,如上述的creatematerializedviewmv—SaleOrderEntryasselects.ID,s.Bi画umber,s.MtrlIDfromSaleOrderEntryswheres.useflag=1ands.BizDate<=sysdateorderbys.BillNumberasc,p.SendDatedesc;MVRefresh物化视图的刷新模式及刷新方式4.对所创建的物化视图作进一步调整优化为了进一步提高系统性能,在本发明的实施例中,在针对问题基表创建相应的物化^见图之后,还通过以下两种方式对物化-现图进4亍优化。4.1设置物化视图的定时刷新机制由于物化视图是基表的一个快照,而应用系统在业务操作时,真正的操作结果都是反映到基表,因此要及时实现物化视图与基表的同步。要解决这一问题,可以在数据库中设置物化视图的自动刷新,如在创建物化视图时,可以分别为每个物化视图都建立刷新周期,但这种刷新在设置时比较繁瑣,而且不便li于后续对刷新周期的调整及维护。在前面提到,本发明的一个实施方式采用ONDEMAND刷新模式,即在用户需要的时候才去刷新。但是ONCOMMIT刷新模式虽然能及时同步基表数据,却对数据库的性能有较大影响。为了在简化对刷新周期的设置、便于后续对周期的调整及维护的同时,满足不同用户的业务需求,考虑对创建的物化视图是否允许足够的刷新间隔。本发明在一个优选实施方式中通过创建一个定时刷新流程来实现物化视图的定期刷新。假设定义的是每日凌晨时某时刷新一次,可通过调用上述定时刷新流程定期定点实现自动化刷新功能,以确保物化视图数据在时效上的准确性。图2所示为一个"i更置定时刷新流;f呈的实施方式,在该实施方式中,以开源的quartz为例对物化视图的定时刷新流程的设置进行说明。quartz是一个功能齐全的、开源的job时间调度系统,它可以被结合的,或者伴随虚拟的任何J2EE或J2SE程序,从最小的独立的应用程序到最大的e-commerce系统被使用。Quartz可以用来创建简单或复杂的时间调度来执行十、百、千、甚至上万的jobs;获得的job被定义为一个标准的java组件或EJBs。这个quartz时间调度包含很多企业类的特征,例如JTA事务和簇。由于在quartz的安装、配置以及与Java工程的集成方面,不是本发明的重点,因此为了说明的简洁,我们默认已经搭建好quartz的应用环境。图2所示的定时刷新流程采用当前比较流行的作业调度框架,为一个作业提供简单或复杂的调度,即控制在什么时候并且可以按照一定的周期去执行一个作业,在这里作业可以理解为物化视图的刷新。如图2所示,该设置定时刷新的流程才艮据以下步骤实现1)创建刷新物化视图的作业类,它继承quartz框架的job(作业)接口。此作业类用来实现物化-现图的刷新。该步骤通过查询前述MV—Record表,确定需要刷新的物化视图,然后对这些物化视图进行刷新。其中,对物化视图进行刷新可以釆用循环调用一组物化视图刷新代码的方式来完成。在本发明的一个优选实施方式中,还可以通过判断MV—Record表中不存在于数据库系统表user—mviews中的物化#见图,确定对于当前用户来说MV—Record表中不需要刷新的物化视图,从而只刷新当前用户所需要的物化视图,避免不必要的刷新,进一步提高系统的处理能力。示例》口下importorg.quartz.Job;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;publicclassExecuteServerimplementsJob{publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{select*fromMV—Recordsdcct*fromusermviewswheremviewname=当前物化视图名称EXECDBMS—MVIEW.REFRESH(mv-SaleOrderEntry,TAST');2)设置调度计划,按照一定的周期来调度步骤l)中的作业在这一步骤中,首先需要设置对于物化视图刷新的调度作业,通过该调度作业调度具体需要刷新的物化视图(作业详细信息);然后设置一定的时间周期作为调度物化视图刷新的触发时间周期,将具体需要刷新的物化视图与触发时间周期进行绑定;最后启动物化视图刷新的调度,通过调用步骤l)中的作业,来实现物化视图的定期刷新,本实施例采用如下步骤实现定期刷新的调度a)设置quartz标准调度器工厂,生成调度器实例;b)创建一个作业详细信息实例,设置对应的作业实现类为步骤l)的作业类;c)设置触发器,利用quartz框架提供的表达式设定进行定时刷新的触发时间;d)绑定作业详细信息与触发器;e)启动调度器。示例如下publicclassRefres固VServletextendsHttpServlet{13publicvoidinit()throwsServletException{SchedulerFactorysf=newStdSchedulerFactory();Schedulerscheduler=sf.getScheduler();JobDetailjobDetail=newJobDetail("REFRESHMV",Scheduler.DEFAULT—GROUP,RefreshMV.class);CronTriggertrigger=newCronTrigger("REFRESHMV",Scheduler.DEFAULT—GROUP,""000**");sched.scheduleJob(jobDetail,trigger);scheduler,start();quartz触发器能够提供功能非常强大的触发时间表达式,可以根据需要灵活设置,如上述代码设置每天零点触发。'在上述定时刷新流程中,设置应用加载时自动加载调度器,则一到设置的触发时间,系统会自动执行定时刷新流程进行物化视图的刷新。4.2为物化视图创建索引从物化视图上建索引,目的是为了提高查询性能,进一步的调整优化。由于物化视图仍然还会执行全盘扫描,比如SQL语句中的orderby子句会更加加速排序,导致系统性能降低,可以通过创建索引消除这个排序,如在经常用作过滤器的字段上建立索引和经常存取的多个列上建立索引。物化视图和基表的区别在于物化视图的数据是刷新来的,不是插入的,除此之外,物化视图和基表一样可以建索引以方便查询。比如,当查询结果集有IO万条数据时,如果又想在这10万条结果集中查它的子集50条,用物化视图加索引的机制加速查询,保证数据的快速性,这样快速的扫描元数据的结果集,对数据库端的资源消耗减少了,加索引后逻辑读取及性能差异有了明显的改观,Consistentgets(—致性读),physicalreads(物理读)明显降低,查询时间加快。由于基表本身是具有索引的,因此,在本发明的一个优选实施例中,利用原有问tt表的索引作为对应创建的物化视图的索引,这样就避免了为物化视图创建索引而重新进行大规模的数据查询和提取,能够在不增加系统消耗的基础上,为物化视图建立有效索引,提高系统的处理能力。以销售订单分录为例,查找在销售订单分录基表上已经建立的索引,通过:^下方式selectd.index—name,a.namefromsyscolumnsa,sysindexkeysb,sysindexesc,user—indexesdwherec.id=b.indidandb.colid=a.colidandd.table—name='SaleOrderEntry'andd.index—name="Name查找出每个索引及其索引列,在物化视图上创建相同的索引,语法示例如下createindexonmv-SaleOrderEntry(SendDate);5、利用物化;f见图处理相应的SQL查询客户端在提交SQL操作时,服务器端截获此SQL,在步骤l中分离出该SQL使用的基表,如果该基表属于可能引发全表扫描的问题基表,则在创建的MV—Record中查找这些基表是否存在相应的物化视图。如果有,则将SQL中的table替换成物化视图的名字;如果没有,则为这些问题基表创建相应的物化视图,并将SQL中的table替换成该物化视图的名字。这样服务器端在执行该SQL操作时自动使用相应的物化视图,避免了全表扫描。通过以上处理流程,检查引发全表扫描的SQL,创建物化视图并定时刷新,同时自动将客户端的SQL查询请求进行转换,提升SQL查询排序性能优化实现技术,有效地减少逻辑读取,减少写操作-通过消除排序等实现,减少cpu和IO的消耗,这些各项的cpu、IO、逻辑读等各项资源消耗和性能指标,从数据库健康运行性能指标、系统反映、并发性能、网络传输等方面的性能都可以得到有效提升。图3是本发明实施例的总流程示意图,如图3所示,从系统应用角度来讲,当用户发起SQL查询请求后,首先在步骤301提交SQL查询请求;然后在步骤302,服务器端捕获来自于客户端的SQL查询语句;在步骤303,根据捕获的SQL查询语句,确定引发系统资源消耗的SQL查询语句所构成的问g表;在步骤304,针对所确定的问题基表创建相应的物化视图;在步骤305,对所创建的物化视图进行进一步的调整优化,包括创建索引、设置自动刷新机制;最后,在步骤306,利用所创建的物化视图处理相应的SQL查询,实现在响应SQL查询时降低CPU消耗的发明目的。本发明在应用过程中,可以由单独的性能优化服务器进行上述的系统性能优化工作,也可以借助系统服务器端的一个功能模块来实现。下面本发明以单独的性能优化服务器方式来对实现本发明基于物化视图的性能优化系统的逻辑结构进行说明。该系统的逻辑结构如图4所示,包括客户端1和服务器端2,其中服务器端2包括系统服务器21和性能优化服务器22,性能优化服务器"中包括SQL查询语句监测单元221、问题基表确定单元222、物化视图创建单元223和物化视图优化单元224。系统服务器21和性能优化服务器22同时启动,SQL查询语句监测单元221随时监听客户端发来的SQL请求,确定其中是否具有引发排序、分组和复杂运算的SQL语句,并将这些存在可能引起系统资源耗费的SQL语句提交至问题基表确定单元222;由问题基表确定单元222确定由SQL查询语句所构成的引发全表扫描、导致系统资源的问题基表;然后由物化视图创建单元223为问题基表创建相应的物化视图,并由物化视图优化单元224对创建的物化视图做进一步优化处理,最后将该物化视图发送至系统服务器21作为应对客户端SQL请求的处理依据,以便在系统服务器响应客户端SQL请求时以物化视图方式代替传统的SQL查询方式,从而减少逻辑读取和写操作,进而减少cpu的消耗,提高系统的运行速度。在本发明的另一个优选实施例中,物化视图优化单元224包括物化视图索引创建单元301和自动刷新设置单元302(图中未示出)。其中,自动刷新设置单元302用于通过创建一个定时刷新流程来实现物化视图的定期刷新,用自动化定时刷新代替日常频繁的手工操作,有效避免中间的人工操作,减少出错的几率,增强程序的稳定性。物化视图索引创建单元301用于在物化视图上建索引;由于物化视图仍然还会执行全盘扫描从而引发排序,可以通过创建索引16消除这个排序,以提高查询性能,进一步的调整优化。本发明基于物化视图的性能优化系统采用客户端服务器通信方式,使原来定时批量处理的任务变成实时按需处理,提高了生产效率,也增强了灵活性,尤其在处理大数据量复杂条件查询的所产生的系统性能问题方面,从系统反映、并发性能、网络传输、查询性能、数据库并发性能等方面都会使系统性能得到整体性的提升。物化视图是典型的通过存储空间换取性能的方式,本发明以物化视图提升SQL查询排序性能,实现SQL查询排序的优化,从以下四个角度实现数据库健康运行性能指标、系统反映、并发性能、网络传输等方面的性能的提升。A.有效地减少逻辑读取B.减少写才喿作-通过消除排序等实现C.减少cpu的消耗-因为物化视图的这种提高性能的机制减少了复杂的SQL的分组,排序,运算等操作,因此无需实时进行复杂运算D.显著提高相应速度。以上对本发明所提供的基于物化视图提升性能优化方案进行了详细介绍,说明只是用于帮助理解本发明的方法及其核心思想;因此,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。权利要求1、一种基于物化视图的系统性能优化方法,其特征在于该方法包括如下步骤捕获SQL查询语句;确定引发系统全表扫描的SQL查询语句所构成的问题基表;针对前述问题基表创建物化视图;优化所创建的物化视图;利用所优化的物化视图处理相应的SQL查询。2、根据权利要求1所述的方法,其特征在于所述优化所创建的物化视图的步骤进一步包括为物化视图创建定时刷新机制的步骤。3、根据权利要求2所述的方法,其特征在于,根据以下步骤为物化视图创建定时刷新机制创建刷新物化视图的作业类;设置标准调度器工厂,生成调度器实例;创建一个作业详细信息实例,设置对应的作业实现类;设置触发器,设定进行定时刷新的触发时间;绑定作业详细信息与触发器;启动调度器。4、根据权利要求1或2所述的方法,其特征在于所述优化所创建的物化视图的步骤进一步包括为物化视图创建索引的步骤。5、根据权利要求4所述的方法,其特征在于,在为物化视图创建索引的过程中,利用问表的索引作为对应创建的物化视图的索引。6、根据权利要求1或2所述的方法,其特征在于通过以下步骤来确定引发系统全表扫描的SQL查询语句所构成的问题基表从SQL中分离出所有含select的语句;找出每段select中包含的from以及join;从from以及join后找到相应的基表名。7、根据权利要求6所述的方法,其特征在于,在确定问题基表后,首先需要查找系统物化视图记录表中是否已经存在与该问题基表相应的物化视图,如果不存在,则要创建相应的物化视图;如果存在,则不必再次创建相应的物化一见图。8、根据权利要求7所述的方法,其特征在于,如果系统物化视图记录表中已经存在与该问M表相应的物化视图,进一步判断该与当前基表相应的物化视图是否存在于当前用户的数据库系统表中;如果不存在于当前用户的数据库系统表中,需要从系统物化视图记录表中将该物化视图复制或者映射至当前用户的数据库系统表;如果存在,则直接使用此物化i见图。9、根据权利要求1或2所述的方法,其特征在于在针对问题基表创建物化视图的过程中,所创建物化视图的刷新模式有两种ONDEMAND和ONCOMMIT;所创建物化视图的刷新方式有两种COMPLETE方式以及FAST方式。10、一种基于物化视图的系统性能优化系统,该系统由客户端和服务器端组成,其特征在于,所述服务器端包括系统服务器和性能优化服务器;所述性能优化服务器包括SQL查询语句监测单元,用于监听客户端发来的SQL请求;问题基表确定单元,用于从SQL查询语句监测单元监听的SQL请求中确定引发系统全表扫描的SQL查询语句所构成的问题基表;物化视图创建单元,用于根据问题基表确定单元确定的问题基表创建相应的物化^L图;物化视图优化单元,用于对创建的物化视图做进一步优化处理;所述系统服务器用于利用所优化的物化视图处理相应的SQL查询。11、根据权利要求10所述的系统,其特征在于所述物化视图优化单元进一步包括自动刷新设置单元,用于为物化视图创建定时刷新机制。12、根据权利要求10或11所述的系统,其特征在于所述物化视图优化单元进一步包括物化视图索引创建单元,用于为物化视图创建索引。13、根据权利要求12所述的系统,其特征在于,所述物化视图索引创建单元利用问题基表的索引作为对应创建的物化视图的索引。全文摘要本发明涉及数据库领域,提供了一种基于物化视图的系统性能优化方法及系统。所述方法包括如下步骤捕获SQL查询语句;确定引发系统全表扫描的SQL查询语句所构成的问题基表;针对前述问题基表创建物化视图;优化所创建的物化视图;利用所优化的物化视图处理相应的SQL查询。本发明改善了以前传统的需要手动刷新物化视图的不准确性问题,以及手动同步刷新给基表的操作性能带来的影响。本发明提供的定期自动刷新技术,加上索引,使数据达到比较佳查询状态,确保用户看到的数据快速准确。文档编号G06F17/30GK101477524SQ20081018514公开日2009年7月8日申请日期2008年12月11日优先权日2008年12月11日发明者琼罗申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1