数据库游标的控制方法与数据库系统与流程

文档序号:11230653阅读:442来源:国知局
数据库游标的控制方法与数据库系统与流程

本发明涉及数据库技术领域,尤其涉及一种数据库游标的控制方法与数据库系统。



背景技术:

在数据库系统中,经常存在无法回收的内存资源或正在使用的内存资源过多,造成系统中的可用内存越来越少,导致系统运行不流畅。

在数据库系统中通常会应用到游标,当游标被引用后没有及时关闭,容易增大内存溢出机率,这样会导致系统运行越来越慢,直到宕机。目前内存泄露工具一般采用内存检查工具分析出系统的静态内存错误,但无法实时监测并关闭游标,这将导致数据库系统在出现内存资源不足的情况时,系统会因缺少内存运行资源而出现卡顿、宕机甚至系统崩溃等问题。



技术实现要素:

本发明的主要目的在于提供一种数据库游标的控制方法与数据库系统,旨在解决数据库系统因游标未关闭造成系统内存资源不足,导致系统无法正常运行的技术问题。

为实现上述目的,本发明实施例提供一种数据库游标的控制方法,所述游标设置有游标级别,其中包括低级别游标,所述数据库游标的控制方法包括:

当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;

当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。

可选地,所述当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源的步骤之后还包括:

统计当前数据库系统的闲置内存资源,以获得对应的统计参数;

当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源。

可选地,所述当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源的步骤之后还包括:

存储本次释放内存资源的所有事件信息,以作为内存资源优化的依据。

可选地,所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤包括:

当检测到统计参数小于预设阈值时,显示当前排序列表中所有的已激活游标,以供用户选择;

基于用户选择的预选游标,释放预选游标占用的内存资源。

可选地,所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤包括:

当检测到统计参数小于预设阈值时,获取排序列表中所有已激活游标的内存资源的释放权限;

当检测到释放权限未能成功释放所有已激活游标占用的内存资源时,强制获取数据库系统的最高权限;

基于最高权限释放所有已激活游标占用的内存资源。

此外,为实现上述目的,本发明还提供一种数据库系统,所述数据库系统中设置有游标,且所述游标设置有游标级别,其中包括低级别游标,所述数据库系统包括:

记录模块,用于当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;

第一释放模块,用于当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。

可选地,所述数据库系统还包括:

统计模块,用于统计当前数据库系统的闲置内存资源,以获得对应的统计参数;

第二释放模块,用于当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源。

可选地,所述数据库系统还包括:

存储模块,用于存储本次释放内存资源的所有事件信息,以作为内存资源优化的依据。

可选地,所述第二释放模块包括:

显示单元,用于当检测到统计参数小于预设阈值时,显示当前排序列表中所有的已激活游标,以供用户选择;

第一释放单元,用于基于用户选择的预选游标,释放预选游标占用的内存资源。

可选地,所述第二释放模块包括:

获取单元,用于当检测到统计参数小于预设阈值时,获取排序列表中所有已激活游标的内存资源的释放权限;

权限单元,用于当检测到释放权限未能成功释放所有已激活游标占用的内存资源时,强制获取数据库系统的最高权限;

第二释放单元,用于基于最高权限释放所有已激活游标占用的内存资源。

本发明的技术方案中,当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。本发明采用实时监测数据库游标使用状态的方式,在内存资源不足时,根据游标级别关闭游标进行资源释放,避免游标本身占用过多的内存资源而导致系统由于没有足够的内存瘫痪、卡顿、死机等问题,有效解决数据库游标导致的内存泄露。

附图说明

图1为本发明数据库游标的控制方法第一实施例的流程示意图;

图2为本发明数据库游标的控制方法第二实施例的流程示意图;

图3为本发明数据库游标的控制方法第三实施例的流程示意图;

图4为本发明数据库游标的控制方法第四实施例中所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤的步骤的细化流程示意图;

图5为本发明数据库游标的控制方法第五实施例中所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤的步骤的细化流程示意图;

图6是本发明数据库系统第一实施例的模块示意图;

图7为本发明数据库系统第二实施例的模块示意图;

图8为本发明数据库系统第三实施例的模块示意图;

图9为本发明数据库系统第四实施例中第二释放模块的细化模块示意图;

图10为本发明数据库系统第五实施例中第二释放模块的细化模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参考附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

现在将参考附图描述实现本发明各个实施例的数据库系统。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。

所述游标是数据库系统为用户开设的一个数据缓冲区,存放数据库执行语句的执行结果。在数据库系统中,游标可以通过打开或关闭实现对象引用。通过游标的使用,数据库系统可以方便得获取到游标所映射到的具体的数据记录。而数据库系统在实际使用中,结束对游标的使用之后,即使该游标不再被调用,在系统异步处理的过程中,往往会错漏过某些游标,使其不被调用,却保持激活状态,占用一定的系统内存资源,影响到数据库系统的正常运行。

参考图1,本发明提供一种数据库游标的控制方法,该数据库游标的控制方法主要应用于数据库系统上,在数据库游标的控制方法第一实施例中,所述游标设置有游标级别,其中包括低级别游标,所述数据库游标的控制方法包括:

步骤s10,当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;

数据库系统在正常运行当中,会动态调用所需的游标,每当数据库系统激活游标时,记录被激活的数据库游标,记录其游标级别,获得所有已激活游标的排序列表。

所述游标级别,指的是游标本身的存在级别,级别的高低意味着游标对数据库系统的功能应用的影响程度。例如,a游标属于系统级游标,其功能效用的执行对数据库系统的正常运行起到关键性的作用,那么a游标即为高级别游标;而b游标属于普通游标,其功能效用的执行对数据库系统的正常运行几乎毫无影响,仅作为缓冲数据或临时数据的媒介,可轻易再现且执行成本低微,那么b游标即为低级别游标。

一般而言,该列表用于保存所有激活的数据库游标对象集合。假设游标的状态发生改变,例如被释放掉或发生异常等现象时,数据库系统会实时追踪到该游标,并根据游标本身的状态实时更新或编辑排序列表,例如对排序列表中相应的游标进行查询、插入、删除等操作,以此维护排序列表。

步骤s20,当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。

为防止游标占用数据库系统中过多的内存资源,需要实时监测排序列表,例如在每隔一段预设时间间隔时,检测排序列表中所有游标的活动状态。其中,预设时间间隔可以是默认的预设数值,也可以是人为自定义生成的具体数据,如5秒,10秒等等。游标的不同状态存在不同的使用意义,游标被关闭时则不存在,如被激活,则可能处于被调用状态,也可能处于空载闲置状态。

在数据库系统中,游标可以被数据库系统中的可用进程或线程激活,并在激活之后为调用主体(可以是进程或线程)所调取应用。而当游标被激活后,处于激活状态的游标会被其调取并进入应用状态,此时,该游标会占据相当程度的系统内存资源,以作为游标执行其功能的运行空间。而当所述进程或线程调用完毕时,该游标将不再作为功能调用的需求对象,此时的游标处于闲置状态,若未将其关闭,该处于激活状态的游标依旧会占据部分内存资源。

以上所述的游标状态中,处于激活状态的游标会占据系统资源,但其中,处于激活且被调用状态的游标正在被使用,若强行中止,可能会影响到当前数据库系统的正常执行。而处于激活且闲置状态的游标当前状况下并未发挥其功能效用,却消耗着系统本身的内存资源,容易影响到数据库系统的正常运行。因此需要对处于激活且闲置状态的游标进行排查。在本实施例中,检测排序列表中处于激活状态且同时处于闲置状态的游标,并且根据其游标级别,只筛选出低级别游标。因为低级别游标不会影响到数据库系统本身的正常运行。只有同时满足已激活、闲置、低级别三种条件的游标,才是本实施例执行定时检测的筛选对象。

在排序列表中若检测到同时满足已激活、闲置、低级别三大条件的游标,即为本实施例所要进行资源释放的检测对象。由于此时该游标处于闲置状态,故无需解除进程或线程占用该游标的操作,可直接释放掉其在激活且闲置状态下所占用的内存资源。

需要说明的是,处于激活且闲置状态下的低级别游标虽然并未被调用以执行其功能效用,但其本身依旧处于待调用状态,可随时被调用主体(可以是进程或线程)重新调用,因此该游标对象依旧保持着与调用主体的数据接口以及实现其功能的其他对象的数据接口,而数据接口的实现本身就需要消耗占据系统内存资源。这部分内存资源在游标闲置的情况下依旧被占用而未被释放掉,将其释放出来能够最大化地利用系统内存资源,提高内存资源的应用效率,防止内存资源不足进而出现系统运行不流畅、卡顿等问题。

优选地,排序列表中保存了大量处于激活状态的游标,当低级别游标被释放掉后,需要将该低级别游标从列表中删除。假设不将其进行删除,列表中既保存了激活状态的游标也保存了已被释放掉的游标,而已被释放掉的游标在排序列表中并无用处。本实施例所要实现的是对激活状态的游标的清理释放,对于已释放掉的游标并无处理机制。因此已释放掉的游标需要进行清理删除,以提高游标检测和查询的工作效率。同时,假设不删除已释放掉的游标,那么随着数据库系统运行时间的增长,被释放掉游标的记录会越来越多,即排序列表本身占用的内存资源也会增加,从另一个方面后影响到数据库系统的正常运行。

本发明的技术方案中,当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。本发明采用实时监测数据库游标使用状态的方式,在内存资源不足时,根据游标级别关闭游标进行资源释放,避免游标本身占用过多的内存资源而导致系统由于没有足够的内存瘫痪、卡顿、死机等问题,有效解决数据库游标导致的内存泄露。本发明采用实时监测数据库游标使用状态的方式,在内存资源不足时,根据游标级别关闭游标进行资源释放,避免游标本身占用过多的内存资源而导致系统由于没有足够的内存瘫痪、卡顿、死机等问题,有效解决数据库游标导致的内存泄露。

进一步地,在本发明数据库游标的控制方法第一实施例的基础上,提出数据库游标的控制方法第二实施例,参考图2,所述第二实施例与第一实施例之间的区别在于,所述当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源的步骤之后还包括:

步骤s30,统计当前数据库系统的闲置内存资源,以获得对应的统计参数;

所述闲置内存资源,指的是数据库系统中,当前处于闲置状态的,并未被调用的内存资源。一般而言,系统资源除了被调用的内存资源,需要部分闲置的内存资源作为后续功能执行时被调用的预设资源。查询获取处于闲置状态的内存资源后,由于内存资源的存储方式不一定是连接的,可以存在分段分区形式的内存资源,因此需要对所有处于闲置状态的内存资源进行统计,以获得对应的统计参数。所述统计参数指的是该处于闲置状态的内存资源的剩余容量。

步骤s40,当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源。

在本实施例中,数据库系统设置了一个预设阈值,该预设阈值作为统计参数的一个边界参考数值,该数值指代的是数据库系统中处于闲置状态的内存资源的剩余容量的最低门限值。当统计所获得的统计参数小于该预设阈值时,则证明数据库系统中作为缓冲的闲置状态的内存资源达到了最低门限值,若没有新的闲置状态的内存资源作为补充,数据库系统将处于时刻发生运行不流畅甚至系统崩溃的边缘。故,此时需要将排序列表中所有处于激活状态的游标所占用的内存资源全部释放掉,以扩充当前数据库系统的闲置内存资源。当然,所有的已激活游标中可能存在高级别游标,为防止出现数据库系统出现运行卡顿甚至崩溃的极端情况,高级别游标也需要一齐释放。

进一步地,在本发明数据库游标的控制方法第二实施例的基础上,提出数据库游标的控制方法第三实施例,参考图3,所述第三实施例与第二实施例之间的区别在于,所述当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源的步骤之后还包括:

步骤s50,存储本次释放内存资源的所有事件信息,以作为内存资源优化的依据。

本实施例中,系统资源释放完成之后,闲置内存资源的剩余容量会增加,由于其是已激活游标释放后获得的。因此可以存储本次作业中所有参与释放内存资源的事件信息(包含了被释放掉的游标对象,以及每个游标对象是在哪个步骤被释放掉,以及该游标被释放掉所释放出来的内存资源等信息)。这些信息反映了数据库系统中游标被激活但却未及时关闭的技术问题,从侧面暴露出数据库系统的系统设计问题,如逻辑设计上的不合理,或工作原理实现上的不合理等。依据这些技术问题,系统操作人员或设计人员可以有针对性地分析处理,以消除系统游标的不合理应用,实现内存资源的有效优化。

进一步地,在本发明数据库游标的控制方法第三实施例的基础上,提出数据库游标的控制方法第四实施例,参考图4,所述第四实施例与第三实施例之间的区别在于,所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤包括:

步骤s41,当检测到统计参数小于预设阈值时,显示当前排序列表中所有的已激活游标,以供用户选择;

步骤s42,基于用户选择的预选游标,释放预选游标占用的内存资源。

当统计参数小于预设阈值时,则需要释放掉所有已激活游标。但是,若用户想针对性地释放部分已激活游标,而将部分游标保留执行。例如,所有已激活游标包括a,b,c三个游标,此时统计参数小于预设阈值,正常流程下需要释放a,b,c三个游标,但用户只想释放掉b,c游标而保留a游标。此时,数据库系统可以提供一个显示界面,显示当前排序列表中所有的已激活游标,并提供选择已激活游标的编辑方式,以供用户选择。用户通过编辑,选择出预选游标,作为真正执行释放功能的游标对象。根据预选游标,数据库系统将所述预选游标占用的内存资源释放掉。

进一步地,在本发明数据库游标的控制方法第二实施例的基础上,提出数据库游标的控制方法第五实施例,参考图5,所述第五实施例与第二实施例之间的区别在于,所述当检测到统计参数小于预设阈值时,释放所述排序列表中所有已激活游标占用的内存资源的步骤包括:

步骤s43,当检测到统计参数小于预设阈值时,获取排序列表中所有已激活游标的内存资源的释放权限;

步骤s44,当检测到释放权限未能成功释放所有已激活游标占用的内存资源时,强制获取数据库系统的最高权限;

步骤s45,基于最高权限释放所有已激活游标占用的内存资源。

在数据库系统中,要释放游标需要有一定的操作权限,释放权限的获取可能基于当前数据库系统账户。在现实场景中,可能会出现无法释放某些游标的现象。其中,可能存在游标处理异常,或游标处于保护状态中等原因。此时需要获取到具体的游标释放权限,并基于释放权限进行释放操作。但是,当权限获取请求无法获取到已激活游标的释放权限时,则证明以当前的操作权限,无法完成已激活游标的释放操作。此时可强制获取到数据库系统的最高权限。而最高权限则意味着当前数据库系统的一切操作步骤皆可以无碍执行。同样的道理,拥有最高权限意味着能够无碍释放所有已激活有欧标的内存资源。基于该最高权限,数据库系统能够正常执行所有已激活游标所占用的内存资源。

当然,本实施例与第四实施例可相辅相成,获取系统最高权限以释放游标占用的内存资源的实施例与用户自定义选择所要释放的游标的实施例互不矛盾,二者可相互结合,以形成本发明不同实施例解决系统内存资源不足的问题的优选技术方案。

参考图6,本发明还提供一种数据库系统,在数据库系统第一实施例中,所述数据库系统中设置有游标,且所述游标设置有游标级别,其中包括低级别游标,所述数据库系统包括:

记录模块10,用于当检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;

数据库系统在正常运行当中,会动态调用所需的游标,每当数据库系统激活游标时,记录模块10记录被激活的数据库游标,记录其游标级别,获得所有已激活游标的排序列表。

所述游标级别,指的是游标本身的存在级别,级别的高低意味着游标对数据库系统的功能应用的影响程度。例如,a游标属于系统级游标,其功能效用的执行对数据库系统的正常运行起到关键性的作用,那么a游标即为高级别游标;而b游标属于普通游标,其功能效用的执行对数据库系统的正常运行几乎毫无影响,仅作为缓冲数据或临时数据的媒介,可轻易再现且执行成本低微,那么b游标即为低级别游标。

一般而言,该列表用于保存所有激活的数据库游标对象集合。假设游标的状态发生改变,例如被释放掉或发生异常等现象时,数据库系统会实时追踪到该游标,并根据游标本身的状态实时更新或编辑排序列表,例如对排序列表中相应的游标进行查询、插入、删除等操作,以此维护排序列表。

第一释放模块20,用于当检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。

为防止游标占用数据库系统中过多的内存资源,第一释放模块20实时监测排序列表,例如在每隔一段预设时间间隔时,检测排序列表中所有游标的活动状态。其中,预设时间间隔可以是默认的预设数值,也可以是人为自定义生成的具体数据,如5秒,10秒等等。游标的不同状态存在不同的使用意义,游标被关闭时则不存在,如被激活,则可能处于被调用状态,也可能处于空载闲置状态。

在数据库系统中,游标可以被数据库系统中的可用进程或线程激活,并在激活之后为调用主体(可以是进程或线程)所调取应用。而当游标被激活后,处于激活状态的游标会被其调取并进入应用状态,此时,该游标会占据相当程度的系统内存资源,以作为游标执行其功能的运行空间。而当所述进程或线程调用完毕时,该游标将不再作为功能调用的需求对象,此时的游标处于闲置状态,若未将其关闭,该处于激活状态的游标依旧会占据部分内存资源。

以上所述的游标状态中,处于激活状态的游标会占据系统资源,但其中,处于激活且被调用状态的游标正在被使用,若强行中止,可能会影响到当前数据库系统的正常执行。而处于激活且闲置状态的游标当前状况下并未发挥其功能效用,却消耗着系统本身的内存资源,容易影响到数据库系统的正常运行。因此需要对处于激活且闲置状态的游标进行排查。在本实施例中,第一释放模块20检测排序列表中处于激活状态且同时处于闲置状态的游标,并且根据其游标级别,只筛选出低级别游标。因为低级别游标不会影响到数据库系统本身的正常运行。只有同时满足已激活、闲置、低级别三种条件的游标,才是本实施例执行定时检测的筛选对象。

在排序列表中若检测到同时满足已激活、闲置、低级别三大条件的游标,即为本实施例所要进行资源释放的检测对象。由于此时该游标处于闲置状态,故无需解除进程或线程占用该游标的操作,可直接释放掉其在激活且闲置状态下所占用的内存资源。

需要说明的是,处于激活且闲置状态下的低级别游标虽然并未被调用以执行其功能效用,但其本身依旧处于待调用状态,可随时被调用主体(可以是进程或线程)重新调用,因此该游标对象依旧保持着与调用主体的数据接口以及实现其功能的其他对象的数据接口,而数据接口的实现本身就需要消耗占据系统内存资源。这部分内存资源在游标闲置的情况下依旧被占用而未被释放掉,将其释放出来能够最大化地利用系统内存资源,提高内存资源的应用效率,防止内存资源不足进而出现系统运行不流畅、卡顿等问题。

优选地,排序列表中保存了大量处于激活状态的游标,当低级别游标被释放掉后,需要将该低级别游标从列表中删除。假设不将其进行删除,列表中既保存了激活状态的游标也保存了已被释放掉的游标,而已被释放掉的游标在排序列表中并无用处。本实施例所要实现的是对激活状态的游标的清理释放,对于已释放掉的游标并无处理机制。因此已释放掉的游标需要进行清理删除,以提高游标检测和查询的工作效率。同时,假设不删除已释放掉的游标,那么随着数据库系统运行时间的增长,被释放掉游标的记录会越来越多,即排序列表本身占用的内存资源也会增加,从另一个方面后影响到数据库系统的正常运行。

本发明的技术方案中,当记录模块10检测到数据库激活游标时,记录激活的游标及其游标级别,以获得所有已激活游标的排序列表;当第一释放模块20检测到排序列表中存在已激活且闲置的低级别游标时,释放低级别游标占用的内存资源。本发明采用实时监测数据库游标使用状态的方式,在内存资源不足时,根据游标级别关闭游标进行资源释放,避免游标本身占用过多的内存资源而导致系统由于没有足够的内存瘫痪、卡顿、死机等问题,有效解决数据库游标导致的内存泄露。本发明采用实时监测数据库游标使用状态的方式,在内存资源不足时,根据游标级别关闭游标进行资源释放,避免游标本身占用过多的内存资源而导致系统由于没有足够的内存瘫痪、卡顿、死机等问题,有效解决数据库游标导致的内存泄露。

进一步地,在本发明数据库系统第一实施例的基础上,提出数据库系统第二实施例,参考图7,所述第二实施例与第一实施例之间的区别在于,所述数据库系统还包括:

统计模块30,用于统计当前数据库系统的闲置内存资源,以获得对应的统计参数;

所述闲置内存资源,指的是数据库系统中,当前处于闲置状态的,并未被调用的内存资源。一般而言,系统资源除了被调用的内存资源,需要部分闲置的内存资源作为后续功能执行时被调用的预设资源。统计模块50可查询获取到处于闲置状态的内存资源,由于内存资源的存储方式不一定是连接的,可以存在分段分区形式的内存资源,因此需要对所有处于闲置状态的内存资源进行统计,以获得对应的统计参数。所述统计参数指的是该处于闲置状态的内存资源的剩余容量。

第二释放模块40,用于当检测到统计参数小于预设阈值时,释放排序列表中所有已激活游标占用的内存资源。

在本实施例中,数据库系统设置了一个预设阈值,该预设阈值作为统计参数的一个边界参考数值,该数值指代的是数据库系统中处于闲置状态的内存资源的剩余容量的最低门限值。当统计所获得的统计参数小于该预设阈值时,则证明数据库系统中作为缓冲的闲置状态的内存资源达到了最低门限值,若没有新的闲置状态的内存资源作为补充,数据库系统将处于时刻发生运行不流畅甚至系统崩溃的边缘。故,此时需要将排序列表中所有处于激活状态的游标所占用的内存资源全部释放掉,以扩充当前数据库系统的闲置内存资源。当然,所有的已激活游标中可能存在高级别游标,为防止出现数据库系统出现运行卡顿甚至崩溃的极端情况,高级别游标也需要一齐释放。

进一步地,在本发明数据库系统第二实施例的基础上,提出数据库系统第三实施例,参考图8,所述第三实施例与第二实施例之间的区别在于,所述数据库系统还包括:

存储模块50,用于存储本次释放内存资源的所有事件信息,以作为内存资源优化的依据。

本实施例中,系统资源释放完成之后,闲置内存资源的剩余容量会增加,由于其是已激活游标释放后获得的。因此可以存储本次作业中所有参与释放内存资源的事件信息(包含了被释放掉的游标对象,以及每个游标对象是在哪个步骤被释放掉,以及该游标被释放掉所释放出来的内存资源等信息)。这些信息反映了数据库系统中游标被激活但却未及时关闭的技术问题,从侧面暴露出数据库系统的系统设计问题,如逻辑设计上的不合理,或工作原理实现上的不合理等。依据这些技术问题,系统操作人员或设计人员可以有针对性地分析处理,以消除系统游标的不合理应用,实现内存资源的有效优化。

进一步地,在本发明数据库系统第三实施例的基础上,提出数据库系统第四实施例,参考图9,所述第四实施例与第三实施例之间的区别在于,所述第二释放模块40包括:

显示单元41,用于当检测到统计参数小于预设阈值时,显示当前排序列表中所有的已激活游标,以供用户选择;

第一释放单元42,用于基于用户选择的预选游标,释放预选游标占用的内存资源。

当统计参数小于预设阈值时,则需要释放掉所有已激活游标。但是,若用户想针对性地释放部分已激活游标,而将部分游标保留执行。例如,所有已激活游标包括a,b,c三个游标,此时统计参数小于预设阈值,正常流程下需要释放a,b,c三个游标,但用户只想释放掉b,c游标而保留a游标。此时,数据库系统可以提供一个显示界面,显示当前排序列表中所有的已激活游标,并提供选择已激活游标的编辑方式,以供用户选择。用户通过编辑,选择出预选游标,作为真正执行释放功能的游标对象。根据预选游标,数据库系统将所述预选游标占用的内存资源释放掉。

进一步地,在本发明数据库系统第一实施例的基础上,提出数据库系统第五实施例,参考图10,所述第五实施例与第一实施例之间的区别在于,所述第二释放模块40包括:

获取单元43,用于当检测到统计参数小于预设阈值时,获取排序列表中所有已激活游标的内存资源的释放权限;

权限单元44,用于当检测到释放权限未能成功释放所有已激活游标占用的内存资源时,强制获取数据库系统的最高权限;

第二释放单元45,用于基于最高权限释放所有已激活游标占用的内存资源。

在数据库系统中,要释放游标需要有一定的操作权限,释放权限的获取可能基于当前数据库系统账户。在现实场景中,可能会出现无法释放某些游标的现象。其中,可能存在游标处理异常,或游标处于保护状态中等原因。此时需要获取到具体的游标释放权限,并基于释放权限进行释放操作。但是,当权限获取请求无法获取到已激活游标的释放权限时,则证明以当前的操作权限,无法完成已激活游标的释放操作。此时可强制获取到数据库系统的最高权限。而最高权限则意味着当前数据库系统的一切操作步骤皆可以无碍执行。同样的道理,拥有最高权限意味着能够无碍释放所有已激活有欧标的内存资源。基于该最高权限,数据库系统能够正常执行所有已激活游标所占用的内存资源。

当然,本实施例与第四实施例可相辅相成,获取系统最高权限以释放游标占用的内存资源的实施例与用户自定义选择所要释放的游标的实施例互不矛盾,二者可相互结合,以形成本发明不同实施例解决系统内存资源不足的问题的优选技术方案。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1