首页 / 数据库资源的调度方法和装置

数据库资源的调度方法和装置无效专利 发明

技术领域

[0001] 本发明涉及数据库管理,具体而言,涉及一种数据库资源的调度方法和装置。

相关背景技术

[0002] 随着IT技术的不断普及,目前各种基于数据库的软件系统在各行各业中获得广泛地应用。而随着企业组织对软件系统的应用不断深入,软件系统规模也朝着也来越庞大和复杂的方向发展。数据库通常都是这些系统的核心之一,系统中的大量操作都依赖于数据库。而规模和复杂度的提高使得这些软件系统普遍都在数据库上面临瓶颈,这成为这些软件系统的最常见的瓶颈之一。
[0003] 业务系统的所有数据库请求都可以平等地争用数据库服务器的全部计算资源。当数据库计算资源发生紧张时,如果不对计算资源进行控制,就无法为某些重要的操作保留必需的计算资源。
[0004] 如图1所示,系统包含登录、单据录入、报表统计操作。报表统计在发起之后占用了数据库的大量的CPU时间和内存,导致在报表统计操作结束之前,用户登录或者业务数据录入操作都有可能响应缓慢。
[0005] 各种大型业务计算总是会轻而易举的吞噬掉数据库服务器的大量计算资源,软件系统会在这些操作发起之后突发地变得缓慢和迟钝,这已经成为一种普遍问题。在这种情况下,通过约束软件系统中的某些类型的操作可占用的计算资源的上限,依据不同的工作负荷对其可用资源的进行分配调控,对提升整个应用系统的稳定性和流畅性就具有了良好的实用价值。
[0006] 面对数据库资源瓶颈,目前通常的方法有两种:优化应用系统的SQL操作或相关的数据表和增加硬件资源。
[0007] 前一种方法的本质是修改“业务计算”本身以适应紧缺的资源,需要对应用系统的结构或者内部逻辑进行修改。后一种方法则需要企业在成本上的支持,而通常应用系统的计算资源的要求总是无止境的,随着业务规模的扩大而不断增长。
[0008] 这两种办法从本质上来说,都是绕着问题走,并没有直接介入对“业务计算”和“计算资源”这两者及其之间关系的管理。
[0009] 因此,需要一种新的方式,既能够保证数据库资源不会某些操作全部占用导致缓慢,又能保证数据库资源满足多种业务的操作请求。

具体实施方式

[0028] 为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
[0029] 在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
[0030] 图2是根据本发明的一个实施例的数据库资源的调度方法的流程图。
[0031] 如图2所示,本发明提供一种数据库资源的调度方法,包括:步骤202,为数据库设置多个计算资源池,并为每个计算资源池分配计算资源;步骤204,业务操作发起数据库操作时,根据所述业务操作的类型为所述数据库操作分配计算资源池,并提供所述计算资源池中的计算资源以进行所述数据库操作。在该技术方案中,通过将数据库的资源合理分配,使得各类数据库操作只能占用一定比例的资源,保证了其他数据库操作正常进行。
[0032] 在上述技术方案中,所述业务操作的类型包括工作负荷类型,标识所述数据库操作的工作负荷大小;在所述步骤204中,根据所述业务操作的工作负荷类型,为所述数据库操作分配所述计算资源池。
[0033] 在上述技术方案中,所述业务操作通过连接字符串发起所述数据库操作;在所述步骤204中,还在所述连接字符串中加入工作负荷标识信息,以表示所述业务操作的工作负荷类型。
[0034] 在上述技术方案中,在所述步骤204之前,设置工作负荷类型表,记录所述每个计算资源池与每个工作负荷类型的业务操作之间的对应关系;在所述步骤204中,还根据所述工作负荷类型表,为所述数据库操作分配所述计算资源池。
[0035] 在上述技术方案中,在所述步骤202中,为所述每个计算资源池分配计算资源包括:设置所述每个计算资源池的CPU时间占用率、内存占用率。
[0036] 图3是根据本发明的一个实施例的数据库资源的调度装置的框图。
[0037] 如图3所示,本发明还提供一种数据库资源的调度装置300,包括:设置模块302,为数据库设置多个计算资源池,并为每个计算资源池分配计算资源;调度模块304,业务操作发起数据库操作时,根据所述业务操作的类型为所述数据库操作分配计算资源池,并提供所述计算资源池中的计算资源以进行所述数据库操作。在该技术方案中,通过将数据库的资源合理分配,使得各类数据库操作只能占用一定比例的资源,保证了其他数据库操作正常进行。
[0038] 在上述技术方案中,所述业务操作的类型包括工作负荷类型,标识所述数据库操作的工作负荷大小;所述调度模块304根据所述业务操作的工作负荷类型,为所述数据库操作分配所述计算资源池。
[0039] 在上述技术方案中,所述业务操作通过连接字符串发起所述数据库操作;所述调度装置还包括:标识模块306,在所述连接字符串中加入工作负荷标识信息,以表示所述业务操作的工作负荷类型。
[0040] 在上述技术方案中,所述设置模块302还设置工作负荷类型表,记录所述每个计算资源池与每个工作负荷类型的业务操作之间的对应关系;所述调度模块304还根据所述工作负荷类型表,为所述数据库操作分配所述计算资源池。
[0041] 在上述技术方案中,所述设置模块302通过设置所述每个计算资源池的CPU时间占用率、内存占用率,来为所述每个计算资源池分配计算资源。
[0042] 图4是根据本发明的一个实施例的数据库资源的调度方法分配数据库资源的示意图。
[0043] 本实施例中的数据库资源的调度方法如下:
[0044] (1)划分计算资源池:为数据库划分多个计算资源池,每个计算资源池都被指定了在其中执行的数据库操作能够使用的CPU、内存的上限。
[0045] (2)分类标识系统工作负荷:为软件系统的各种业务操作按其工作负荷大小进行分类标识;当某种类型的业务计算在进行数据库操作时,将操作的负荷类型标识符传递给数据库,由数据库按负荷类型分配到不同计算资源池执行计算。
[0046] (3)按工作负荷类型分配数据库计算资源池:在数据库中定义资源分配策略,根据业务系统发起的操作中的工作负荷类型标识符将对应的数据库请求分配到某个计算资源池执行。
[0047] 按以上步骤实现的数据库资源分配的一个示意图如图4所示。
[0048] 下面详细阐述每个步骤的具体做法:
[0049] 一、为数据库划分多个计算资源池
[0050] “计算资源池”定义了对数据库操作可用的计算资源的范围。对计算资源池的划分中,CPU时间占用率、内存占用率是两个主要的指标。如上图,将一个数据库总的计算资源分为两个计算资源池:一部分是用于软件系统中的诸如登录、单据录入之类的轻量操作的计算资源池,在资源紧张时只能占用70%的CPU时间和内存;另一部分是为诸如报表统计这类重型操作的计算资源池,在资源紧张时最多只能占用30%的CPU时间和内存。
[0051] 划分资源池的做法需要数据库系统的支持。“计算资源池”是个一般性的概念,对于不同的数据库,其具体表现形式不同。当今的主流数据库(SqlServer、Oracle等)都具备了这样的基础功能,尽管在不同厂商的数据库系统上的配置操作有差别,但其基本过程都是一样的,那就是:
[0052] (1)按负荷类型划分并命名多个资源池。例如在一个数据库中我们划分出3个资源池pool_normal,pool_ligh和pool_default,分别用于轻量操作、重量操作和非业务系统的操作。
[0053] (2)为每个资源池设置可用资源上限。例如,用于系统中占大多数的轻量操作的pool_normal资源池在资源紧缺时最多可用到50%CPU和内存,而pool_high则配置为在资源紧缺时仅能占用30%CPU和40%内存,而pool_default配置为在资源紧缺时可占用20%CPU和10%内存。
[0054] 二、分类标识系统工作负荷
[0055] 这是一个对软件系统中各类操作的按其工作负荷大小进行分类的过程,最终需要形成一个工作负荷类型表。例如,软件系统中常见的登录、表单录入、表单修改这些操作都是比较轻量的,那么可以将这些轻量的操作都标识为normal类型操作;而对于报表查询、批量导入导出之类的操作统一标识为high类型操作;这样我们的系统中的工作负荷类型表包括两种负荷类型:normal和high。
[0056] “工作负荷类型表”在此只是个一般性的概念,对于不同的软件系统,其形成工作负荷的类型会由于其具体情况而有所不同,可能更加细化,而“工作负荷类型表”的具体形式也可能不同,但其结果都是相同的,也就是对系统中的工作负荷做出分类和标识。
[0057] 建立工作负荷分类之后,需要在执行业务操作时将工作负荷的分类标识符在发起的数据库请求中传递给数据库系统。工作负荷分类标识的传递方法是与数据库系统按工作负荷分配计算资源池的分配策略密切相关的,如图5所示。
[0058] 步骤502,执行业务操作;
[0059] 步骤504,准备连接数据库;
[0060] 步骤506,为数据连接加入操作的工作负荷类型:通过在业务操作发起数据库操作的连接字符串中加入工作负荷分类标识信息的方法传递工作负荷类型。
[0061] 由于不同的数据库系统的连接字符串的格式不同,在连接字符串中添加工作负荷类型信息的方式也略有不同。例如,要将界面输入的一份表单数据通过执行Insert操作将数据插入到某个表,在系统中将该操作的工作负荷标识为normal类型。那么在连接数据库时通过采用形式诸如“Data Source=localhost;Initial Catalog EnterpriseDB;UserID=sa;Password=123456;Application Name=normal”的连接字符串,将“Application Name”配置节的值设置为工作负荷类型,就可以将工作负荷类型传递给数据库系统。如果是诸如报表查询之类的重型操作,其工作负荷类型为high,那么“Application Name”配置节则应该是“Application Name=high”形式。“Application Name”配置节在此仅是一个示例,对于不同的数据库,其连接字符串使用的配置节也有所不同,有些并没有Application Name配置节,但也可以找到类似的配置节或者添加自定义配置节来传递工作负荷类型,例如“workload=normal”。再或者也可以通过所有数据库连接字符串中都存在的用户名配置节,如:User Id=normal,不过以连接字符串的用户名配置节传递工作负荷类型的做法要求数据库中得为此创建数据库用户才行。
[0062] 步骤508,连接并执行数据库操作。工作负荷类型信息被加入到数据库连接字符串的特定的配置节中,当数据库收到请求后可以根据请求的连接字符串从特定的配置节中获取到工作负荷类型,然后分配到相应的计算资源池执行操作。
[0063] 三、按工作负荷类型分配数据库计算资源池
[0064] 在数据库中定义资源分配策略,根据业务系统发起的操作中的工作负荷类型标识符将对应的数据库请求分配到某个计算资源池执行,具体步骤如图6所示:
[0065] 步骤602,获取数据库当前回话的“工作负荷类型”:获取工作负荷类型的方法与其传递方式相关,通过调用数据库系统的API可以获取工作负荷类型标识。以MS SqlServer2008为例,如果是通过Application Name配置节传递的,通过系统函数APP_NAME()可以获得该值,也就是工作负荷类型标识。如果是通过用户名传递,则通过系统函数SUSER_NAME()获得用户名,也就是工作负荷标识。
[0066] 步骤604,根据“工作负荷类型”确定可以使用的计算资源池:根据工作负荷类型确定可使用的计算资源池的过程是与计算资源池的配置过程相对应的。例如,软件系统的工作负荷分为normal和high两种类型,我们为此配置的计算资源池如果也采用一致相关的命名,如pool_normal和pool_high,除此之外数据库还配置了pool_default池。也就是说,如果当前的工作负荷类型为“normal”,则可以确定当前应使用pool_normal池执行;如果是“high”,则当前应使用pool_high池执行;如果都不是,则使用pool_default池执行。
[0067] 步骤606,将数据库操作交到使用的计算资源池上执行:确定了要使用的计算资源池之后,需要将当前数据库请求的操作交由数据库系统安装指定的计算资源池配置的资源约束方案执行。这一步骤的具体操作方法对于不同类型的数据库系统在API上有所区别,对于MS SqlServer2008是通过自定义分类器函数(Classifer Function)返回要使用的计算资源池的名称给数据库系统,由数据库引擎将请求路由到该计算资源池执行。主流的数据系统都有相应的API提供类似的功能,对于不同的数据库系统只需根据API做些相应调整即可。
[0068] 根据本发明的技术方案,可以实现一种数据库资源的调度方法和装置,通过限制某些重型操作在系统资源紧缺时的可用资源上限,可以有效地平缓这些重型操作突发的大计算量给系统造成的冲击。
[0069] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页