事务处理方法、装置、服务器、数据库管理系统及介质与流程

文档序号:26590150发布日期:2021-09-10 20:38阅读:83来源:国知局
1.本发明实施例涉及数据库
技术领域
:,尤其涉及一种事务处理方法、装置、服务器、数据库管理系统及介质。
背景技术
::2.数据库管理系统(databasemanagementsystem,dbms)通常利用重做(redo)日志来保证事务的持久性(durability),用户发起事务提交(commit)请求时,数据库服务器修改事务状态的操作会产生一条redo日志,将redo日志写入磁盘的联机日志文件(即刷盘)后,数据库服务器响应用户,事务提交完成。事务提交完成后,如果数据库服务器发生异常重启,根据redo日志可以将数据恢复到故障前的状态,维持该事务的数据修改有效。3.目前,一种优化的事务处理机制无需等待日志刷盘完成即可提前响应用户,以减少redo日志刷盘冲突和刷盘等待时间,这种机制称为commitnowait。对于还未刷盘的redo日志,如果发生异常重启,数据库服务器会忽略这些redo日志对应的修改,将数据回滚到修改前的状态,通过允许这些数据修改的丢失,以换取更好的系统性能。4.然而,在数据库管理系统包含多个数据库服务器的情况下,允许多个数据库服务器访问或者修改同一事务的数据,这种情况下,如果发生异常重启,这些数据会按照完成刷盘的redo日志恢复,可能会由于redo日志未刷盘而回滚,从而会引发数据错误,影响事务的正确处理。技术实现要素:5.本发明提供了一种事务处理方法、装置、服务器、数据库管理系统及介质及系统,以保证事务数据的正确性,提高事务处理的可靠性。6.第一方面,本发明实施例提供了一种事务处理方法,包括:7.接收sql请求,所述sql请求用于请求对目标事务的数据进行指定处理;8.若目标服务器节点非当前服务器节点,则提取所述目标服务器节点的提交日志序列号和刷盘日志序列号,其中,所述目标服务器节点为在接收到所述sql请求之前最后修改所述目标事务的数据的事务所在的服务器节点;9.根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理。10.进一步的,根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理,包括:11.若所述提交日志序列号小于或等于所述刷盘日志序列号,则按照所述sql请求对所述目标事务的数据进行指定处理。12.进一步的,根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理,包括:13.若所述提交日志序列号大于所述刷盘日志序列号,则向所述目标服务器节点发送刷盘请求;14.在所述目标服务器节点完成刷盘后,按照所述sql请求对所述目标事务的数据进行指定处理。15.进一步的,在接收sql请求之后,还包括:16.若所述目标服务器节点为当前服务器节点,则按照所述sql请求对所述目标事务的数据进行指定处理。17.进一步的,在接收sql请求之前,还包括:18.在启动所述目标事务时,记录集群中每个服务器节点的提交日志序列号和刷盘日志序列号;19.在启动所述目标事务之后,实时更新每个服务器节点的刷盘日志序列号。20.进一步的,在接收sql请求之后,还包括:21.读取在接收到所述sql请求之前最后修改所述目标事务的数据的事务的事务号;22.根据所述事务号对集群中服务器节点总数取余的余数,确定所述目标服务器节点23.第二方面,本发明实施例提供了一种事务处理装置,包括:24.接收模块,用于接收sql请求,所述sql请求用于请求对目标事务的数据进行指定处理;25.提取模块,用于若目标服务器节点非当前服务器节点,则提取所述目标服务器节点的提交日志序列号和刷盘日志序列号,其中,所述目标服务器节点为在接收到所述sql请求之前最后修改所述目标事务的数据的事务所在的服务器节点;26.处理模块,用于根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理。27.第三方面,本发明实施例提供了一种数据库服务器,包括:28.一个或多个处理器;29.存储器,用于存储一个或多个程序;30.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的事务处理方法。31.第四方面,本发明实施例提供了一种系统,包括:32.多个数据库服务器,每个数据库服务器为一个服务器节点;33.其中,至少一个服务器节点用于:34.接收sql请求,所述sql请求用于请求对目标事务的数据进行指定处理;35.若目标服务器节点非当前服务器节点,则提取所述目标服务器节点的提交日志序列号和刷盘日志序列号,其中,所述目标服务器节点为在接收到所述sql请求之前最后修改所述目标事务的数据的事务所在的服务器节点;36.根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理。37.第五方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的事务处理方法。38.本发明实施例提供了一种事务处理方法、装置、服务器、数据库管理系统及介质。该方法包括:接收sql请求,sql请求用于请求对目标事务的数据进行指定处理;若目标服务器节点非当前服务器节点,则提取目标服务器节点的提交日志序列号和刷盘日志序列号,其中,目标服务器节点为在接收到sql请求之前最后修改目标事务数据的事务所在的服务器节点;根据提交日志序列号、刷盘日志序列号以及sql请求对目标事务数据进行指定处理。上述技术方案针对其他服务器节点对目标事务的修改,根据提交日志序列号和刷盘日志序列号,在处理事务前明确提交日志序列号对应的日志是否完成刷盘,从而保证数据的正确性,提高事务处理的可靠性。附图说明39.图1为本发明实施例一提供的一种事务处理方法的流程图;40.图2为本发明实施例二提供的一种事务处理方法的流程图;41.图3为本发明实施例三提供的一种事务处理装置的结构示意图;42.图4为本发明实施例四提供的一种数据库服务器的硬件结构示意图;43.图5为本发明实施例五提供的一种数据库管理系统的结果示意图。具体实施方式44.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。45.在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其处理完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。46.为了更好地理解本发明实施例,下面对相关技术进行介绍。47.利用redo日志可以保证事务的持久性。具体的,数据库服务器收到用户发起事务提交请求时,将事务修改为已提交(committed)状态,修改事务状态的操作会产生一条redo日志,并启动日志刷盘操作,将redo日志写入磁盘的联机日志文件,然后再响应用户,事务提交完成。事务提交完成后,如果数据库服务器发生异常重启,则根据redo日志可以将数据恢复到故障前的状态,确保该事务状态仍为committed,并维持对该事务的数据修改有效。这种机制意味着每个事务的提交都会触发redo日志刷盘操作,频繁的redo日志刷盘请求和刷盘等待,在很大程度上会影响数据库管理系统的整体性能。48.commitnowait机制的实现原理是:事务提交时允许指定nowait选项,即,在事务产生的redo日志写入磁盘之前,提前响应用户,目的是减少redo日志刷盘冲突和刷盘等待。但是由于这些redo日志还未刷盘,如果发生异常重启,数据库服务器会忽略这些redo日志对应的修改,将数据回滚到修改前的状态,通过允许这些数据修改的丢失,以换取更好的系统性能。49.在数据库管理系统包含多个数据库服务器的情况下,允许多个数据库服务器访问或者修改同一事务的数据,这种情况下,commitnowait机制会引发数据错误,影响事务的正确处理。例如:50.createtablet1(c1int);51.createtablet2(c1int);52.insertintot1values(1);53.insertintot2values(1);54.commit;55.执行上述语句后,数据库中存在t1和t2两张表,且t1和t2中各有一条数据,其值为1。56.然后,0号节点(记为ep[0])的事务(记为trx0,0为事务的事务号或id号)执行以下处理:[0057]updatet1setc1=11;‑‑修改表t1的数据为11,且修改操作的redo日志刷盘完成[0058]commit;‑‑修改事务状态为committed的redo日志未刷盘[0059]此外,1号节点(记为ep[1])的事务(记为trx1,1为事务的事务号或id号)执行以下处理:[0060]updatet1setc1=22;‑‑修改表t1的数据为22[0061]updatet2setc1=22;‑‑修改表t2的数据为22[0062]commit;‑‑上述两条修改数据的操作和修改事务状态为committed的redo日志都完成刷盘[0063]这种情况下,如果系统发生异常重启,则数据库服务器会先重做已经完成刷盘redo日志,再将没有提交的事务的数据回滚。具体的,ep[1]修改trx1的事务状态的redo日志已经完成刷盘,trx1提交完成,因此数据修改有效,在重启时即t1和t2的数据都恢复为22;但是,由于ep[0]修改trx0的事务状态的redo日志未刷盘,trx0仍然处于活动状态,重启后trx0事务的数据回滚,t1表的数据重新修改为1。可见,由于ep[1]的trx1事务对t1表的修改丢失、对t2表修改的数据保持,引发了数据错误。[0064]本实施例所提供的方法,目的是提供一种事务处理方法,能够在保证系统高性能(即commitnowait机制)的前提下,针对其他数据库服务器修改了目标事务的数据的情况,通过分析被记录的最后一次已提交的修改数据的redo日志(即提交日志序列号对应的日志)是否完成刷盘,判断数据是否正确、是否能够直接按照sql请求处理目标事务的数据,从而保证数据的正确性,提高事务处理的可靠性。[0065]实施例一[0066]图1为本发明实施例一提供的一种事务处理方法的流程图,本实施例可适用于在数据库管理系统中对目标事务的数据进行访问、修改、增删等处理的情况。具体的,该事务处理方法可以由事务处理装置执行,该事务处理装置可以通过软件和/或硬件的方式实现,并集成在数据库服务器中。需要说明的是,数据库管理系统中可以包括多个数据库服务器,每个数据库服务器为一个服务器节点,系统采用commitnowait机制,即,每个数据库服务器可以先响应用户、再将修改事务状态对应的redo日志刷盘。当一个数据库服务器(即当前数据库服务器或当前服务器节点)接收到用户发起的sql请求时,可以执行本实施例的方法。[0067]如图1所示,该方法具体包括如下步骤:[0068]s110、接收sql请求,sql请求用于请求对目标事务的数据进行指定处理。[0069]具体的,sql请求指用户发起的、由当前服务器节点对目标事务的数据进行处理的请求,其中,处理可以指对目标事务的数据的访问、增删、修改和查询等。[0070]s120、若目标服务器节点非当前服务器节点,则提取目标服务器节点的提交日志序列号和刷盘日志序列号。[0071]具体的,目标服务器节点为在接收到sql请求之前,最后修改目标事务的数据的事务所在的服务器节点。目标服务器节点可能是当前服务器节点,也可能是集群中的其他服务器节点。如果目标服务器节点是当前服务器节点,即在接收到sql请求之前最后修改数据的服务器节点,与即将对目标事务的数据进行处理的当前服务器节点为同一服务器节点,这种情况下不需要考虑集群中其他服务器节点对目标事务的数据的修改,如果系统故障重启,则在commitnowait机制下,当前服务器节点忽略未刷盘的redo日志对应的修改、按照已完成刷盘的redo日志恢复数据即可,不会引起数据错误。[0072]如果目标服务器节点非当前服务器节点,即在当前服务器节点接收到sql请求之前,有其他服务器节点对目标事务的数据进行了修改,若发生故障重启,当前服务器节点按照已完成刷盘的redo日志恢复数据之后,由于其他服务器节点对应的redo日志可能未刷盘,造成相应数据回滚,修改了按照已完成刷盘的redo日志恢复的数据,引起数据错误。本实施例中,通过分析目标服务器节点的提交日志序列号和刷盘日志序列号,来确定在接收到sql请求之前目标服务器节点最后修改数据的redo日志是否完成刷盘,在此基础上,可以及时将未刷盘的redo日志写入磁盘以避免数据回滚,然后再处理目标事务的数据。[0073]日志序列号(logsequencenumber,lsn)是数据库管理系统内部维护的一个递增数值,用于标识redo日志。本实施例中,每个数据库服务器有两种日志序列号,分别是提交日志序列号(记为commit_lsn)和刷盘日志序列号(记为file_lsn),其中,commit_lsn是在目标事务启动时记录的、目标服务器节点在其事务提交时修改事务状态为committed所产生的redo日志的lsn;file_lsn是写入磁盘的redo日志的最大lsn,在目标事务启动时记录,并且目标事务启动后更新,每有一批redo日志完成刷盘,file_lsn增加相应的数值。在接收到sql请求之前,目标服务器节点最后修改了目标事务的数据,则当前服务器节点在接收到sql请求时,可以根据其目标事务所记录的目标服务器节点的commit_lsn以及当前最新的file_lsn,确定目标服务器节点在目标事务启动时产生的redo日志是否完成刷盘。[0074]可选的,集群中各服务器节点间实时交互commit_lsn和file_lsn,以便在某个服务器节点接收到sql请求时,可以获取到目标服务器节点对应的commit_lsn和file_lsn。[0075]s130、根据提交日志序列号、刷盘日志序列号以及sql请求对目标事务数据进行指定处理。[0076]具体的,当前服务器节点根据其目标事务所记录的目标服务器节点的commit_lsn以及最新的file_lsn,确定目标服务器节点在目标事务启动时产生的redo日志是否已完成刷盘,据此按照sql请求对目标事务数据进行指定处理。[0077]例如,commit_lsn=10,file_lsn=12,即目标服务器节点在目标事务启动时最近的提交操作对应的的redo日志的日志序列号为10,而已经完成刷盘的redo日志的日志序列号达到12,说明日志序列号为10的redo日志已经完成刷盘,此时目标事务的数据是正确的,即便发生异常重启也不会丢失,此时按照sql请求对目标事务数据进行指定处理即可。又如,commit_lsn=10,file_lsn=8,即已经完成刷盘的redo日志的日志序列号仅到8,说明日志序列号为10的redo日志未刷盘,一旦发生异常重启,日志序列号为10的redo日志对应的数据修改会丢失,数据会回滚到修改前的状态,引发数据错误,这种情况下需要等待目标服务器节点完成redo日志的刷盘后再按照sql请求对目标事务数据进行指定处理。[0078]本发明实施例一提供的一种事务处理方法,通过引入commit_lsn和file_lsn,确定目标服务器节点在目标事务启动时已提交操作对应的redo日志是否完成刷盘,从而避免其他服务器节点对目标事务数据的修改丢失,在确保数据正确性的基础上再处理目标事务的数据,在共享存储集群数据库管理系统的commitnowait机制下,实现对目标事务高效、可靠地处理。[0079]实施例二[0080]图2为本发明实施例二提供的一种事务处理方法的流程图,本实施例是在上述实施例的基础上进行优化,对序列号提取过程、根据事务号确定目标服务器节点的过程以及是否需要等待刷盘的过程进行具体描述。需要说明的是,未在本实施例中详尽描述的技术细节可参见上述任意实施例。[0081]具体的,如图2所示,该方法具体包括如下步骤:[0082]s210、在启动目标事务时,记录集群中每个服务器节点的提交日志序列号和刷盘日志序列号。[0083]具体的,启动目标事务是指启动对目标事务的数据的具体操作,例如增删、查询、修改等,此时,当前服务器节点(可能是集群中的任意一个服务器节点)为目标事务记录其他每个服务器节点的commit_lsn和file_lsn。[0084]可以理解的是,集群中的每个服务器节点在修改事务状态为committed并产生redo日志时都生成对应的commit_lsn,并广播给共享存储数据库集群中的其他服务器节点;在每次redo日志完成刷盘后,广播file_lsn给其他服务器节点。具体的,集群中的每个服务器节点在commitnowait机制下可执行以下操作:[0085]接收用户的事务commit请求;[0086]修改事务状态为committed;[0087]生成修改事务状态的redo日志,登记commit_lsn;[0088]释放事务的封锁资源,唤醒等待的事务[0089]触发commit_lsn信息的广播流程,向其他服务器节点发送commit_lsn,向各服务器节点广播可由异步的线程执行);[0090]事务提交完成,响应用户。[0091]s220、在启动目标事务之后,实时更新每个服务器节点的刷盘日志序列号。[0092]具体的,启动目标事务之后,目标事务记录的其他服务器节点的commit_lsn值不会改变,但当前服务器节点会根据接收到的其他服务器节点广播的file_lsn更新目标事务记录的对应file_lsn。[0093]s230、接收sql请求。[0094]s240、读取在接收到sql请求之前最后修改目标事务的数据的事务的事务号。[0095]本实施例中,利用事务号确定目标服务器节点。系统中每一个事务都对应于一个事务号(trxid),每一条数据都包含trxid字段,用于标识最后修改此条数据的事务号。[0096]需要说明的是,在读取事务号的过程中,需要对系统中的各事务进行可见性分析,即分析各事务对当前服务器节点来说是否可见,可见性决定了一个事务对目标事务的数据的修改是否有效。示例性的,一个历史事务为在数据页中删除数据a,目标事务为查询该数据页中的所有数据,如果该历史事务为可见的,则目标事务的查询结果中不包括数据a;如果该历史事务为不可见的,则目标事务的查询结果中包括数据a。通过判断各事务的可见性,能够保证数据的一致性。[0097]本实施例中,在接收到sql请求之前最后修改目标事务的数据的事务是可见的事务。具体的,如果一个事务的事务号与目标事务的事务号相同,或者,一个事务的事务号小于目标事务的事务号且不属于活动事务,则该事务对于当前服务器节点为可见的,该事务对目标事务的数据的修改是有效的,需要保证该事务对应的redo日志完成刷盘后才能根据sql请求处理目标事务的数据。如果一个事务的事务号大于目标事务的事务号或者属于活动事务,则该事务对于当前服务器节点为不可见的,该事务对目标事务的数据的修改是在启动目标事务并记录commit_lsn之后发生的,因此是无效的,可以忽略。[0098]s250、根据事务号对集群中服务器节点总数取余的余数,确定目标服务器节点。[0099]具体的,根据读取的trxid字段确定在接收到sql请求之前最后修改数据的事务所在的目标服务器节点。本实施例中,用读取的事务号对集群中服务器节点总数取余,余数记为服务器节点的节点号。例如读取的事务号为4,节点总数为3,当前服务器节点的节点号为1,则目标服务器节点为当前服务器节点。在此基础上,可以确保不同服务器节点分配的事务号不会冲突,且通过建立节点号与事务号的映射关系,便于快速确定目标服务器节点。[0100]s260、目标服务器节点为当前服务器节点?若是,则执行s280;否则,执行s270。[0101]具体的,如果目标服务器节点为当前服务器节点,这种情况下不需要考虑集群中其他服务器节点对目标事务的数据的修改,如果系统发生异常重启,则在commitnowait机制下,忽略未刷盘的redo日志的修改、按照已完成刷盘的redo日志恢复数据即可,并不会引起数据错误;如果目标服务器节点非当前服务器节点,即在当前服务器节点接收到sql请求之前,有其他服务器节点对目标事务的数据进行了修改,则通过分析目标事务记录的目标服务器节点的commit_lsn和file_lsn,可以明确commit_lsn对应的redo日志是否完成刷盘,进而决定是否需要等待刷盘。[0102]s270、提交日志序列号≤刷盘日志序列号?若是,则执行s280;否则,执行s290。[0103]具体的,由于commit_lsn在目标事务处理开始之前收集,在访问到其他服务器节点上事务的修改记录时,如果commit_lsn≤file_lsn,说明commit_lsn对应的redo日志已完成刷盘,目标服务器节点的事务对数据的修改已经保存,则按照sql请求对目标事务的数据进行指定处理即可。这种异步的服务器节点间redo日志刷盘等待机制,可以提升共享存储集群commitnowait机制的执行效率。[0104]s280、按照sql请求对目标事务的数据进行指定处理。[0105]s290、向目标服务器节点发送刷盘请求,并在目标服务器节点完成刷盘后,按照sql请求对目标事务的数据进行指定处理。[0106]具体的,如果commit_lsn>file_lsn,说明commit_lsn对应的redo日志未刷盘,故障重启时数据会回滚,目标服务器节点的事务对数据的修改丢失,这种情况下需要向目标服务器节点发送刷盘请求,等待commit_lsn对应的redo日志完成刷盘后,再按照sql请求对目标事务的数据进行指定处理,执行完成后可以响应用户,目标事务完成。[0107]本发明实施例二提供的一种事务处理方法,在上述实施例的基础上进行优化,各服务器节点通过广播和记录commit_lsn和file_lsn,为判断是否需要等待redo日志刷盘提供依据;通过判断各事务的可见性,确保其他服务器节点对目标事务的数据的修改有效,数据可以正确恢复,保证数据的一致性;通过建立节点号与事务号的映射关系,将读取的事务号对节点总数取余,可高效地确定目标服务器节点,确保不同服务器节点分配的事务号不会冲突;通过异步的服务器节点间redo日志刷盘等待机制,可提升共享存储集群commitnowait机制的执行效率;最终根据commit_lsn和file_lsn,保证commit_lsn对应的日志完成刷盘,从而提高事务处理的可靠性[0108]实施例三[0109]图3为本发明实施例三提供的一种事务处理装置的结构示意图。本实施例提供的事务处理装置包括:[0110]接收模块310,用于接收sql请求,所述sql请求用于请求对目标事务的数据进行指定处理;[0111]提取模块320,用于若目标服务器节点非当前服务器节点,则提取所述目标服务器节点的提交日志序列号和刷盘日志序列号,其中,所述目标服务器节点为在接收到所述sql请求之前最后修改所述目标事务的数据的事务所在的服务器节点;[0112]处理模块330,用于根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理。[0113]本发明实施例三提供的一种事务处理装置,对于其他服务器节点对目标事务的修改,可根据提交日志序列号和刷盘日志序列号明确目标服务器节点的日志提交进度和刷盘进度,据此在处理事务前明确提交日志序列号对应的日志是否完成刷盘,从而保证事务数据的正确性,提高事务处理的可靠性。[0114]在上述实施例的基础上,处理模块330,包括:[0115]第一处理单元,用于若所述提交日志序列号小于或等于所述刷盘日志序列号,则按照所述sql请求对所述目标事务的数据进行指定处理。[0116]在上述实施例的基础上,处理模块330,包括:[0117]请求单元,用于若所述提交日志序列号大于所述刷盘日志序列号,则向所述目标服务器节点发送刷盘请求;[0118]第二处理单元,用于在所述目标服务器节点完成刷盘后,按照所述sql请求对所述目标事务的数据进行指定处理。[0119]在上述实施例的基础上,该装置还包括:[0120]第三处理单元,用于在接收sql请求之后,若所述目标服务器节点为当前服务器节点,则按照所述sql请求对所述目标事务的数据进行指定处理。[0121]在上述实施例的基础上,该装置还包括:[0122]记录模块,用于在接收sql请求之前,在启动所述目标事务时,记录集群中每个服务器节点的提交日志序列号和刷盘日志序列号;[0123]更新模块,用于在启动所述目标事务之后,实时更新每个服务器节点的刷盘日志序列号。[0124]在上述实施例的基础上,该装置还包括:[0125]读取模块,用于在接收sql请求之后,读取在接收到所述sql请求之前最后修改所述目标事务的数据的事务的事务号;[0126]取余模块,用于根据所述事务号对集群中服务器节点总数取余的余数,确定所述目标服务器节点。[0127]本发明实施例三提供的事务处理装置可以用于执行上述任意实施例提供的事务处理方法,具备相应的功能和有益效果。[0128]实施例四[0129]图4为本发明实施例四提供的一种数据库服务器的硬件结构示意图。如图4所示,本技术提供的数据库服务器,包括存储器42、处理器41以及存储在存储器上并可在处理器上运行的计算机程序,处理器41执行所述程序时实现上述的事务处理方法。[0130]数据库服务器还可以包括存储器42;该数据库服务器中的处理器41可以是一个或多个,图4中以一个处理器41为例;存储器42用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如本技术实施例中所述的事务处理方法。[0131]数据库服务器还包括:通信装置43、输入装置44和输出装置45。[0132]数据库服务器中的处理器41、存储器42、通信装置43、输入装置44和输出装置45可以通过总线或其他方式连接,图4中以通过总线连接为例。[0133]输入装置44可用于接收输入的数字或字符信息,以及产生与数据库服务器的用户设置以及功能控制有关的按键信号输入。输出装置45可包括显示屏等显示设备。[0134]通信装置43可以包括接收器和发送器。通信装置43设置为根据处理器41的控制进行信息收发通信。[0135]存储器42作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序以及模块,如本技术实施例所述事务处理方法对应的程序指令/模块(例如,事务处理装置中的接收模块310、提取模块320和处理模块330)。存储器42可包括存储程序区和存储数据区,其中,存储程序区可存储处理系统、至少一个功能所需的应用程序;存储数据区可存储根据数据库服务器的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至数据库服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。[0136]实施例五[0137]本发明实施例五提供一种数据库管理系统。图5为本发明实施例五提供的一种数据库管理系统示意图。如图5所示,该系统包括:多个数据库服务器(例如数据库服务器511和数据库服务器512),每个数据库服务器为一个服务器节点;其中,至少一个服务器节点用于:接收sql请求,sql请求用于请求对目标事务的数据进行指定处理;若目标服务器节点非当前服务器节点,则提取目标服务器节点的提交日志序列号和刷盘日志序列号,其中,目标服务器节点为在接收到sql请求之前最后修改目标事务的数据的事务所在的服务器节点;根据提交日志序列号、刷盘日志序列号以及sql请求对目标事务的数据进行指定处理。[0138]本发明实施例五提供的一种数据库管理系统,对于其他服务器节点对目标事务的修改,当前服务器节点可根据提交日志序列号和刷盘日志序列号明确目标服务器节点的日志提交进度和刷盘进度,据此在处理事务前明确其他服务器节点的日志是否都完成刷盘,从而保证事务数据的正确性,提高事务处理的可靠性。[0139]进一步的,根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理,包括:[0140]若所述提交日志序列号小于或等于所述刷盘日志序列号,则按照所述sql请求对所述目标事务的数据进行指定处理。[0141]进一步的,根据所述提交日志序列号、所述刷盘日志序列号以及所述sql请求对所述目标事务的数据进行指定处理,包括:[0142]若所述提交日志序列号大于所述刷盘日志序列号,则向所述目标服务器节点发送刷盘请求;[0143]在所述目标服务器节点完成刷盘后,按照所述sql请求对所述目标事务的数据进行指定处理。[0144]进一步的,在接收sql请求之后,上述的至少一个服务器节点还用于:[0145]若所述目标服务器节点为当前服务器节点,则按照所述sql请求对所述目标事务的数据进行指定处理。[0146]例如,数据库服务器511为目标事务所在的当前服务器节点,在数据库服务器511接收到sql请求之前最后修改目标事务的数据的事务所在的目标服务器节点可能是数据库服务器511,也可能是数据库服务器512。如果是数据库服务器511,则无需等待刷盘,按照sql请求对目标事务的数据进行相应处理即可;如果是数据库服务器512,则需要根据数据库服务器512的commit_lsn和file_lsn决定是否需要等待刷盘,在此基础上再按照sql请求对目标事务的数据进行相应处理。[0147]具体的,如果数据库服务器512对应的commit_lsn≤file_lsn,则无需等待刷盘,按照sql请求对目标事务的数据进行相应处理即可;如果commit_lsn>file_lsn,则需要等待数据库服务器512的日志完成刷盘之后再按照sql请求对目标事务的数据进行相应处理。[0148]进一步的,在接收sql请求之前,上述的至少一个服务器节点还用于:[0149]在启动所述目标事务时,记录集群中每个服务器节点的提交日志序列号和刷盘日志序列号;[0150]在启动所述目标事务之后,实时更新每个服务器节点的刷盘日志序列号。[0151]进一步的,在接收sql请求之后,上述的至少一个服务器节点还用于:[0152]读取在接收到所述sql请求之前最后修改所述目标事务的数据的事务的事务号;[0153]根据所述事务号对集群中服务器节点总数取余的余数,确定所述目标服务器节点。[0154]本实施例五提供的一种数据库管理系统可以用于实现上述任意实施例提供的事务处理方法,具备相应的功能和有益效果。[0155]在上述实施例的基础上,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被事务处理装置执行时实现本发明上述任意实施例中的事务处理方法,该方法包括:接收sql请求,sql请求用于请求对目标事务的数据进行指定处理;若目标服务器节点非当前服务器节点,则提取目标服务器节点的提交日志序列号和刷盘日志序列号,其中,目标服务器节点为在接收到sql请求之前最后修改目标事务数据的事务所在的服务器节点;根据提交日志序列号、刷盘日志序列号以及sql请求对目标事务数据进行指定处理。[0156]本发明实施例所提供的一种包含计算机可执行指令的存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(randomaccessmemory,ram)、只读存储器(readonlymemory,rom)、可擦式可编程只读存储器(erasableprogrammablereadonlymemory,eprom)、闪存、光纤、便携式cd‑rom、光存储器件、磁存储器件、或者上述的任意合适的组合。计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。[0157]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。[0158]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、无线电频率(radiofrequency,rf)等等,或者上述的任意合适的组合。[0159]可以以一种或多种程序设计语言或其组合来编写用于执行本技术处理的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、smalltalk、c++,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。[0160]通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read‑onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的事务处理方法。[0161]注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1