数据库的高性能查询方法和装置制造方法

文档序号:6622012阅读:208来源:国知局
数据库的高性能查询方法和装置制造方法【专利摘要】本发明实施例公开了一种数据库的高性能查询方法和装置。所述数据库的高性能查询方法包括:通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中;通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。本发明实施例提供的数据库的高性能查询方法和装置能够显著提高数据库系统的数据查询效率。【专利说明】数据库的高性能查询方法和装置【
技术领域
】[0001]本发明实施例涉及数据库【
技术领域
】,尤其涉及一种数据库的高性能查询方法和装置。【
背景技术
】[0002]数据库是按照数据结构来组织、存储和管理数据的仓库。数据库的概念产生于20世纪60年代。随着信息技术和时长的发展,特别是近年来互联网的蓬勃发展,数据库技术也得到了广泛的应用。如今,大部分的应用程序的后台都会部署数据库系统。[0003]现有的数据库系统在存储数据时通常将数据存储在系统硬盘上,而用户需要对数据库系统中的数据进行查询时,则需要从系统硬盘上读取数据。而从系统硬盘上读取数据会引起硬盘的物理输入输出(Inputoutput,10)。由于对系统硬盘的物理10需要耗费一定的时间,造成现有的数据库系统对数据查询请求的处理效率偏低。【
发明内容】[0004]有鉴于此,本发明实施例提出一种数据库的高性能查询方法和装置,以显著提高数据库系统的数据查询效率。[0005]第一方面,本发明实施例提供了一种数据库的高性能查询方法,所述方法包括:[0006]通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中;[0007]通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。[0008]第二方面,本发明实施例提供了一种数据库的高性能查询装置,所述装置包括:[0009]数据存储模块,用于通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中;[0010]数据查询模块,用于通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。[0011]本发明实施例提供的数据库的高性能查询方法和装置通过执行数据定义语言,将待存储数据存储在系统内存的缓冲区中,并通过执行数据查询语言,对存储在所述缓冲区中的数据进行查询,由于被查询的数据存储在系统内存的缓冲区中,而不是存储在系统硬盘上,因此查询数据时不需要发起磁盘的物理输入输出,显著的提高了数据库系统的数据查询效率。【专利附图】【附图说明】[0012]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:[0013]图1是本发明第一实施例提供的数据库的高性能查询方法的流程图;[0014]图2是本发明第一实施例提供的Oracle数据库系统的系统全局共享区(Systemglobalarea,SGA)的结构图;[0015]图3是本发明第一实施例提供的最近最少使用(Leastrecentlyused,LRU)队列管理的示意图;[0016]图4是本发明第二实施例提供的数据库的高性能查询方法的流程图;[0017]图5是本发明第二实施例提供的数据库的高性能查询方法中缓冲区分配的流程图;[0018]图6是本发明第三实施例提供的数据库的高性能查询方法的流程图;[0019]图7是本发明第四实施例提供的数据库的高性能查询装置的结构图。【具体实施方式】[0020]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。[0021]图1至图3示出了本发明的第一实施例。[0022]图1是本发明第一实施例提供的数据库的高性能查询方法的流程图。所述数据库的高性能查询方法由数据库的高性能查询装置执行。所述数据库的高性能查询装置集成在一台用于对数据库中的数据进行查询的客户终端中。参见图1,所述数据库的高性能查询方法包括:[0023]S110,通过执行数据定义语言(Datadefinitionlanguage,DDL),将待存储数据存储在系统内存的缓冲区中。[0024]所述DDL是数据库的结构化查询语言(Structuredquerylanguage,SQL)中负责对数据库中的数据结构以及数据库对象进行定义的语言。在本实施例中,通过运行所述DDL,指定存储所述待存储数据的位置为系统内存的缓冲区。[0025]所述数据库系统具有自身的系统内存。所述系统内存可以用于存储数据库系统的常用变量。所述系统内存包括缓冲区。所述缓冲区是在向数据库系统中存储数据之前,在所述系统内存中预先开辟的用于缓存数据的区域。[0026]优选的,实施本实施例提供的数据库的高性能查询方法的数据库系统是Oracle数据库系统。而且,所述缓冲区可以是Oracle数据库系统中SGA的保留缓冲区池(Ke印bufferpool)〇[0027]进一步的,当所述待存储数据在所述数据库系统中还没有被创建时,用于指定存储所述待存储数据的位置的指令可以是:[0028]createtabletable_namestorage(buffer_poolkeep)asselect*fromdba_objects。[0029]其中,参数table_name是要创建的表的表名。[0030]而当所述待存储数据在所述数据库中已经被创建,只不过其没有被存储在所述数据库系统的系统内存的缓冲区上时,用于指定存储所述待存储数据的位置的指令可以是:[0031]altertabletable_namestorage(buffer_poolkeep)。[0032]同样,参数table_name是要更改的表的表名。[0033]图2是本发明第一实施例提供的Oracle数据库系统的SGA的结构图。参见图2,在一个SGA的实例中包括有数据库高速缓存(Databasebuffercache)210。在所述数据库高速缓存中包括三个缓冲区:保留池(Keepbufferpool)211、默认池(Defaultbufferpool)212以及回收池(Recyclebufferpool)213。其中,所述保留池211用于临时存放需要经常访问的数据的共享缓冲区。[0034]所述保留池采用最近最少使用(Leastrecentlyused,LRU)链表进行队列管理。LRU是Oracle数据库系统中内存管理的一种页面置换算法。对于在内存中但又不用的数据叫做LRU。根据所述LRU算法,Oracle数据库系统会获知哪些数据属于最近最少使用的数据而将其移出内存而腾出空间来加载另外的数据。通过所述LRU算法,所述保留池实现了利用容量不大的内存为最多的进程提供内存资源。[0035]图3是本发明第一实施例提供的LRU队列管理的示意图。参见图3,所述保留池中310存放有数据表311。所述保留池中的数据使用LRU链表进行队列管理。所述LRU链表具有两个端点,一个是LRU冷端,用于存放最近最为不经常使用的数据,另一个是LRU热端,用于存放最近最为经常使用的数据。当有新的数据被缓存在所述保留池中时,新的数据被缓存在所述LRU热端,而被置换的数据由应用程序301存放在所述LRU冷端,除非所述保留池的空间不足以再缓存被置换出的数据。[0036]在有数据需要被存储在所述数据库中时,所述数据库的高性能查询装置将待存储数据存储在系统内存的缓冲区内。优选的所述数据库的高性能查询装置将待存储数据存储在Oracle数据库系统的保留池。[0037]S120,通过执行数据查询语言(Dataquerylanguage,DQL),对存储在所述缓冲区中的数据进行查询。[0038]所述数据查询语言是专门用于对数据库中存储的数据进行查询的语句。在SQL中,所述数据查询语言包括select指令。在执行数据定义语言,将待存储数据存储在系统内存的缓冲区中以后,所述数据库的高性能查询装置通过执行数据查询语言,对存储在所述缓冲区中的数据进行查询。由于所述数据库的高性能查询装置是对存储在系统内存中的缓冲区中的数据进行查询,而不是对系统硬盘上的数据进行查询,所以该数据查询不会引起物理磁盘10,能够显著的提高数据库系统的数据查询效率。[0039]优选的,可以将数据库系统中的db_file_multiblock_read_count参数增大。由于该参数控制着数据读取时读取的数据块的数量,所以增大数据库的db_file_multibl〇ck_reacLcount参数能够增大每次数据读取操作中读取的数据块的数量,从而进一步的提高数据库系统的数据查询效率。[0040]采用所述数据库的高性能查询方法能够提高系统中有限的频繁查询且要求有极大查询性能的数据,能够提高复杂查询功能对数据的查询性能,比如模糊的查询方式、排序的查询方式,还能够解决系统特定数据短期需要高并发查询的数据,在线缓存数据系统不受影响。[0041]本实施例通过执行DDL,将待存储数据存储在系统内存的缓冲区中,以及通过执行DQL,对存储在所述缓冲区中的数据进行查询,由于是对系统内存缓冲区中的数据进行查询,不会引起物理磁盘10,所以能够显著的提高数据库系统的数据查询效率。[0042]图4及图5示出了本发明的第二实施例。[0043]图4是本发明第二实施例提供的数据库的高性能查询方法的流程图。所述数据库的高性能查询方法以本发明第一实施例为基础,进一步的,在通过执行DDL,将待存储数据存储在系统内容的缓冲区中之前,还包括:计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区。[0044]参见图4,所述数据库的高性能查询方法包括:[0045]S410,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区。[0046]如果所述缓冲区设置的容量太小,则在向所述缓冲区中存储数据的过程中可能会使所述缓冲区中的原有数据溢出。为了防止所述缓冲区中的数据溢出,需要为所述缓冲区分配合适的容量。[0047]在本实施例中,在向所述缓冲区中存储数据之前,所述数据库的高性能存储装置需要先行计算所需要的系统内存中的缓冲区的大小,并根据所述计算结果在所述系统内存中分配所述缓冲区。[0048]S420,通过执行DDL,将待存储数据存储在系统内存的缓冲区中。[0049]S430,通过执行DQL,对存储在所述缓冲区中的数据进行查询。[0050]图5是本发明第二实施例提供的数据库的高性能查询方法中缓冲区分配的流程图。参见图5,优选的,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区包括:[0051]S411,计算所需要的系统内存中的缓冲区的大小。[0052]为了能够为所述缓冲区分配足够大的空间,以避免在所述缓冲区中添加数据时原有数据溢出,在向所述数据库系统存储数据之前先行计算所需要的系统内存中的缓冲区的大小。优选的,可以通过对所述缓冲区中需要存放的表级数据的总量进行预估对所需要的系统内存中的缓冲区的大小进行计算。[0053]S412,在操作系统中将设定大小的系统内存分配给数据库系统,其中,所述设定大小等于数据库系统所需内存大小与所述缓冲区大小的和。[0054]完成对所需要的系统内存中的缓冲区的大小的计算后,在操作系统中将设定大小的系统内存分配给数据库系统。所述设定大小等于数据库系统所需要的内存大小与计算的缓冲区大小的和。[0055]示例的,在Linux64位系统中,Oracle数据库系统所需要的内存大小为4GB。[0056]S413,在所述数据库系统中将获得的内存空间中所述缓冲区大小的内存作为缓冲区。[0057]在操作系统中为所述数据库系统分配系统内存以后,从已经分配的系统内存中分配缓冲区。因为分配给数据库系统的系统内存是严格按照数据库系统所述内存大小与所述缓冲区的大小的和计算得到的,所以按照上述方法分配的缓冲区的大小就是预先计算的缓冲区的大小。[0058]本实施例通过在向所述缓冲区中存储数据之前,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区,使得在数据存储之前能够为所述缓冲区分配合适的容量,有效的避免了将数据存入缓冲区时缓冲区中的原有数据溢出。[0059]图6示出了本发明的第三实施例。[0060]图6是本发明第三实施例提供的数据库的高性能查询方法的流程图。所述数据库的高性能查询方法以本发明的第一实施例为基础,进一步的,在通过执行DQL,对存储在所述缓冲区中的数据进行查询之后,还包括:通过开启数据库系统的自动跟踪功能,检查缓存对象在所述缓冲区中的缓存情况。[0061]参见图6,所述数据库的高性能查询方法包括:[0062]S610,通过执行DDL,将待存储数据存储在系统内存的缓冲区中。[0063]S620,通过执行DQL,对存储在所述缓冲区中的数据进行查询。[0064]S630,通过开启数据库系统的自动跟踪功能,检查缓存对象在所述缓冲区中的缓存情况。[0065]所述Oracle数据库系统具有自动跟踪功能。所述自动跟踪功能在Oracle数据库系统中用于对数据查询语句的执行结果进行统计收集。在对存储在所述缓冲区中的数据进行查询之后,开启所述自动跟踪功能,并且检查所述缓存对象在所述缓冲区中的缓存情况。[0066]所述缓冲对象就是被缓存在所述缓冲区中的数据。而且,所述缓冲对象通常以数据表的表项的形式缓存在所述缓冲区中。[0067]通过将对所述缓冲区中缓存对象的缓存情况的检查,能够保证所述数据库系统的缓冲区的正常使用,提高了所述数据库系统运行的安全性。[0068]本实施例通过开启数据库系统的自动跟踪功能检查缓存对象在所述缓冲区中的缓存情况,从而在进行数据查询之后及时检查缓存对象在所述缓冲区中的缓存情况,提高了所述数据库系统运行的安全性。[0069]图7示出了本发明的第四实施例。[0070]图7是本发明第四实施例提供的数据库的高性能查询装置的结构图。参见图7,所述数据库的高性能查询装置包括:数据存储模块720以及数据查询模块730。[0071]所述数据存储模块720用于通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中。[0072]所述数据查询模块730用于通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。[0073]优选的,所述数据库的高性能查询装置还包括:缓冲区分配模块710。[0074]所述缓冲区分配模块710用于在通过执行数据定义语言DDL,将待存储数据存储在系统内容的缓冲区中之前,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区。[0075]优选的,所述缓冲区分配模块710包括:缓冲区大小计算单元711、系统内存分配单元712以及缓冲区分配单元713。[0076]所述缓冲区大小计算单元711用于计算所需要的系统内存中的缓冲区的大小。[0077]所述系统内存分配单元712用于在操作系统中将设定大小的系统内存分配给数据库系统,其中,所述设定大小等于数据库系统所需内存大小与所述缓冲区大小的和。[0078]所述缓冲区分配单元713用于在所述数据库系统中将获得的内存空间中所述缓冲区大小的内存作为缓冲区。[0079]优选的,所述数据库的高性能查询装置还包括:缓存检查模块740。[0080]所述缓存检查模块740用于在通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询的同时,通过开启数据库系统的自动跟踪功能,检查缓存对象在所述缓冲区中的缓存情况。[0081]优选的,所述数据库系统包括Oracle数据库系统,所述缓冲区包括保留池Keepbufferpoolo[0082]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。[0083]本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。[0084]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间的相同或相似的部分互相参见即可。[〇〇85]以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。【权利要求】1.一种数据库的高性能查询方法,其特征在于,包括:通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中;通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。2.根据权利要求1所述的方法,其特征在于,在通过执行数据定义语言DDL,将待存储数据存储在系统内容的缓冲区中之前,还包括:计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区。3.根据权利要求2所述的方法,其特征在于,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区包括:计算所需要的系统内存中的缓冲区的大小;在操作系统中将设定大小的系统内存分配给数据库系统,其中,所述设定大小等于数据库系统所需内存大小与所述缓冲区大小的和;在所述数据库系统中将获得的内存空间中所述缓冲区大小的内存作为缓冲区。4.根据权利要求1所述的方法,其特征在于,在通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询之后,还包括:通过开启数据库系统的自动跟踪功能,检查缓存对象在所述缓冲区中的缓存情况。5.根据权利要求1至4任一所述的方法,其特征在于,所述数据库系统包括Oracle数据库系统,所述缓冲区包括保留池Keepbufferpool。6.-种数据库的高性能查询装置,其特征在于,包括:数据存储模块,用于通过执行数据定义语言DDL,将待存储数据存储在系统内存的缓冲区中;数据查询模块,用于通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询。7.根据权利要求6所述的装置,其特征在于,还包括:缓冲区分配模块,用于在通过执行数据定义语言DDL,将待存储数据存储在系统内容的缓冲区中之前,计算所需要的系统内存中的缓冲区的大小,并根据计算结果在所述系统内存中分配所述缓冲区。8.根据权利要求7所述的装置,其特征在于,所述缓冲区分配模块包括:缓冲区大小计算单元,用于计算所需要的系统内存中的缓冲区的大小;系统内存分配单元,用于在操作系统中将设定大小的系统内存分配给数据库系统,其中,所述设定大小等于数据库系统所需内存大小与所述缓冲区大小的和;缓冲区分配单元,用于在所述数据库系统中将获得的内存空间中所述缓冲区大小的内存作为缓冲区。9.根据权利要求6所述的装置,其特征在于,还包括:缓存检查模块,用于在通过执行数据查询语言DQL,对存储在所述缓冲区中的数据进行查询之后,通过开启数据库系统的自动跟踪功能,检查缓存对象在所述缓冲区中的缓存情况。10.根据权利要求6至9任一所述的装置,其特征在于,所述数据库系统包括Oracle数据库系统,所述缓冲区包括保留池Keepbufferpool。【文档编号】G06F17/30GK104112024SQ201410371252【公开日】2014年10月22日申请日期:2014年7月30日优先权日:2014年7月30日【发明者】杨宇申请人:北京锐安科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1