CN101477524A - 基于物化视图的系统性能优化方法及系统 - Google Patents
基于物化视图的系统性能优化方法及系统 Download PDFInfo
- Publication number
- CN101477524A CN101477524A CNA2008101851462A CN200810185146A CN101477524A CN 101477524 A CN101477524 A CN 101477524A CN A2008101851462 A CNA2008101851462 A CN A2008101851462A CN 200810185146 A CN200810185146 A CN 200810185146A CN 101477524 A CN101477524 A CN 101477524A
- Authority
- CN
- China
- Prior art keywords
- materialized view
- base table
- sql
- index
- materialized
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明涉及数据库领域,提供了一种基于物化视图的系统性能优化方法及系统。所述方法包括如下步骤:捕获SQL查询语句;确定引发系统全表扫描的SQL查询语句所构成的问题基表;针对前述问题基表创建物化视图;优化所创建的物化视图;利用所优化的物化视图处理相应的SQL查询。本发明改善了以前传统的需要手动刷新物化视图的不准确性问题,以及手动同步刷新给基表的操作性能带来的影响。本发明提供的定期自动刷新技术,加上索引,使数据达到比较佳查询状态,确保用户看到的数据快速准确。
Description
技术领域
本发明涉及数据库领域,特别涉及一种基于物化视图的系统性能优化方法及系统。
背景技术
作为高级的非过程化编程语言的结构化查询语言SQL(Structured QueryLanguage),允许用户在高层数据结构上工作,它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,因此具有完全不同底层结构的不同数据库系统都可以使用相同的SQL语言作为数据输入与管理的接口。
对于传统的SQL查询排序实现方式来说,需要把查询出的结果集,在表中做排序、分组、计算、过滤等操作,由于这些操作分析需要将结果集进行具体化的显示,因此象SQL查询和视图这种在使用时才需要读取的操作都需要消耗一定的资源。如果有大量的排序操作的动作,全表扫描就会对数据库的性能产生巨大的冲击,从而快速加升逻辑读的数量。当这种并发SQL查询很多的时候,数据库端的内存就成为瓶颈,并且这种方式对于小带宽的WEB应用不适用,因为每次都从大数据集取元数据进行分析的时候,数据库端的性能就会成为瓶颈,CPU、IO内存的资源消耗,带来这些性能指标的一定偏差,造成系统反应变慢,这时数据库服务器运行健康状态也不太良好。
物化视图(Materialized View)能够在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,从而不再需要重新执行查询。在查询要执行几次时(这在数据仓库环境中非常常见),这是一个很大的好处。物化视图提升性能的原理就是它是“视图+查询出的数据”形成的数据快照,一瞬间取出的数据结果集。对于查询出的结果集所做的一系列的操作,而它只要扫描一遍,所以物化视图这种快照、一瞬间的数据集的实现方式是一种最快的访问方法。
但是,在数据稳定时,大量类型的SQL的排序,基于对基表(底层表)的大量分组、运算、排序来实现,从而造成的翻页查询程序,由于使用的物化视图依赖于基表的改变,所以基表的数据的浮动需要日常频繁的手工刷新,达到数据同步,但由于中间的人工操作,使出错的几率增大,程序的稳定性偶尔也会出现问题。
发明内容
为解决传统的需要手动的刷新物化视图,引起数据的浮动从而带来数据不准确性的问题,本发明提出了基于物化视图提升性能优化方案。
一方面,本发明提供一种基于物化视图的系统性能优化方法,包括如下步骤:
捕获SQL查询语句;
确定引发系统全表扫描的SQL查询语句所构成的问题基表;
针对前述问题基表创建物化视图;
优化所创建的物化视图;
利用所优化的物化视图处理相应的SQL查询。
其中,所述优化所创建的物化视图的步骤进一步包括:
为物化视图创建定时刷新机制的步骤;以及为物化视图创建索引的步骤。
优选的,本发明根据以下步骤为物化视图创建定时刷新机制:
创建刷新物化视图的作业类;设置标准调度器工厂,生成调度器实例;创建一个作业详细信息实例,设置对应的作业实现类;设置触发器,设定进行定时刷新的触发时间;绑定作业详细信息与触发器;启动调度器。
另一方面,本发明提供一种基于物化视图的系统性能优化系统,该系统由客户端和服务器端组成,所述服务器端包括系统服务器和性能优化服务器;
所述性能优化服务器包括:
SQL查询语句监测单元,用于监听客户端发来的SQL请求;
问题基表确定单元,用于从SQL查询语句监测单元监听的SQL请求中确定引发系统全表扫描的SQL查询语句所构成的问题基表;
物化视图创建单元,用于根据问题基表确定单元确定的问题基表创建相应的物化视图;
物化视图优化单元,用于对创建的物化视图做进一步优化处理;
所述系统服务器用于利用所优化的物化视图处理相应的SQL查询。
与现有技术相比,本发明采用物化视图调用流程,改善了以前传统的需要手动刷新物化视图的不准确性问题,以及手动同步刷新给基表的操作性能带来的影响。本发明提供的定期自动刷新技术,加上索引,使数据达到比较佳查询状态,确保用户看到的数据快速准确。
同时,采用本发明,使得数据库服务器的底层资源的消耗随之变化,更有效地减少逻辑读取,因为不需要实时的进行数据复杂的运算进而减少的CPU的消耗,显著的提高数据快照的扫描速度。
附图说明
图1是本发明实施例的物化视图自动刷新流程示意图;
图2是本发明实施例的设置定时刷新的流程示意图;
图3是本发明实施例的总流程示意图;
图4是本发明系统实施例的逻辑结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
为了更清楚直观的说明本发明的技术方案,将实现本发明的一个实施例所采用的示例性硬件和软件环境定义如下:
操作系统:LinuxAS4 内核版本:64位 MEM内存容量:2G
swap换页空间:2G cpu:Pentium(R)D CPU 2.80GHZ
oracle版本:10.2.0.2.0
需要说明的是,上述操作环境只是适当的操作环境的一个示例,并不意味着对操作环境的适用范围和功能的任何限制。其他适用于本发明本所述的基于物化视图提升性能优化方案的公知的计算机系统、环境和/或配置包括但不限于:个人计算机、服务器式计算机、多处理器系统、可编程消费者电子产品以及包括任何以上系统或者设备的分布式计算环境等等。
由于现有的大量并发SQL查询所带来的对数据库性能的巨大冲击,经常会导致系统运行缓慢,已经影响业务系统正常使用。比如,在上述示例性操作环境下,对于一个生产数据库系统来说,CPU的Idle已经几乎为0,消耗了几乎所有CPU资源,在正常情况下CPU的idle值为10%以上,同时IOwait(输入输出等待)也比较高,由此,可以基本判断,存在大表全盘扫描。为了解决这种全表扫描所带来的系统性能异常问题,需要在系统层面针对引发系统性能耗费的SQL语句序列进行以下创建物化视图的处理,其处理流程如图1所示。
1.捕获SQL查询语句
捕获客户端发出的SQL查询语句,从中找出引发排序、分组和复杂运算的SQL语句,确定哪些SQL查询语句所构成的基表引发的全表扫描,造成大量逻辑读操作,消耗IO资源。比如,Consistent gets(一致性读)和physical reads(物理读)的数量以及db file scattered read(文件分散读取)及db file sequentialread(文件有序读取)等待数量,通常显示与全表扫描相关的等待。如果监测到Consistent gets、physical reads非常高,查询时间延时,则说明引发这些读取操作的SQL查询语句所构成的基表引发了全表扫描,属于需要为之建立物化视图的问题基表。
下面,通过举例说明捕获SQL查询语句的具体步骤。
1.1查询v$session_wait获取各进程等待事件
使用如下SQL:
select sid,event,pl,pltext from v$session_wait;
从查询结果中发现存在大量的db file scattered read(文件分散读取)及db file sequential read(文件有序读取)的进程,这种情况通常显示与全表扫描相关的等待。查询结果示例如下:
SID | EVENT | P1 | P1TEXT |
...... | |||
50 | db file scattered read | 17 | file# |
81 | db file sequential read | 17 | file# |
...... |
如上,表示SID(进程ID)为50、81的进程存在大量逻辑读操作。
1.2 捕获相关SQL
以SID(进程ID)为50的记录为例:
SELECT sql_text FROM v$sqltext a WHERE a.hash_value=(SELECT sql_hash_value FROMv$session b WHERE b.SID=50)
ORDER BY piece ASC
通过上述SQL语句,获得该进程所执行的SQL,示例如下:select s.ID,s.BillNumber,s.MtrlID from SaleOrderEntry s where s.useflag=1 and s.BizDate<=sysdate order by s.BillNumber asc,s.SendDate desc
2.确定问题基表
在捕获到存在大量逻辑读的SQL后,利用程序代码从SQL中分离出所使用的基表名,实现逻辑示例如下:
1)从SQL中分离出所有含select的语句;
2)找出每段select中包含的from以及join;
3)从from以及join后找到相应的table名(基表名)。
通过上述逻辑,从所捕获的相关SQL中分离出以table名(基表名)表示的问题基表,比如table名为SaleOrderEntry的问题基表,即销售订单分录信息表。
由于关于销售订单的数据量非常庞大,使用此SQL语句来对销售订单分录表进行全表扫描,在性能上有非常大的问题,因此通过上述步骤能够有效确定引发全表扫描的问题基表。同样,通过上述步骤还可以找出应用系统执行数据库操作时,在哪些基表上还会进行全表扫描,从而确定问题基表,以对这些问题基表创建物化视图并用来优化应用系统性能。
在系统数据库中建立如下表所示的物化视图记录表来存储这些分离出来的问题基表以及已经为这些问题基表建立物化视图的情况。假设下述物化视图记录表的名称为MV_Record:
字段 | 说明 |
TableName | 分离出的问题基表名,如SaleOrderEntry |
MVName | 物化视图的名称,此处用来存放针对当前基表已经在数据库中建立的物化视图名称,以便于后续利用此物化视图名称来优化SQL。 |
需要说明的是,在分离出table名后,并不马上将此table名插入到MV_Record中,而是先从MV_Record中查找当前基表是否已经存在相应的物化视图。利用如下SQL语句:
Select MVName from MV-Record where TableName=当前基表名(如,SaleOrderEntry)
如果不存在,则要创建相应的物化视图。如果存在,则直接使用此物化视图,而不必再次创建相应的物化视图。
在本发明的另一个优选实施方式中,如果MV_Record中存在与当前基表相应的物化视图,进一步判断该与当前基表相应的物化视图是否存在于当前用户的数据库系统表user_mviews中,如果不存在于当前用户的数据库系统表user_mviews中,需要从MV_Record中将该物化视图复制或者映射至当前用户的数据库系统表,以便于在当前用户状态下以物化视图处理用户的SQL请求。如果存在,则直接使用此物化视图。
3.创建物化视图
确定问题基表之后,如果对应于该问题基表不存在物化视图,则为了解决上述全表扫描带来的问题,需要结合业务逻辑,考虑为引发系统资源浪费的SQL查询语句所构成的问题基表创建物化视图,以通过这些物化视图的中间存储消除不必要的全表扫描。在本发明的一个实施例中,考虑为有问题的SQL中所有的基表创建物化视图,在实际应用中,也可以考虑只为数据量在某某标准数量以下的基表建立物化视图,其原理与本发明所提供的实施例是一样的。
有效地降低逻辑读是SQL优化的基本原则之一,因此,在创建物化视图的过程中,需要创建好物化视图的业务脚本,从而降低逻辑读,大大提高系统的性能。
创建物化视图,首先要确定待创建的物化视图的刷新模式及刷新方式。
物化视图刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新。ON COMMIT指物化视图在对基表进行数据变更操作提交的同时进行刷新。ON COMMIT能即时反应数据的变化,但是提交时间较长,特别是对数据变化较频繁的表,这种刷新对数据库的性能会有较大影响,因此本实施例采用的是ON DEMAND模式,也是系统默认的模式。
在刷新时,可以采用COMPLETE(全刷)以及FAST(增量刷)方式,考虑到刷新速度,本实施例采用FAST(增量刷新)方式。
下面以销售订单分录表为例,来创建物化视图:
create materialized view mv_SaleOrderEntry as select s.ID,s.BillNumber,s.MtrlID from SaleOrderEntry swhere s.useflag=1 and s.BizDate<=sysdate order by s.BillNumber asc,p.SendDate desc;
以上物化视图的名字mv_SaleOrderEntry是一个由系统随机生成且不重复的字符串。
将以上确定的刷新模式、刷新方式及物化视图脚本添加存储在数据库对应的物化视图记录表中,如下所示:
字段 | 说明 |
TableName | 分离出的问题基表名,如SaleOrderEntry |
MVName | 物化视图的名称,此处用来存放针对当前基表已经在数据库中建立的物化视图名称,以便于后续利用此物化视图名称来优化SQL |
MVSQL | 物化视图脚本,如上述的:create materialized view mv_SaleOrderEntry as select s.ID,s.BillNumber,s.MtrlID from SaleOrderEntry s where s.useflag=1 and s.BizDate<=sysdate order by s.BillNumber asc,p.SendDate desc; |
MVRefresh | 物化视图的刷新模式及刷新方式 |
4.对所创建的物化视图作进一步调整优化
为了进一步提高系统性能,在本发明的实施例中,在针对问题基表创建相应的物化视图之后,还通过以下两种方式对物化视图进行优化。
4.1 设置物化视图的定时刷新机制
由于物化视图是基表的一个快照,而应用系统在业务操作时,真正的操作结果都是反映到基表,因此要及时实现物化视图与基表的同步。要解决这一问题,可以在数据库中设置物化视图的自动刷新,如在创建物化视图时,可以分别为每个物化视图都建立刷新周期,但这种刷新在设置时比较繁琐,而且不便于后续对刷新周期的调整及维护。
在前面提到,本发明的一个实施方式采用ON DEMAND刷新模式,即在用户需要的时候才去刷新。但是ON COMMIT刷新模式虽然能及时同步基表数据,却对数据库的性能有较大影响。
为了在简化对刷新周期的设置、便于后续对周期的调整及维护的同时,满足不同用户的业务需求,考虑对创建的物化视图是否允许足够的刷新间隔。本发明在一个优选实施方式中通过创建一个定时刷新流程来实现物化视图的定期刷新。假设定义的是每日凌晨时某时刷新一次,可通过调用上述定时刷新流程定期定点实现自动化刷新功能,以确保物化视图数据在时效上的准确性。
图2所示为一个设置定时刷新流程的实施方式,在该实施方式中,以开源的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表中不需要刷新的物化视图,从而只刷新当前用户所需要的物化视图,避免不必要的刷新,进一步提高系统的处理能力。
示例如下:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class ExecuteServer implements Job{
public void execute(JobExecutionContext context)throws JobExecutionException{
select*from MV_Record
select*from user_mviews where mview_name=当前物化视图名称
EXEC DBMS_MVIEW.REFRESH(mv-SaleOrderEntry,′FAST′);
}
}
2)设置调度计划,按照一定的周期来调度步骤1)中的作业
在这一步骤中,首先需要设置对于物化视图刷新的调度作业,通过该调度作业调度具体需要刷新的物化视图(作业详细信息);然后设置一定的时间周期作为调度物化视图刷新的触发时间周期,将具体需要刷新的物化视图与触发时间周期进行绑定;最后启动物化视图刷新的调度,通过调用步骤1)中的作业,来实现物化视图的定期刷新,本实施例采用如下步骤实现定期刷新的调度:
a)设置quartz标准调度器工厂,生成调度器实例;
b)创建一个作业详细信息实例,设置对应的作业实现类为步骤1)的作业类;
c)设置触发器,利用quartz框架提供的表达式设定进行定时刷新的触发时间;
d)绑定作业详细信息与触发器;
e)启动调度器。
示例如下:
public class RefreshMVServlet extends HttpServlet{
public void init()throws ServletException{
SchedulerFactory sf=new StdSchedulerFactory();
Scheduler scheduler=sf.getScheduler();
JobDetail jobDetail=
new JobDetail("REFRESHMV",Scheduler.DEFAULT_GROUP,RefreshMV.class);
CronTrigger trigger=new CronTrigger("REFRESHMV",Scheduler.DEFAULT_GROUP,""000**?");
sched.scheduleJob(jobDetail,trigger);
scheduler.start();
}
quartz触发器能够提供功能非常强大的触发时间表达式,可以根据需要灵活设置,如上述代码设置每天零点触发。
在上述定时刷新流程中,设置应用加载时自动加载调度器,则一到设置的触发时间,系统会自动执行定时刷新流程进行物化视图的刷新。
4.2 为物化视图创建索引
从物化视图上建索引,目的是为了提高查询性能,进一步的调整优化。由于物化视图仍然还会执行全盘扫描,比如:SQL语句中的orderby子句会更加加速排序,导致系统性能降低,可以通过创建索引消除这个排序,如在经常用作过滤器的字段上建立索引和经常存取的多个列上建立索引。
物化视图和基表的区别在于物化视图的数据是刷新来的,不是插入的,除此之外,物化视图和基表一样可以建索引以方便查询。比如,当查询结果集有10万条数据时,如果又想在这10万条结果集中查它的子集50条,用物化视图加索引的机制加速查询,保证数据的快速性,这样快速的扫描元数据的结果集,对数据库端的资源消耗减少了,加索引后逻辑读取及性能差异有了明显的改观,Consistent gets(一致性读),physical reads(物理读)明显降低,查询时间加快。
由于基表本身是具有索引的,因此,在本发明的一个优选实施例中,利用原有问题基表的索引作为对应创建的物化视图的索引,这样就避免了为物化视图创建索引而重新进行大规模的数据查询和提取,能够在不增加系统消耗的基础上,为物化视图建立有效索引,提高系统的处理能力。
以销售订单分录为例,查找在销售订单分录基表上已经建立的索引,通过如下方式:
select d.index_name,a.name
from syscolumnsa,
sysindexkeysb,
sysindexesc,
user_indexes d
where c.id=b.indid and b.colid=a.colid
and d.table_name=‘SaleOrderEntry’and d.index_name=c.Name
查找出每个索引及其索引列,在物化视图上创建相同的索引,语法示例如下:
create index on mv-SaleOrderEntry(SendDate);
5、利用物化视图处理相应的SQL查询
客户端在提交SQL操作时,服务器端截获此SQL,在步骤1中分离出该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查询语句所构成的问题基表;在步骤304,针对所确定的问题基表创建相应的物化视图;在步骤305,对所创建的物化视图进行进一步的调整优化,包括创建索引、设置自动刷新机制;最后,在步骤306,利用所创建的物化视图处理相应的SQL查询,实现在响应SQL查询时降低CPU消耗的发明目的。
本发明在应用过程中,可以由单独的性能优化服务器进行上述的系统性能优化工作,也可以借助系统服务器端的一个功能模块来实现。下面本发明以单独的性能优化服务器方式来对实现本发明基于物化视图的性能优化系统的逻辑结构进行说明。该系统的逻辑结构如图4所示,包括客户端1和服务器端2,其中服务器端2包括系统服务器21和性能优化服务器22,性能优化服务器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用于在物化视图上建索引;由于物化视图仍然还会执行全盘扫描从而引发排序,可以通过创建索引消除这个排序,以提高查询性能,进一步的调整优化。
本发明基于物化视图的性能优化系统采用客户端服务器通信方式,使原来定时批量处理的任务变成实时按需处理,提高了生产效率,也增强了灵活性,尤其在处理大数据量复杂条件查询的所产生的系统性能问题方面,从系统反映、并发性能、网络传输、查询性能、数据库并发性能等方面都会使系统性能得到整体性的提升。
物化视图是典型的通过存储空间换取性能的方式,本发明以物化视图提升SQL查询排序性能,实现SQL查询排序的优化,从以下四个角度实现数据库健康运行性能指标、系统反映、并发性能、网络传输等方面的性能的提升。
A.有效地减少逻辑读取
B.减少写操作-通过消除排序等实现
C.减少cpu的消耗-因为物化视图的这种提高性能的机制减少了复杂的SQL的分组,排序,运算等操作,因此无需实时进行复杂运算
D.显著提高相应速度。
以上对本发明所提供的基于物化视图提升性能优化方案进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;因此,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (13)
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所述的方法,其特征在于,
如果系统物化视图记录表中已经存在与该问题基表相应的物化视图,进一步判断该与当前基表相应的物化视图是否存在于当前用户的数据库系统表中;
如果不存在于当前用户的数据库系统表中,需要从系统物化视图记录表中将该物化视图复制或者映射至当前用户的数据库系统表;如果存在,则直接使用此物化视图。
9、根据权利要求1或2所述的方法,其特征在于在针对问题基表创建物化视图的过程中,
所创建物化视图的刷新模式有两种:ON DEMAND和ON COMMIT;
所创建物化视图的刷新方式有两种:COMPLETE方式以及FAST方式。
10、一种基于物化视图的系统性能优化系统,该系统由客户端和服务器端组成,其特征在于,
所述服务器端包括系统服务器和性能优化服务器;
所述性能优化服务器包括:
SQL查询语句监测单元,用于监听客户端发来的SQL请求;
问题基表确定单元,用于从SQL查询语句监测单元监听的SQL请求中确定引发系统全表扫描的SQL查询语句所构成的问题基表;
物化视图创建单元,用于根据问题基表确定单元确定的问题基表创建相应的物化视图;
物化视图优化单元,用于对创建的物化视图做进一步优化处理;
所述系统服务器用于利用所优化的物化视图处理相应的SQL查询。
11、根据权利要求10所述的系统,其特征在于所述物化视图优化单元进一步包括:
自动刷新设置单元,用于为物化视图创建定时刷新机制。
12、根据权利要求10或11所述的系统,其特征在于所述物化视图优化单元进一步包括:
物化视图索引创建单元,用于为物化视图创建索引。
13、根据权利要求12所述的系统,其特征在于,
所述物化视图索引创建单元利用问题基表的索引作为对应创建的物化视图的索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101851462A CN101477524A (zh) | 2008-12-11 | 2008-12-11 | 基于物化视图的系统性能优化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101851462A CN101477524A (zh) | 2008-12-11 | 2008-12-11 | 基于物化视图的系统性能优化方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101477524A true CN101477524A (zh) | 2009-07-08 |
Family
ID=40838241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008101851462A Pending CN101477524A (zh) | 2008-12-11 | 2008-12-11 | 基于物化视图的系统性能优化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101477524A (zh) |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521304A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 基于哈希的聚簇表存储方法 |
CN103793526A (zh) * | 2014-02-24 | 2014-05-14 | 浪潮电子信息产业股份有限公司 | 一种监控sql语句性能的方法 |
CN103886005A (zh) * | 2012-12-19 | 2014-06-25 | 国际商业机器公司 | 用于为增强查询性能使用临时性能对象的方法和系统 |
CN104008191A (zh) * | 2014-06-12 | 2014-08-27 | 北京京东尚科信息技术有限公司 | 一种数据查询方法 |
CN104050225A (zh) * | 2013-03-14 | 2014-09-17 | Sap股份公司 | 数据库模式映射中的视图变量 |
CN104317893A (zh) * | 2014-10-23 | 2015-01-28 | 国家电网公司 | 基于移动安全存储介质的缩略式数据快照实现方法 |
WO2015043391A1 (en) * | 2013-09-30 | 2015-04-02 | Tencent Technology (Shenzhen) Company Limited | Data synchronization for remote and local databases |
CN105095255A (zh) * | 2014-05-07 | 2015-11-25 | 中兴通讯股份有限公司 | 一种数据索引创建方法及装置 |
WO2016155511A1 (en) * | 2015-03-28 | 2016-10-06 | Huawei Technologies Co., Ltd. | A system and method to optimize queries on a view |
CN106095969A (zh) * | 2016-06-17 | 2016-11-09 | 浪潮(北京)电子信息产业有限公司 | 一种数据同步的方法、装置、系统及数据库 |
CN106250457A (zh) * | 2016-07-28 | 2016-12-21 | 国网山东省电力公司电力科学研究院 | 大数据平台物化视图的查询处理方法及系统 |
CN107391642A (zh) * | 2017-07-11 | 2017-11-24 | 人人行科技股份有限公司 | 物化视图刷新方法和装置、存储介质以及处理器 |
CN107967274A (zh) * | 2016-10-19 | 2018-04-27 | 航天信息软件技术有限公司 | 数据库中数据同步的方法和装置 |
CN108268524A (zh) * | 2016-12-30 | 2018-07-10 | 北京国双科技有限公司 | 数据库聚合处理方法及装置 |
CN108932286A (zh) * | 2018-05-23 | 2018-12-04 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、数据查询方法及装置 |
CN109376171A (zh) * | 2018-08-15 | 2019-02-22 | 广州虎牙信息科技有限公司 | 数据查询方法、装置、计算机存储介质及服务器 |
CN110874366A (zh) * | 2018-08-31 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 数据处理、查询方法和装置 |
CN110875085A (zh) * | 2018-09-03 | 2020-03-10 | 中国石油化工股份有限公司 | 高效批量优化分子结构的方法 |
CN111984680A (zh) * | 2020-08-12 | 2020-11-24 | 北京海致网聚信息技术有限公司 | 基于Hive分区表实现物化视图性能优化的方法及系统 |
CN112069164A (zh) * | 2019-06-10 | 2020-12-11 | 北京百度网讯科技有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN112214494A (zh) * | 2020-10-21 | 2021-01-12 | 中国银行股份有限公司 | 检索方法及装置 |
CN115658716A (zh) * | 2022-12-26 | 2023-01-31 | 北京滴普科技有限公司 | 面向olap分析数据库的物化视图定时刷新方法、设备及介质 |
CN116541377A (zh) * | 2023-04-27 | 2023-08-04 | 阿里巴巴(中国)有限公司 | 任务的物化视图的处理方法、系统和电子设备 |
CN116541377B (zh) * | 2023-04-27 | 2024-05-14 | 阿里巴巴(中国)有限公司 | 任务的物化视图的处理方法、系统和电子设备 |
-
2008
- 2008-12-11 CN CNA2008101851462A patent/CN101477524A/zh active Pending
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521304A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 基于哈希的聚簇表存储方法 |
CN103886005B (zh) * | 2012-12-19 | 2017-04-12 | 国际商业机器公司 | 用于为增强查询性能使用临时性能对象的方法和系统 |
CN103886005A (zh) * | 2012-12-19 | 2014-06-25 | 国际商业机器公司 | 用于为增强查询性能使用临时性能对象的方法和系统 |
CN104050225B (zh) * | 2013-03-14 | 2018-11-09 | Sap欧洲公司 | 数据库模式映射中的视图变量 |
CN104050225A (zh) * | 2013-03-14 | 2014-09-17 | Sap股份公司 | 数据库模式映射中的视图变量 |
CN104519103B (zh) * | 2013-09-30 | 2018-10-26 | 腾讯科技(北京)有限公司 | 网络数据的同步处理方法、服务器及相关系统 |
WO2015043391A1 (en) * | 2013-09-30 | 2015-04-02 | Tencent Technology (Shenzhen) Company Limited | Data synchronization for remote and local databases |
CN104519103A (zh) * | 2013-09-30 | 2015-04-15 | 腾讯科技(北京)有限公司 | 网络数据的同步处理方法、服务器及相关系统 |
CN103793526A (zh) * | 2014-02-24 | 2014-05-14 | 浪潮电子信息产业股份有限公司 | 一种监控sql语句性能的方法 |
CN105095255A (zh) * | 2014-05-07 | 2015-11-25 | 中兴通讯股份有限公司 | 一种数据索引创建方法及装置 |
CN104008191A (zh) * | 2014-06-12 | 2014-08-27 | 北京京东尚科信息技术有限公司 | 一种数据查询方法 |
CN104317893A (zh) * | 2014-10-23 | 2015-01-28 | 国家电网公司 | 基于移动安全存储介质的缩略式数据快照实现方法 |
WO2016155511A1 (en) * | 2015-03-28 | 2016-10-06 | Huawei Technologies Co., Ltd. | A system and method to optimize queries on a view |
CN106095969A (zh) * | 2016-06-17 | 2016-11-09 | 浪潮(北京)电子信息产业有限公司 | 一种数据同步的方法、装置、系统及数据库 |
CN106250457B (zh) * | 2016-07-28 | 2019-07-12 | 国网山东省电力公司电力科学研究院 | 大数据平台物化视图的查询处理方法及系统 |
CN106250457A (zh) * | 2016-07-28 | 2016-12-21 | 国网山东省电力公司电力科学研究院 | 大数据平台物化视图的查询处理方法及系统 |
CN107967274A (zh) * | 2016-10-19 | 2018-04-27 | 航天信息软件技术有限公司 | 数据库中数据同步的方法和装置 |
CN108268524A (zh) * | 2016-12-30 | 2018-07-10 | 北京国双科技有限公司 | 数据库聚合处理方法及装置 |
CN107391642A (zh) * | 2017-07-11 | 2017-11-24 | 人人行科技股份有限公司 | 物化视图刷新方法和装置、存储介质以及处理器 |
CN107391642B (zh) * | 2017-07-11 | 2021-02-09 | 人人行科技股份有限公司 | 物化视图刷新方法和装置、存储介质以及处理器 |
CN108932286B (zh) * | 2018-05-23 | 2022-04-22 | 北京奥星贝斯科技有限公司 | 一种数据查询方法及装置 |
CN108932286A (zh) * | 2018-05-23 | 2018-12-04 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、数据查询方法及装置 |
CN109376171B (zh) * | 2018-08-15 | 2020-10-16 | 广州虎牙信息科技有限公司 | 数据查询方法、装置、计算机存储介质及服务器 |
CN109376171A (zh) * | 2018-08-15 | 2019-02-22 | 广州虎牙信息科技有限公司 | 数据查询方法、装置、计算机存储介质及服务器 |
CN110874366A (zh) * | 2018-08-31 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 数据处理、查询方法和装置 |
CN110875085B (zh) * | 2018-09-03 | 2022-07-29 | 中国石油化工股份有限公司 | 高效批量优化分子结构的方法 |
CN110875085A (zh) * | 2018-09-03 | 2020-03-10 | 中国石油化工股份有限公司 | 高效批量优化分子结构的方法 |
CN112069164A (zh) * | 2019-06-10 | 2020-12-11 | 北京百度网讯科技有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN112069164B (zh) * | 2019-06-10 | 2023-08-01 | 北京百度网讯科技有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN111984680A (zh) * | 2020-08-12 | 2020-11-24 | 北京海致网聚信息技术有限公司 | 基于Hive分区表实现物化视图性能优化的方法及系统 |
CN112214494A (zh) * | 2020-10-21 | 2021-01-12 | 中国银行股份有限公司 | 检索方法及装置 |
CN112214494B (zh) * | 2020-10-21 | 2023-10-24 | 中国银行股份有限公司 | 检索方法及装置 |
CN115658716A (zh) * | 2022-12-26 | 2023-01-31 | 北京滴普科技有限公司 | 面向olap分析数据库的物化视图定时刷新方法、设备及介质 |
CN116541377A (zh) * | 2023-04-27 | 2023-08-04 | 阿里巴巴(中国)有限公司 | 任务的物化视图的处理方法、系统和电子设备 |
CN116541377B (zh) * | 2023-04-27 | 2024-05-14 | 阿里巴巴(中国)有限公司 | 任务的物化视图的处理方法、系统和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101477524A (zh) | 基于物化视图的系统性能优化方法及系统 | |
US10146834B2 (en) | Split processing paths for a database calculation engine | |
US10628419B2 (en) | Many-core algorithms for in-memory column store databases | |
Olston et al. | Automatic optimization of parallel dataflow programs | |
US6339771B1 (en) | Method and system for managing connections to a database management system | |
US9396018B2 (en) | Low latency architecture with directory service for integration of transactional data system with analytical data structures | |
US7779031B2 (en) | Multidimensional query simplification using data access service having local calculation engine | |
US20160140205A1 (en) | Queries involving multiple databases and execution engines | |
US10394807B2 (en) | Rewrite constraints for database queries | |
US20160103914A1 (en) | Offloading search processing against analytic data stores | |
US10885062B2 (en) | Providing database storage to facilitate the aging of database-accessible data | |
CN101178727A (zh) | 用于搜索数据库的方法和系统 | |
US20210004712A1 (en) | Machine Learning Performance and Workload Management | |
US10459760B2 (en) | Optimizing job execution in parallel processing with improved job scheduling using job currency hints | |
US20170147636A1 (en) | First/last aggregation operator on multiple keyfigures with a single table scan | |
Tank et al. | Speeding ETL processing in data warehouses using high-performance joins for changed data capture (cdc) | |
Tho et al. | Zero-latency data warehousing for heterogeneous data sources and continuous data streams | |
CN113157411B (zh) | 一种基于Celery的可靠可配置任务系统及装置 | |
US20170371927A1 (en) | Method for predicate evaluation in relational database systems | |
US20200311066A1 (en) | Query execution including pause and detach operations after first data fetch | |
US10789249B2 (en) | Optimal offset pushdown for multipart sorting | |
US20170139982A1 (en) | Processing of Data Chunks Using a Database Calculation Engine | |
US20230359622A1 (en) | Blocked index join | |
Wu et al. | Raven: Benchmarking Monetary Expense and Query Efficiency of OLAP Engines on the Cloud | |
US11429610B2 (en) | Scaled-out query execution engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20090708 |