掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法、数据库管理系统和数据处理设备

文献发布时间:2023-06-19 10:51:07


数据处理方法、数据库管理系统和数据处理设备

技术领域

本申请涉及数据库技术领域,特别涉及一种数据处理方法、数据库管理系统和数据处理设备。

背景技术

存储过程(stored procedure)是存储于数据库系统中的一组能够完成特定功能的语句集,存储过程经过第一次编译后再次调用不需要再次编译,用户可以通过指定存储过程的名字来运行存储过程。存储过程重试,是当存储过程执行失败时的重试机制,可以避免因硬件故障或软件故障导致用户业务发生中断。事务(transaction)是数据库系统中作为单个逻辑工作单元执行的操作序列,这些操作要么全部执行要么全不执行,是一个不可分割的工作单元。例如在关系型数据库中,一个事务可以是一条结构化查询语言(structured query language,SQL)语句、一组SQL语句或整个程序。存储过程可能包含一个或多个事务。

现有技术中,数据库驱动根据用户发送的工作请求,调用指定存储过程以响应用户的请求,当存储过程执行失败,且失败原因为可恢复性异常时,数据库驱动向数据库(database,DB)内核发送重试请求,获取正确的处理结果后响应给用户。由此可以屏蔽部分硬件、软件错误,提升用户体验。

由于现有技术中,数据库驱动获取调用的存储过程执行是否成功,当存储过程执行失败时,重试只能将整个存储过程全部重新执行一遍。当存储过程存在事务提交指令时,存储过程整体重试将导致已经提交的部分操作被重复执行,从而导致数据出错。

发明内容

本申请实施例提供了一种数据处理方法,用于存储过程执行失败重试,可以避免存储过程中已执行事务的重复执行。

本申请实施例第一方面提供了一种数据处理的方法,包括:响应于存储过程请求,执行存储过程,该存储过程包括一个或多个有序的事务,当该一个或多个有序的事务中的第一事务执行结束时,记录该第一事务的标记信息;基于执行该存储过程中出现异常,且满足重试该存储过程的条件,根据该第一事务的标记信息重试该存储过程中该第一事务之后的事务。

存储过程可能包含一个或多个有序的事务,在存储过程执行期间,记录存储过程中已执行事务的标记信息,例如事务结束的位置。这样,当存储过程执行失败重试时,可以仅重试已执行事务之后的语句,已执行事务不需要重新执行,由此,提高了重试的执行效率,避免了重试时重复执行已提交事务带来的错误。

在第一方面的一种可能的实现方式中,该方法还包括:记录调用该存储过程的请求语句。

本申请实施例提供的数据处理方法,记录调用存储过程的请求语句,通过该请求语句以及第一事务的标记信息,可用于定位重试执行的位置。

在第一方面的一种可能的实现方式中,该标记信息包括该第一事务的结束语句的行号。

本申请实施例提供的数据处理方法,提供了记录第一事务的标记信息的一种具体实现方式,增强了方案的可操作性。

在第一方面的一种可能的实现方式中,该方法还包括:记录该存储过程的中间状态信息,该中间状态信息包括以下一个或多个:该第一事务的执行语句结果、错误提示信息、输入参数、输出参数、全局变量和临时变量。

本申请实施例提供的数据处理方法,数据库管理系统还可以记录第一事务的执行语句结果或错误提示信息、输入参数、输出参数、全局变量和临时变量,根据第一事务结束时的中间状态信息重试,可以满足数据的一致性。

在第一方面的一种可能的实现方式中,该中间状态信息包括第一事务的执行语句结果或错误提示信息,该方法还包括:缓存该第一事务的执行语句结果或错误提示信息,直至该第一事务结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

本申请实施例提供的数据处理方法,记录第一事务的执行语句结果或错误提示信息,在第一事务结束之后再发送给用户设备,可以避免重试时,同样的执行语句结果或错误提示信息被重复发送给用户设备。

在第一方面的一种可能的实现方式中,该中间状态信息包括第一事务的执行语句结果或错误提示信息,该方法还包括:缓存该第一事务的执行语句结果或错误提示信息,直至该存储过程结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

本申请实施例提供的数据处理方法,提供了向用户发送执行语句结果或错误提示信息的另一种方式,即在存储过程结束之后发送用户,这样,也可以避免重试时同样的执行语句结果或错误提示信息被重复发送给用户设备。

在第一方面的一种可能的实现方式中,该第一事务位于该存储过程中的分支语句的一个分支,该方法还包括:记录该存储过程的中间状态信息,该中间状态信息包括分支执行状态,该分支执行状态用于标识该第一事务所在的分支;重试该存储过程中该第一事务之后的事务包括:基于该分支执行状态,执行该第一事务所在的分支中第一事务之后的事务。

本申请实施例提供的数据处理方法,中间状态信息还可以包括分支执行状态,用于标识第一事务在分支语句中的分支,分支语句包括if分支语句或case分支语句。在重试时可以根据分支执行状态继续执行该分支,避免重试出错。

在第一方面的一种可能的实现方式中,该分支执行状态包括执行该存储过程中该分支语句的条件判断结果,该条件判断结果用于确定执行所述分支语句中的目标分支。

本申请实施例提供的数据处理方法,分支执行状态的一种具体记录内容为,分支语句的条件判断结果,增强了方案的可实现性。

在第一方面的一种可能的实现方式中,该方法还包括:该重试该存储过程的条件为该存储过程异常为可恢复性异常,该可恢复性异常包括:网络异常、内存使用异常、输入输出异常、锁等待超时异常或两阶段事务提交异常。

本申请实施例提供的数据处理方法,若异常为可恢复性异常,都可以执行重试。

在第一方面的一种可能的实现方式中,该重试该存储过程中该第一事务之后的事务包括:等待预设的第一时长后,重试该存储过程中该第一事务之后的事务。

本申请实施例提供的数据处理方法,对于例如主备切换等场景等待预设的时长后再重试,可以提高重试的成功率。

在第一方面的一种可能的实现方式中,该方法还包括:当该一个或多个有序的事务中的第二事务执行结束时,记录该第二事务的标记信息,该第二事务为在该第一事务之后执行的事务;该重试该存储过程中该第一事务之后的事务包括:根据该第二事务的标记信息重试该存储过程中该第二事务之后的事务,该第二事务为满足重试该存储过程的条件时,已执行事务中最后被执行的事务。

本申请实施例提供的数据处理方法,若存储过程包含多个事务,可以记录每个事务的标记信息,重试时,执行最后一个已执行的事务之后的事务即可,可以进一步减少资源浪费。

本申请实施例第二方面提供了一种数据库管理系统,其特征在于,包括:执行单元,用于响应于存储过程请求,执行存储过程,该存储过程包括一个或多个有序的事务;记录单元,用于当该一个或多个有序的事务中的第一事务执行结束时,记录该第一事务的标记信息;重试单元,用于基于执行该存储过程中出现异常,且满足重试该存储过程的条件,根据该第一事务的标记信息重试该存储过程中该第一事务之后的事务。

在第二方面的一种可能的实现方式中,该记录单元还用于:记录调用该存储过程的请求语句。

在第二方面的一种可能的实现方式中,该标记信息包括该第一事务的结束语句的行号。

在第二方面的一种可能的实现方式中,该数据库管理系统还包括:记录单元,用于记录该存储过程的中间状态信息,该中间状态信息包括以下一个或多个:该第一事务的执行语句结果、错误提示信息、输入参数、输出参数、全局变量和临时变量。

在第二方面的一种可能的实现方式中,该中间状态信息包括第一事务的执行语句结果或错误提示信息,该数据库管理系统还包括:缓存单元,用于缓存该第一事务的执行语句结果或错误提示信息,直至该第一事务结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

在第二方面的一种可能的实现方式中,该中间状态信息包括第一事务的执行语句结果或错误提示信息,该数据库管理系统还包括:缓存单元,用于缓存该第一事务的执行语句结果或错误提示信息,直至该存储过程结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

在第二方面的一种可能的实现方式中,该第一事务位于该存储过程中的分支语句的一个分支,该记录单元还用于:记录该存储过程的中间状态信息,该中间状态信息包括分支执行状态,该分支执行状态用于标识该第一事务所在的分支;该重试单元,具体用于基于该分支执行状态,执行该第一事务所在的分支中第一事务之后的事务。

在第二方面的一种可能的实现方式中,该分支执行状态包括执行该存储过程中该分支语句的条件判断结果,该条件判断结果用于确定执行所述分支语句中的目标分支。

在第二方面的一种可能的实现方式中,该重试该存储过程的条件为该存储过程异常为可恢复性异常,该可恢复性异常包括:网络异常、内存使用异常、输入输出异常、锁等待超时异常或两阶段事务提交异常。

在第二方面的一种可能的实现方式中,该重试单元具体用于:等待预设的第一时长后,重试该存储过程中该第一事务之后的事务。

在第二方面的一种可能的实现方式中,该记录单元还用于,当该一个或多个有序的事务中的第二事务执行结束时,记录该第二事务的标记信息,该第二事务为在该第一事务之后执行的事务;该重试单元具体用于:根据该第二事务的标记信息重试该存储过程中该第二事务之后的事务,该第二事务为满足重试该存储过程的条件时,已执行事务中最后被执行的事务。

本申请实施例第三方面提供了一种数据处理设备,包括:存储器,用于存储指令;处理器,用于执行该存储器中的指令,使得该数据处理设备执行前述第一方面或第一方面的各实现方式的步骤。

本申请实施例第四方面提供了一种计算机程序产品,其特征在于,该计算机程序产品包括指令,当该指令在计算机上运行时,使得该计算机执行前述第一方面或第一方面的各实现方式的步骤。

本申请实施例第五方面提供了一种计算机可读存储介质,其特征在于,该计算机可读存储介质存储指令,当该指令在计算机上运行时,使得该计算机执行前述第一方面或第一方面的各实现方式的步骤。

本申请实施例第六方面提供了一种数据库系统,其特征在于,包括网络接口,用于接收用户设备发送的存储过程请求;数据处理设备,用于响应于该存储过程请求,执行如前述第一方面或第一方面的各实现方式中任一项所述的方法。

从以上技术方案可以看出,本申请实施例具有以下优点:本申请实施例提供的数据处理方法,实现了存储过程的执行失败重试,支持包含事务的存储过程执行失败重试,由于已结束事务不需要重新执行,提高了重试的执行效率,避免了重试时重复执行已执行事务带来的错误。

附图说明

图1a为本申请实施例中单机数据库系统的架构示意图;

图1b为本申请实施例中集群数据库系统的一个架构示意图;

图1c为本申请实施例中集群数据库系统的另一个架构示意图;

图2为本申请实施例中数据库服务器的一个结构示意图;

图3为本申请实施例中数据处理方法的一个实施例示意图;

图4为本申请实施例中创建存储过程的一个实施例示意图;

图5为本申请实施例中存储过程执行过程的流程示意图;

图6为本申请实施例中集群场景的系统架构示意图;

图7为本申请实施例中集群场景下的存储过程重试的一个实施例示意图;

图8为本申请实施例中集群场景下的存储过程重试的另一个实施例示意图;

图9为本申请实施例中存储过程执行失败重试方法的一个系统架构示意图;

图10为本申请实施例中数据库管理系统的一个实施例示意图;

图11为本申请实施例中数据库管理系统的另一个实施例示意图;

图12为本申请实施例中数据处理设备的一个实施例示意图。

具体实施方式

本申请实施例提供了一种数据处理方法,用于存储过程执行失败重试,可以避免存储过程中事务的重复执行。

下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本申请中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。

本申请实施例提供的数据处理方法、数据库管理系统及数据库服务器可以应用于单机数据库系统或者集群数据库系统,具体此处不做限定。数据库系统(database system)是为适应数据处理的需要而发展起来的一种数据处理系统,请参阅图1a-1c,为本申请实施例中数据库系统的架构示意图,下面进行简要介绍:

图1a为本申请实施例中单机数据库系统的架构示意图,该单机数据库系统包括一个数据库管理系统和数据存储器(data store),该数据库管理系统用于提供数据库的查询和修改等服务,该数据库管理系统将数据存储到数据存储器中。在单机数据库系统中,数据库管理系统和数据存储器通常位于单一服务器上,比如一台对称多处理器(symmetricmulti-processor,SMP)服务器。该SMP服务器包括多个处理器,所有的处理器共享资源,如总线,内存和i/o系统等。数据库管理系统的功能可由一个或多个处理器执行内存中的程序来实现。

图1b为本申请实施例中集群数据库系统的一个架构示意图,该集群数据库系统为采用共享磁盘(shared-storage)架构的集群数据库系统,包括多个节点(如图中的节点1至N),每个节点部署有数据库管理系统,分别为用户提供数据库的查询和修改等服务,多个数据库管理系统存储有共享的数据在共享数据存储器中,并且通过交换机对数据存储器中的数据执行读写操作。共享数据存储器可以为共享磁盘阵列。集群数据库系统中的节点可以为物理机,比如数据库服务器,也可以为运行在抽象硬件资源上的虚拟机。若节点为物理机,则交换机为存储区网络(storage area network,SAN)交换机、以太网交换机,光纤交换机或其它物理交换设备。若节点为虚拟机,则交换机为虚拟交换机。

图1c为本申请实施例中集群数据库系统的另一个架构示意图,该集群数据库系统为采用无共享(shared-nothing)架构的集群数据库系统,包括多个节点(如图中的节点1至N),每个节点具有各自独享的硬件资源(如数据存储器)、操作系统和数据库,节点之间通过网络来通信。该体系下,数据将根据数据库模型和应用特点被分配到各个节点上,查询任务将被分割成若干部分,在所有节点上并行执行,彼此协同计算,作为整体提供数据库服务,所有通信功能都在一个高宽带网络互联体系上实现。如同集群数据库系统1所描述的shared-storage架构的集群数据库系统一样,这里的节点既可以是物理机,也可以是虚拟机。

图1b和图1c所示的集群数据库系统中的节点可以根据实际使用需求,设置为协调节点(coordinator)或数据节点(data node),协调节点用于接收客户端发送的SQL或存储过程请求,经过分析,可以将SQL发送到需要参与数据处理的数据节点。数据节点完成数据提取,查询结果返回协调节点,由协调节点将数据汇总后发给客户端。

在本申请所有实施例中,数据库系统的数据存储器(data store)包括但不限于固态硬盘(SSD)、磁盘阵列或其他类型的非瞬态计算机可读介质。图1a-1c中虽未示出数据库,应理解,数据库存储在数据存储器中。所属领域的技术人员可以理解一个数据库系统可能包括比图1a-1c中所示的部件更少或更多的组件,或者包括与图1a-1c中所示组件不同的组件,图1a-1c仅仅示出了与本实施例公开的实现方式更加相关的组件。例如,虽然图1b和图1c的两种集群数据库系统中已经描述了4个节点,但所属领域的技术人员可理解成一个集群数据库系统可包含任何数量的节点。各节点的数据库管理系统功能可分别由运行在各节点上的软件、硬件和/或固件的适当组合来实现。

为了便于理解和描述,作为示例而非限定,下面以shared-nothing架构集群数据库系统中一个节点,比如数据库服务器为例说明本申请实施例的方案。但是本领域技术人员根据本申请实施例的教导可以很清楚地理解,本申请实施例的方法同样可以应用于shared-storage架构的集群数据库系统,单机数据库系统,以及任何类型的关系型数据库系统。

请参阅图2,为本申请实施例中数据库服务器的一个结构示意图。

如图2所示,本申请实施例提供一种数据库服务器100,包括:至少一个处理器104、存储可执行代码的非瞬态计算机可读介质(non-transitory computer-readable medium)106和数据库管理系统108。该可执行代码在被至少一个处理器104执行时被配置为实现数据库管理系统108的组件和功能。非瞬态计算机可读介质106可以包括一个或多个非易失性存储器,作为示例,非易失性存储器包括半导体存储器设备,例如可擦可编程只读存储器(erasable programmable read only memory,EPROM),电可擦只读存储器(electricallyerasable programmable read only memory,EEPROM)和闪存(flash memory);磁盘,例如内部硬盘(internal hard disk)或可移动磁盘(removable disk),磁光盘(magnetooptical disk),以及CD ROM和DVD-ROM。此外,非瞬态计算机可读介质106还可以包括被配置为主存储器(main memory)的任何设备。至少一个处理器104可以包括任何类型的通用计算电路或专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。至少一个处理器104也可以是耦合到一个或多个半导体基板的一个或多个处理器,例如CPU。

数据库管理系统108可以是关系型数据库管理系统(relational databasemanagement system,RDBMS)。数据库管理系统108支持结构化查询语言(structured querylanguage,SQL)。通常,SQL是指专门用于管理关系型数据库中保存的数据的专用编程语言。SQL可以指代各种类型的数据相关语言,包括例如数据定义语言和数据操纵语言,其中SQL的范围可以包括数据插入,查询,更新和删除,模式创建和修改以及数据访问控制。此外,在一些示例中,SQL可以包括与各种语言元素相关的描述。

查询(query)是请求查看,访问和/或操纵存储在数据库中的数据。数据库管理系统108可以从数据库客户端102接收SQL格式的查询(称为SQL查询)。通常,数据库管理系统108通过从数据库访问相关数据并操纵相关数据以生成查询所对应的查询结果,并将查询结果返回到数据库客户端102。数据库是按一定的数学模型组织、描述和存储的数据集合,数据库可以包括一个或多个数据库结构或格式,例如行存储和列存储。数据库通常存储于数据存储器中,比如图2中的外部数据存储器120,或者非瞬态计算机可读介质106。当数据库存储于非瞬态计算机可读介质106时,数据库管理系统108为内存数据库管理系统。

数据库客户端102可以包括被配置成与数据库管理系统108交互的任何类型的设备或应用程序。在一些示例中,数据库客户端102包括一个或多个应用服务器。

数据库管理系统108包括SQL引擎110、执行引擎122和存储引擎134。SQL引擎110根据客户端102提交的SQL语句,例如查询(Query),生成对应的执行计划,执行引擎122依照语句的执行计划进行操作,以产生查询结果。存储引擎134负责在文件系统之上,管理表的数据、索引的实际内容,同时也会管理运行时的Cache、Buffer、事务、Log等数据。例如存储引擎134可以将执行引擎122的执行结果通过物理I/O写入数据存储器120。SQL引擎110包括解析器(图中未示出)和优化器(图中未示出),其中,解析器用于执行对SQL语句的语法、语义分析,将查询中的视图展开、划分为小的查询块。优化器为语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,比较计划的代价,最终选择一个代价最小的执行计划。

下面对本申请实施例涉及的重要概念进行介绍:

存储过程(stored procedure)是存储于数据库系统中的一组能够完成特定功能的语句集,存储过程经过第一次编译后再次调用不需要再次编译,用户可以通过指定存储过程的名字来运行存储过程。

事务(transaction)是数据库系统中由用户定义的一个数据库操作序列,这些操作要么全部执行要么全不执行,是一个不可分割的工作单位。事务具有四个特性:原子性(atomic)、一致性(consistency)、隔离性(isolation)和持久性(durability)。在关系数据库中,一个事务可以是一条结构化查询语言(structured query language,SQL)语句、一组SQL语句或整个程序。SQL中定义事务的语句包括:BEGIN(开始)、COMMIT(提交)、ROLLBACK(回滚)。

事务通常是以BEGIN开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作,具体地说,是将事务中所有对数据库的更新写到磁盘上,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销(UNDO),回滚到事务开始时的状态。

现有技术中,数据库服务器根据客户端的请求执行存储过程,当存储过程执行失败时,只能完整重试整个存储过程,控制粒度为存储过程级别。

当存储过程包括一个或多个事务时,若存储过程发生错误之前,已经有事务以COMMIT结束,代表已经将事务中所有对数据库的更新写到磁盘上。重试存储过程时,该事务被重复执行将导致数据出错。若存储过程发生错误之前,已经有事务以ROLLBACK结束,代表在事务运行的过程中发生某种故障,事务不能继续执行,重试存储过程时,该回滚事务被重复执行使得资源浪费。

此外,现有技术中重试需要考虑不同系统的驱动支持,如开放式数据库连接(opendatabase connectivity,ODBC),Java数据库连接(Java database connectivity,JDBC)对象关系数据库管理系统(object-relational database management system,ORDBMS)postgresql的c语言应用程序接口Libpq等。

为解决上述问题,本申请实施例提供了一种数据处理方法,用于存储过程的执行失败重试过程,下面结合具体实施例进行介绍。

请参阅图3,为本申请实施例中一种数据处理方法的一个实施例示意图。

301、执行存储过程;

数据库管理系统接收客户端发送的存储过程请求;存储过程可以通过客户端创建,请参阅图4,为创建存储过程的一个实施例示意图,示例性的,通过SQL客户端发送创建存储过程的语句,将语句注册到数据库中。此后,可以直接调用存储过程,例如通过语句“Call STPTest1();”发送存储过程请求以实现调用,在数据库中执行存储过程。该存储过程中包括一个或多个有序的事务。

302、记录第一事务结束的第一位置和中间状态信息;

在存储过程执行期间,当一个事务执行结束时,数据库管理系统可以记录该事务的标记信息,可选的,数据库管理系统记录事务结束的语句的位置信息,或者该事务的标识。具体的,数据库管理系统记录事务结束语句的行号。事务结束时的位置,包括COMMIT的位置或ROLLBACK的位置。示例性的,如图4所示,若第四行出错时,记录第四行之前最后一次COMMIT的位置,即第二行(line 2);

此外,数据库管理系统还记录存储过程的中间状态信息。

中间状态信息包括存储过程执行过程中产生的各参数或变量,例如执行语句结果、执行中发生的错误提示信息、临时变量、全局变量、输入参数、输出参数以及分支执行状态等。可以理解的是,中间状态信息为重试必须依赖的数据,重试时,若缺失该中间状态信息将不能满足数据一致性。

可选的,数据库管理系统缓存执行语句结果或执行中发生的错误提示信息。存储过程中,如果COMMIT之前,已经有中间结果需要返回,先缓存起来,不发送给用户设备,直至COMMIT时发送,或者当存储过程执行结束时,统一发送。示例性的,语句“raise notice'hello world';”用于指示屏幕打印提示信息'hello world',如果在事务结束前直接发送,重试时还会再重新发送,造成同样的信息在屏幕打印多次,因此,通过数据缓冲保存该执行语句结果,到存储过程执行结束时或者事务结束时发送,可以避免重复操作。

可选的,数据库管理系统记录存储过程的变量的值,包括临时变量执行结果。例如,图4中第二行COMMIT执行后,会记录当时的变量i的值。

可选的,数据库管理系统记录存储过程的输入参数和/或输出参数,例如,图4中存储过程的输入参数x,y。

可选的,该第一事务位于该存储过程中的分支语句的一个分支,数据库管理系统记录分支执行状态,该分支执行状态用于标识该第一事务所在的分支。分支执行状态包括条件分支执行状态或case分支执行状态等。可选的,分支执行状态为该分支语句的条件判断结果。请参阅图5,为本申请实施例中存储过程执行过程的流程示意图。示例性的,如图5所示,若存储过程的执行过程中包含if分支,则需要记录分支判断结果,例如对于分支判断if(select==6),若select等于6,则进入第一分支,若select不等于6,则进入第二分支;记录该分支判断结果等于6,可以用于确定执行第一分支,记录分支判断结果不等于6,可以用于确定执行第二分支,存储过程重试时,可以直接进入根据该分支判断结果确定的分支,而无需重新执行该if判断语句。

对于包含多个事务的存储过程,每个事务的结束位置均存在对应的中间状态信息。例如,若存储过程包括3个事务,按照执行顺序分别为A事务、B事务和C事务,存储过程执行过程中,A事务结束时,记录对应的第一个中间状态信息,B事务结束时,记录对应的第二个中间状态信息,此时,可选的,可以释放第一个中间状态信息,若C事务执行过程中发生错误,重试时,可以跳过已经结束的A事务和B事务,根据第二个中间状态信息,从B事务结束的位置之后开始进行重试。

可选的,记录客户端发送的调用该存储过程的请求语句,如“Call STPTest1();”;请求语句以及事务结束语句行号可以共同用于确定重试开始的位置。

303、根据第一事务结束的第一位置和中间状态信息重试该存储过程;

基于执行该存储过程中出现异常,且满足重试该存储过程的条件,根据该第一事务的标记信息重试该存储过程中该第一事务之后的事务。

重试该存储过程的条件包括该异常为可恢复性异常。造成存储过程执行失败的异常类型有多种,例如:网络闪断等网络异常、内存申请失败等内存使用异常、由于硬盘忙导致读取异常等输入输出(I/O)异常、锁等待超时异常、以及两阶段事务执行过程中发生的异常等等,两阶段事务执行过程中发生的异常包括两阶段事务提交异常。此处对于存储过程执行失败的具体原因不做限定。若该异常为通过重试可以解决的可恢复性异常,将发起重试该存储过程。

数据库管理系统可实现异常捕获,并识别异常类型,判断是否为可恢复性异常,以确定是否需重试,如果需要重试则在服务器端发起重试逻辑。具体过程此处不做介绍。

需要说明的是,本申请实施例的数据处理方面对于不同的数据库使用场景中的存储过程执行失败重试均可以适用,包括单机数据库、集群数据库和主备数据库等适用场景。

重试包括一次重试或多次重试,重试的时机可以是直接重试、等待预设的时长后重试或满足预设条件时重试,具体的重试次数以及重试的时机此处不做限定。

根据该第一事务的标记信息重试该存储过程中该第一事务之后的事务。数据库管理系统重试时,通过之前记录的执行中间状态,跳过已执行并提交的语句,恢复到之前提交后的一致性状态,重试第一事务之后的事务。

可以理解的是,存储过程中可能包括一个或多个事务,若一个存储过程中存在多个事务,当存储过程执行失败时,可以从最后一个结束的事务后进行重试,例如,对于一个包含3个事务的存储过程,若在第3个事务执行过程中出错,重试可以从第2个事务结束后开始重试。

示例性的,如图4所示,若第四行出错,重试时会跳过第二行COMMIT之前的语句,并根据步骤302记录的变量i,输入参数x,y,以及执行产生的中间结果等继续执行第二行之后的语句。

若重试执行成功,可以返回正确执行结果给用户。

本申请实施例提供的数据处理方法,实现了存储过程执行失败重试,支持包含事务的存储过程的执行失败重试,由于已结束事务不需要重新执行,重试粒度降低为事务级别,提高了重试的执行效率,避免了重试时重复执行已提交部分带来的错误。

请参阅图6,为本申请实施例中集群场景的系统架构示意图。

数据库集群场景中,包括协调节点(coordinator)和多个数据节点(data node),如图6所示的数据节点以主备方式部署,主数据节点发生故障时,备数据节点接管查询请求。当发生故障时,协调节点会根据重试决策模块,决定是否重试,重试策略等。本申请实施例可以处理主备切换场景重试,应对计划停机和非计划停机等各类情况。典型的,包括存储过程执行失败的重试,及主备节点切换导致的执行故障场景的重试。下面分别进行介绍:

一、集群场景下,存储过程执行失败的重试。

请参阅图7,为本申请实施例中集群场景下的存储过程重试的一个实施例示意图。

701、业务应用向协调节点发送存储过程请求;

在集群数据库场景下,业务应用将存储过程请求发送至协调节点。

702、协调节点下发该存储过程请求;

协调节点执行该存储过程请求,并根据实际需求或预设规则向数据节点发送SQL,由数据节点执行部分SQL。

协调节点可以获取存储过程中间状态信息,还可以捕获执行过程中的异常。

703、主备同步;

若数据节点采用主备方式配置,组数据节点接收到的SQL将会同步至备数据节点。

需要说明的是,步骤703为可选步骤,可以执行,也可以不执行,此处不做限定。

704、协调节点获取失败信息;

存储过程执行失败包括,协调节点执行失败,或者数据节点执行失败。

可选的,造成存储过程执行失败的异常类型有多种,例如:网络闪断等网络异常、内存申请失败等内存使用异常、由于硬盘忙导致读取异常等输入输出(I/O)异常、锁等待超时异常、以及两阶段事务执行过程中发生的异常等等。此处对于存储过程执行失败的具体原因不做限定。若该异常为可恢复性异常,将发起重试该存储过程。

可选的,数据节点执行SQL并将执行结果返回给协调节点,若数据节点执行出错,协调节点可以获取存储过程的失败信息。

具体实现过程请参阅图3对应的实施例中的步骤302,此处不再赘述。

705、协调节点检查失败原因;

协调节点识别数据节点执行失败的原因是否为可通过重试恢复的可恢复性异常,若是,则发起重试。可选的,协调节点决策模块根据当前主备情况,判断是否重试,及需要延迟重试的时间。

706、重试存储过程。

协调节点根据记录的存储过程中间状态信息,发出重试请求,主数据节点或备数据节点根据该存储过程中间状态信息进行重试,具体实现过程请参阅图3对应的实施例中的步骤303,此处不再赘述。

二、集群场景下,主备节点切换导致执行失败的重试。

请参阅图8,为本申请实施例中集群场景下的存储过程重试的另一个实施例示意图。

801、业务应用向协调节点发送存储过程请求;

802、协调节点下发该存储过程请求;

803、主备同步;

需要说明的是,步骤803为可选步骤,可以执行,也可以不执行,此处不做限定。

步骤801至步骤803与图7对应的实施例中步骤701至703类似,此处不再赘述。

804、数据节点执行失败时,进行主备切换;

数据节点执行存储过程时,协调节点将记录数据携带存储过程执行中间状态信息,具体实现过程请参阅图3对应的实施例中的步骤302,此处不再赘述。

数据节点存储过程执行失败时,向协调节点报错。

可选的,导致数据节点存储过程执行失败的异常类型有多种,此处对于存储过程执行失败的具体原因不做限定。

若主数据节点崩溃宕机,备数据节点工作状态正常,后台集群管理模块感知该情况,协调节点指示进行主备切换。主备节点的切换通常由集群管理系统控制,集群管理系统主要负责整个集群的启动、停止,并收集每个节点的运行状态,发现运行异常时,通过给数据节点发送命令,控制主备切换。

805、重试存储过程。

协调节点根据记录的存储过程中间状态信息进行重试,包括向备数据节点发送执行任务进行重试,具体实现过程请参阅图3对应的实施例中的步骤303,此处不再赘述。

可选的,协调节点可以采用同步方式与其他协调节点同步数据,或者通过落盘方式保存存储过程执行失败前的执行结果集中间变量,这样,即使协调节点崩溃,仍可以实现存储过程执行失败重试。

请参阅图9,为本申请实施例中存储过程执行失败重试方法的一个系统架构示意图。

数据库管理系统保存存储过程执行中,已执行事务结束语句的位置,以及事务结束时的中间状态信息,数据库管理系统捕获异常后,重新发送存储过程请求实现重试。由于,本实施例的数据处理方法记录了事务结束时的位置以及对应的中间状态信息,因此可以实现细粒度重试,提升软件、硬件异常时的客户体验。

上面介绍了实现存储过程执行失败重试的数据处理方法,下面对实现该方法的数据处理设备进行介绍。

请参阅图10,为本申请实施例中数据库管理系统的一个实施例示意图。

本申请实施例提供的数据库管理系统,可以部署于单机数据库系统,或者各种类型的集群数据库系统中的节点,节点可以运行于物理机或虚拟机,具体此处不做限定。

在实际应用中,部署数据库管理系统的数据处理设备可以为数据库服务器,或专用数据处理设备等,具体此处不做限定。

本申请实施例提供的数据库管理系统1000,包括:

执行单元1001,用于响应于存储过程请求,执行存储过程,该存储过程包括一个或多个有序的事务;

记录单元1002,用于当该一个或多个有序的事务中的第一事务执行结束时,记录该第一事务的标记信息;

重试单元1003,用于基于执行该存储过程中出现异常,且满足重试该存储过程的条件,根据该第一事务的标记信息重试该存储过程中该第一事务之后的事务。

该记录单元1002还用于:记录调用该存储过程的请求语句。

该标记信息包括该第一事务的结束语句的行号。

该设备还包括:

记录单元1002,用于记录该存储过程的中间状态信息,该中间状态信息包括以下一个或多个:该第一事务的执行语句结果、错误提示信息、输入参数、输出参数、全局变量和临时变量。

该中间状态信息包括第一事务的执行语句结果或错误提示信息,该设备还包括:

缓存单元1004,用于缓存该第一事务的执行语句结果或错误提示信息,直至该第一事务结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

该中间状态信息包括第一事务的执行语句结果或错误提示信息,该设备还包括:

缓存单元1004,用于缓存该第一事务的执行语句结果或错误提示信息,直至该存储过程结束之后,再将该执行语句结果或错误提示信息发送给用户设备。

该第一事务位于该存储过程中的分支语句的一个分支,该记录单元1002还用于:

记录该存储过程的中间状态信息,该中间状态信息包括分支执行状态,该分支执行状态用于标识该第一事务所在的分支;

该重试单元1003,具体用于基于该分支执行状态,执行该第一事务所在的分支中第一事务之后的事务。

该分支执行状态包括执行该存储过程中该分支语句的条件判断结果。

该重试该存储过程的条件为该存储过程异常为可恢复性异常,该可恢复性异常包括:网络异常、内存使用异常、输入输出异常、锁等待超时异常或两阶段事务提交异常。

该重试单元1003具体用于:等待预设的第一时长后,重试该存储过程中该第一事务之后的事务。

该记录单元1002还用于,当该一个或多个有序的事务中的第二事务执行结束时,记录该第二事务的标记信息,该第二事务为在该第一事务之后执行的事务;

该重试单元1003具体用于:根据该第二事务的标记信息重试该存储过程中该第二事务之后的事务,该第二事务为满足重试该存储过程的条件时,已执行事务中最后被执行的事务。

请参阅图11,为本申请实施例中数据库管理系统的另一个实施例示意图。

数据库管理系统中可以包括多个软件功能模块,包括数据库服务器框架(DBframework)、数据库编译器、数据库执行器和数据库异常处理等模块,新增的子模块实现重试逻辑。其中:

1、数据库服务器框架,用于解析用户发送的消息,以确定是何种报文,如SQL报文,PBE报文等。还用于保存原始请求语句,准备重试时使用;还用于保存中间状态信息等。

2、数据库编译器:用于限制应用场景检查,如遇到不支持场景,设定不重试标记。

3、数据库执行器:用于保存存储过程变量和参数,保存事务结束时的位置,包括COMMIT和ROLLBACK的位置,保存事务结束时的中间状态信息,包括第一过程参数、分支执行状态和第一变量的执行结果等。

4、存储过程异常处理模块:用于捕获异常,检查是否需重试;还可以用于回滚事务。

数据库服务器可以包括:重新执行模块,用于启动新事务;根据上次执行时,保存的COMMIT位置信息,if分支判断结果,跳过已COMMIT语句;根据上次执行时,COMMIT点的信息恢复当前状态,包括变量和参数、COMMIT时结果集信息。

需要说明的是,前提条件包括存储过程执行前,数据未发送客户端;且故障为可处理故障,程序内部故障重试无意义。

5、异常重试模块,重新启动新事务;根据上次执行时,保存的COMMIT位置信息,if分支判断结果等中间状态信息,跳过已提交的语句;根据上次执行时,COMMIT点对应的中间状态信息恢复当前状态,包括变量和参数等。

请参阅图12,为本申请实施例中数据处理设备的一个实施例示意图。

本实施例提供的数据处理设备,可以为服务器或者专用数据处理设备等,例如数据库服务器,本申请实施例中对该具体设备形态不做限定。

该数据处理设备1200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器1201和存储器1202,该存储器1202中存储有程序或数据。

其中,存储器1202可以是易失性存储或非易失性存储。可选地,处理器1201是一个或多个中央处理器(central processing unit,CPU),也可以是专用处理器,该CPU可以是单核CPU,也可以是多核CPU。处理器1201可以与存储器1202通信,在数据处理设备1200上执行存储器1202中的一系列指令。

该数据处理设备1200还包括一个或一个以上有线或无线网络接口1203,例如以太网接口。

可选地,尽管图12中未示出,数据处理设备1200还可以包括一个或一个以上电源;一个或一个以上输入输出接口,输入输出接口可以用于连接显示器、鼠标、键盘、触摸屏设备或传感设备等,输入输出接口为可选部件,可以存在也可以不存在,此处不做限定。

本实施例中数据处理设备1200中的处理器1201所执行的流程可以参考前述方法实施例中描述的方法流程,此处不加赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

相关技术
  • 数据处理方法、数据库管理系统和数据处理设备
  • 数据库管理系统及其数据处理方法
技术分类

06120112707593