用于数据库连接池的资源分配方法和装置的制造方法_2

文档序号:9708319阅读:来源:国知局
nBase 等软件系统。
[0033] 数据库连接:应用程序(即客户端)和数据库交互时,需要根据一定的通信协议建 立一个通道,这个通道称之为数据库连接。
[0034] 数据库连接池:当应用程序(即客户端)请求和数据库建立数据库连接时,在数据 库服务器端实时建立上述连接即消耗时间,又消耗数据库服务器中的资源。为了使得应用 程序(即客户端)快速访问数据库中的数据,在应用程序(即客户端)上,设置一个队列结 构来预先建立一定数量的数据库连接,当这些数据库连接空闲时,其连接信息会出现在上 述的队列结构中。当应用程序(即客户端)请求和数据库通信时,就可以检测该队列结构 中是否存在空闲的数据库连接,如果存在,则直接获取并使用之,如果不存在,则实时创建 新的数据库连接,并将新创建的数据库连接存储在该数据库连接池中。上述数据库连接池 机制有效地避免了实时创建大量数据库连接的所耗费的时间代价和资源代价,提升了应用 性能,提高了数据库端的资源利用率。
[0035] 图1是根据本申请实施例的用于数据库连接池的资源分配方法的流程图。如图1 所示,该方法包括如下的步骤S102至步骤S104 :
[0036] 步骤S102,接收客户端发送的数据库访问请求。
[0037] 客户端即为前述的应用程序。客户端需要与数据库交互时,客户端可以向数据库 发送数据库访问请求,在数据库进行相应之前,数据层中的连接分配决策层可以首先拦截 客户端发送的数据库访问请求,也即,连接分配决策层接收客户端发送的数据库访问请求, 连接分配决策层用于接收到的根据数据库访问请求决定是否将数据库连接分配给该客户 端。数据库访问请求包括查询、更改、添加、删除数据库中的数据的请求。
[0038] 步骤S104,根据数据库访问请求的历史执行结果判断是否允许将数据库连接池中 空闲的数据库连接分配给客户端。
[0039] 数据库访问请求的历史执行结果是指该条数据库访问请求在本次请求之前的一 段时间内被执行时记录的结果,其中,包括该数据库访问请求是否被成功执行,以及在该数 据库访问请求被成功执行时,该历史执行结果还包括数据库访问请求的执行时间和/或出 错率。
[0040] 具体地,可以对数据库访问请求进行解析,得到解析结果,并根据解析结果查询数 据列表中存储的数据库访问请求的历史执行结果,从而判断是否允许将数据库连接池中空 闲的数据库连接分配给客户端。空闲的数据库连接即为可用的数据库连接。
[0041] 其中,如果判断出允许将数据库连接池中空闲的数据库连接分配给客户端,则将 数据库连接池中的空闲的数据库连接分配给客户端。如果判断出不允许将数据库连接池中 空闲的数据库连接分配给客户端,则不将数据库连接池中的空闲的数据库连接分配给客户 端。
[0042] 具体地,当前述的历史结果表明该数据库访问请求在历史上表现良好,则将数据 库连接池中的空闲的数据库连接分配给客户端,否则,不将数据库连接池中的空闲的数据 库连接分配给客户端。
[0043] 通过本申请实施例,采用接收客户端发送的数据库访问请求;根据数据库访问请 求的历史执行结果判断是否允许将数据库连接池中空闲的数据库连接分配给客户端;如果 判断出允许将数据库连接池中空闲的数据库连接分配给客户端,则将数据库连接池中的空 闲的数据库连接分配给客户端,由于可以通过历史执行结果对数据库访问请求进行筛选, 仅仅将空闲的数据库连接分配给历史表现良好的数据库访问请求,而不对历史表现差的数 据库访问请求分配数据库连接,因此可以防止历史表现差的数据库访问请求占用数据库连 接,节约数据库连接资源,达到了防止数据库连接池中的资源耗尽的效果。
[0044] 优选地,在本申请实施例中,步骤S104根据数据库访问请求的历史执行结果判断 是否允许将数据库连接池中空闲的数据库连接分配给客户端可以包括:
[0045] S2,从历史执行结果中获取已执行的数据库访问请求的执行结果属性。
[0046] 具体地,可以获取一段时间内已执行的数据库访问请求的执行结果属性,其中,执 行结果属性与数据库访问请求一一对应。其中,执行结果属性包括:执行时间和/或出错 率。执行时间包括执行时间的起始点和执行时间的时长。出错率是指在一段时间内,同一 数据库访问请求在执行时出错的次数和被执行的总次数的比值。
[0047] S4,根据执行结果属性判断是否允许将数据库连接池中空闲的数据库连接分配给 客户端。
[0048] 具体地,可以将执行结果属性进行分类存储,如果执行结果属性满足分配条件,则 将其存储在第一列表(如,数据库访问请求白名单)中;如果执行结果属性不满足分配条 件,则将其存储在第二列表(如,数据库访问请求黑名单)中。其中,如果判断出执行结果 存储在第一列表中,则允许将数据库连接池中空闲的数据库连接分配给客户端;如果判断 出执行结果存储在第二列表中,则不允许将数据库连接池中空闲的数据库连接分配给客户 端。
[0049] 通过本申请实施例,采用执行结果属性(即,执行时间和/或出错率)来判断是否 允许将数据库连接池中空闲的数据库连接分配给客户端,由于执行时间和/或出错率易于 记录和检测,并且可以进行量化,因此可以精确的判断出是否允许将数据库连接池中空闲 的数据库连接分配给客户端,达到了在防止数据库连接池中的资源耗尽的同时,使得数据 库连接的分配更准确的效果。
[0050] 例如,数据库访问请求包括sql请求,由于系统中某些sql索引出现问题,这样,每 次执行该sql请求都会超时,这些sql请求一直占有数据库连接直至超时才会释放,导致数 据库连接池中的资源被迅速占用,甚至瘫痪。通过本申请实施例,根据sql请求的历史执行 结果,不再给某些在一段时间内常出现超时的sql请求分配数据库连接,以防止数据库连 接池资源耗尽。
[0051] 优选地,在本申请实施例中,由于执行结果属性可以包括一个或者多个,因此,在 根据执行结果属性判断是否允许将数据库连接池中空闲的数据库连接分配给客户端时,可 以通过以下任一方式实现:
[0052] 方式11,当执行结果属性包括执行时间时,从已执行的数据库访问请求中获取执 行时间超过第一预定时间阈值的数据库访问请求的第一个数,若第一个数小于第一数量阈 值,则判断出允许将数据库连接池中空闲的数据库连接分配给客户端。若第一个数大于等 于第一数量阈值,则判断出不允许将数据库连接池中空闲的数据库连接分配给客户端。其 中,若第一个数大于等于第一数量阈值,则其对应的执行时间可以存储在时间黑名单中。
[0053] 方式12,当执行结果属性包括出错率时,从已执行的数据库访问请求中获取出现 执行错误的数据库访问请求的第一比例,若第一比例小于第一比例阈值,则判断出允许将 数据库连接池中空闲的数据库连接分配给客户端。若第一比例大于等于第一比例阈值,则 判断出不允许将数据库连接池中空闲的数据库连接分配给客户端。若第一比例大于等于第 一比例阈值,则其对应的出错率可以存储在出错率黑名单中。
[0054] 方式13,当执行结果属性包括执行时间和出错率时,从已执行的数据库访问请求 中获取执行时间超过第一预定时间阈值的数据库访问请求的第一个数、且从已执行的数据 库访问请求中获取出现执行错误的数据库访问请求的第一比例,若第一个数小于第一数量 阈值、且第一比例小于第一比例阈值,则判断出允许将数据库连接池中空闲的数据库连接 分配给客户端。若第一个数大于等于第一数量阈值、和/或第一比例大于等于第一比例阈 值,则判断出不允许将数据库连接池中空闲的数据库连接分配给客户端。
[0055] 通过本申请实施例,采用预定时间阈值和/或比例阈值,由于可以将记录的执行 时间与预定的时间阈值进行比较,和/或将记录的出错率与预定的比例阈值进行比较,从 而可以得到更加准确的比较结果,因此量化跟准确,达到了在防止数据库连接池中的资源 耗尽的同时,准确量化是否进行数据库连接分配的效果。
[0056] 优选地,在本申请实施例中,在判断出允许将数据库连接池中空闲的数据库连接 分配给客户端之后,资源分配方法还包括:
[0057] S6,创建数据库访问请求白名单。
[0058] S8,将允许将数据库连接池中空闲的数据库连接分配给客户端的数据库访问请求 存储至数据库访问请求白名单中。
[0059] 需要说明的是,在创建数据库访问请求白名单的同时,还可以创建数据库访问请 求黑名单,其中,将不允许将数据库连接池中空闲的数据库连接分配给客户端的数据库访 问请求存储至数据库访问请求黑名单中。
[0060] 以数据库访问请求黑名单为例,该数据库访问请求黑名单可以以数据库表的方式 直接存储在数据库中。具体地,在数据库访问请求黑名单中,可以存储数据库访问请求的模 板、发生时间、执行时间、报错时间。例如,当存储数据库访问请求为Sql请求时,在数据库 访问请求黑名单中可以存储形式如select*from ebpp_bill_info t where t.biz_type = #BizType#and card_no = #CardNo#的Sql请求的模板。发生时间是指数据库访问请求被 发起的时间;执行时间是指执行数据库访问请求所消耗的时间;报错时间是指在执行数据 库访问请求过程中如果出现错误,则错误上报的时间。优选地,在数据库访问请求黑名单 中,还可以存储发起该数据库访问请求的用户的标识或者客户端的标识。
[0061] 同理,数据库访问请求白名单中也可以存储上述内容,详细内容同上,再次不再赘 述。不同的是,在数据库访问请求白名单和数据库访问请求黑名单中,针对同一存储内容存 储的参数值不同。
[0062] 需要说明的是,上述的数据库访问请求白名单和数据库访问请求黑名单中的存储 内容可以用于量化各条数据库访问请求的历史执行结果。
[0063] 优选地,在本申请实施例中,由于历史上使用同一数据库访问请求的客户端可以 包括一个或者多个,因此,当使用同一数据库访问请求的客户端包括多个时,在根据执行结 果属性判断是否允许将数据库连接池中空闲的数据库连接分配给客户端时,可以通过以下 任一方式实现:
[0064] 方式21,当执行结果属性包括执行时间时,从已执行的数据库访问请求中获取执 行时间超过第二预定时间阈值的数据库访问请求的第二个数,并判断已执行的数据库访问 请求中由前述的客户端发送的数据库访问请求的执行结果是否满足预定条件;若第二个数 小于第二数量阈值、且执行结果满足预定条件,则判断出允许将数据库连接池中空闲的数 据库连接分配给客户端。否则,判断出不允许将数据库连接池中空闲的数据库连接分配给 客户端。
[0065] 方式22,当执行结果属性包括出错率时,从已执行的数据库访问请求中获取出现 执行错误的数据库访问请求的第二比例,并判断已执行的数据库访问请求中由客户端发送 的数据库访问请求的执行结果是否满足预定条件;若第二比例小于第二比例阈值、且执行 结果满足预定条件,则判断出允许将数据库连接池中空闲的数据库连接分配给客户端。否 贝1J,判断出不允许将数据库连接池中空闲的数据库连接分配给客户端。
[0066] 方式23,当执行结果属性包括执行时间和出错率时,从已执行的数据库访问请求 中获取执行时间超过第二预
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1