CN102354289B - 一种并发事务的调度方法和相关装置 - Google Patents
一种并发事务的调度方法和相关装置 Download PDFInfo
- Publication number
- CN102354289B CN102354289B CN201110281872A CN201110281872A CN102354289B CN 102354289 B CN102354289 B CN 102354289B CN 201110281872 A CN201110281872 A CN 201110281872A CN 201110281872 A CN201110281872 A CN 201110281872A CN 102354289 B CN102354289 B CN 102354289B
- Authority
- CN
- China
- Prior art keywords
- affairs
- formation
- resource collection
- waiting list
- resource
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明实施例公开了一种并发事务的调度方法和相关装置,用于对事务进行可串行化预判定。本发明实施例方法包括:获取提交队列中每个事务的资源集合;将提交队列中的事务送入等待队列;根据等待队列中每个事务的资源集合,逐一判断等待队列中每个的事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列;将准执行队列分成可执行队列和不可执行队列,并将不可执行队列中的事务送入等待队列,将可执行队列中的事务发送至CPU。通过实行本发明的技术方案,能够避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种并发事务的调度方法和相关装置。
背景技术
数据库管理系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理核心机构。数据库管理系统中访问并可能更新数据库中各种数据的一个程序执行单元称为事务,系统中事务的执行靠中央处理器(Central Processing Unit,CPU)来完成。衡量数据库管理系统性能的一个重要指标就是该系统能否为多用户维持高事务吞吐量和低响应时间。另外,数据库管理系统的高事务吞吐量带来数据一致性问题,所谓数据一致性问题就是指多个事务并发执行时,如果对同一项数据进行操作,那么操作结果可能与该多个事务非并发执行时产生的操作结果不一致。所有引起数据一致性问题的原因归结为并发事务之间存在依赖关系,当一个事务或一条结构化查询语言(Structured Query Language,SQL)语句与另一个事务或另一条SQL语句之间存在共享数据对象,且两个事务或两条SQL语句对共享数据对象有写操作,则可判定两个事务或两条SQL语句之间存在依赖关系。
目前,解决数据一致性问题关键在于对并发事务进行可串行化处理,最常用于处理并发事务可串行化的方法是加锁。所谓加锁,即事务对某个数据库中的资源存取前,先向系统提出请求并锁定该资源,该事务获得锁后,即取得对该资源中数据的控制权,在该事务释放锁之前,其他事务不能更新此数据,该事务结束时,即释放被该锁定的资源。
但是,加锁机制实现的是强制性可串行化处理,若加锁机制失效,就会会导致事务执行出现死锁现象,死锁出现后,需要等待一段时间系统才能检测出来,并且至少需要有一个事务放弃执行并回滚到执行前的状态才能解开死锁,降低了系统整体运行的效率和性能。
发明内容
本发明实施例提供了一种并发事务的调度方法和相关装置,用于在事务执行前对所述事务进行可串行化预判定,并将判定后可串行化的事务送入CPU中执行,避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
一种并发事务的调度方法,包括:
获取提交队列中每个事务的资源集合;
将所述提交队列中的事务送入等待队列;
根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中每个的事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列;
将所述准执行队列分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至中央处理器CPU,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
一种用于并发事务调度的装置,包括:
资源集合获取模块,用于获取提交队列中每个事务的资源集合;
等待队列管理模块,用于将所述提交队列中的事务送入等待队列;
依赖关系判断模块,用于根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中每个的事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列;
事务分离模块,用于将所述准执行队列分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至中央处理器CPU,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
从以上技术方案可以看出,本发明实施例具有以下优点:
将提交队列中的事务送入等待队列中,通过获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对依赖关系的判断,将所述准执行队列中的事务分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就不会出现死锁现象,从而提高了系统整体运行的效率和性能。
附图说明
图1为本发明第一实施例并发事务调度方法基本流程图;
图2为本发明第一实施例事务流向图;
图3为本发明第二实施例并发事务调度方法详细流程图;
图4为本发明第三实施例并发事务调度方法详细流程图;
图5为本发明第四实施例并发事务调度方法详细流程图;
图6为本发明第四实施例举例事务的资源前趋图;
图7为本发明第五实施例用于并发事务调度的装置基本结构图;
图8为本发明第六实施例用于并发事务调度的装置详细结构图。
具体实施方式
本发明提供了一种并发事务的调度方法,用于在事务执行前对所述事务进行可串行化预判定,并将判定后可串行化的事务送入CPU中执行,避免死锁现象的出现。本方法在数据库管理系统中执行队列中有事务完成或有事务被送入提交队列或两者同时发生时,结束本轮调度,进行下一轮调度。另外,本发明还提供与所述并发事务的调度方法相关的装置。以下分别进行详细的说明。
本发明第一实施例的并发事务的调度方法基本流程请参见图1,调度过程中事务的流向请参见图2,进行本轮调度,必须为数据库管理系统中执行队列中有事务完成或有事务被送入提交队列或两者同时发生,该调度方法主要包括步骤:
101、获取提交队列中每个事务的资源集合。
数据库管理系统获取提交队列中每个事务的资源集合。
其中,资源集合即事务中操作关键字的操作对象的集合,此步骤中获取的提交队列中每个事务的资源集合将于后续步骤中作为判断所述事务与其它队列中事务是否存在依赖关系的依据。
在本实施例中,所有事务都必定先被提交到数据库管理系统中的提交队列,再经由提交队列被送入其它队列中,而获取事务资源集合的操作在是在本步骤中完成,因此在每一轮调度中,其它队列中的事务的资源集合是已知的,因为在本轮调度之前的调度中,其它队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。
102、将提交队列中的事务送入等待队列。
数据库管理系统将所述提交队列中的事务送入等待队列中,形成新的等待队列,所述事务的流向如图2示,等待队列中的事务等待系统的调度。
103、判断等待队列中每个的事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列,若是,则将等待队列中的事务停留在等待队列中,事务的流向如图2示。
其中,根据步骤101所述,等待队列中的事务的资源集合无须重新获取,因为等待队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。
104、将准执行队列分成可执行队列和不可执行队列,并将不可执行队列中的事务送入等待队列,将可执行队列中的事务发送至CPU。
其中,所述事务的流向如图2示,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
本实施例方法通过获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
本发明第二实施例将对第一实施例中的方法进行详细描述,其中,第一实施例中的资源集合具体为读资源集合和写资源集合,相关的获取资源集合的步骤将在本实施例中详细描述。本调度方法详细流程请参见图3,进行本轮调度,必须为数据库管理系统中执行队列中有事务完成或有事务被送入提交队列或两者同时发生,该调度方法主要包括步骤:
301、获取提交队列中每个事务中的每条结构化查询语言SQL语句的资源快照。
数据库管理系统对SQL语句进行预编译,即对其进行语法和词法分析。具体操作是找出SQL语句中的操作关键字和操作对象。SQL语句中的操作关键字有4个:选择select、插入insert、删除delete和更新update,其中,除select为读操作外,其余均为写操作。操作对象是指被操作的数据表。
经过上述语法分析和词法分析,可得到SQL语句的资源快照,资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合。资源快照的形式为:其中x代表事务的唯一编号,y代表事务中SQL语句的顺序号,集合{A,B}代表读操作的操作对象为表A和表B的数据,集合{C}代表写操作把数据写入操作对象表C。集合{A,B}为SQL语句的读资源集合,集合{C}为SQL语句的写资源集合。
302、根据资源快照,获取SQL语句的读资源集合和写资源集合。
资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合,系统可根据资源快照获取SQL语句的读资源集合和写资源集合。
303、合并每个事务中的每条SQL语句的读资源集合为每个事务的读资源集合,合并每个事务中的每条SQL语句的写资源集合为每个事务的写资源集合。
数据库管理系统合并所述提交队列中的每个事务中的每条SQL语句的读资源集合为所述提交队列中的每个事务的读资源集合,合并所述提交队列中的每个事务中的每条SQL语句的写资源集合为所述提交队列中的每个事务的写资源集合。
其中,此步骤中获取的提交队列中每个事务的资源集合将于后续步骤中作为判断所述事务与其它队列中事务是否存在依赖关系的依据。
304、将提交队列中的事务送入等待队列。
数据库管理系统将所述提交队列中的事务送入等待队列中,形成新的等待队列,等待队列中的事务等待系统的调度。
305、判断等待队列中每个的事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列,若是,则将等待队列中的事务停留在等待队列中。
在本实施例中,所有事务都必定先被提交到数据库管理系统中的提交队列,再经由提交队列被送入其它队列中,而获取事务资源集合的操作在是在本步骤中完成,因此在每一轮调度中,其它队列中的事务的资源集合是已知的,因为在本轮调度之前的调度中,其它队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。所以,等待队列中的事务的资源集合无须重新获取,因为等待队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。
306、将准执行队列分成可执行队列和不可执行队列,并将不可执行队列中的事务送入等待队列,将可执行队列中的事务发送至CPU。
其中,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
本实施例方法通过获取等待队列的每个事务中每条SQL语句的资源集合,再获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
本发明第三实施例将对第二实施例中的方法进行详细描述,其中,根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系的步骤将在本实施例中详细描述。本调度方法详细流程请参见图4,进行本轮调度,必须为数据库管理系统中执行队列中有事务完成或有事务被送入提交队列或两者同时发生,该调度方法主要包括步骤:
401、获取提交队列中每个事务中的每条结构化查询语言SQL语句的资源快照。
数据库管理系统对SQL语句进行预编译,即对其进行语法和词法分析。具体操作是找出SQL语句中的操作关键字和操作对象。SQL语句中的操作关键字有4个:选择select、插入insert、删除delete和更新update,其中,除select为读操作外,其余均为写操作。操作对象是指被操作的数据表。
经过上述语法分析和词法分析,可得到SQL语句的资源快照,资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合。资源快照的形式为:其中x代表事务的唯一编号,y代表事务中SQL语句的顺序号,集合{A,B}代表读操作的操作对象为表A和表B的数据,集合{C}代表写操作把数据写入操作对象表C。集合{A,B}为SQL语句的读资源集合,集合{C}为SQL语句的写资源集合。
402、根据资源快照,获取SQL语句的读资源集合和写资源集合。
资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合,系统可根据资源快照获取SQL语句的读资源集合和写资源集合。
403、合并每个事务中的每条SQL语句的读资源集合为每个事务的读资源集合,合并每个事务中的每条SQL语句的写资源集合为每个事务的写资源集合。
数据库管理系统合并所述提交队列中的每个事务中的每条SQL语句的读资源集合为所述提交队列中的每个事务的读资源集合,合并所述提交队列中的每个事务中的每条SQL语句的写资源集合为所述提交队列中的每个事务的写资源集合。
其中,此步骤中获取的提交队列中每个事务的资源集合将于后续步骤中作为判断所述事务与执行队列中事务是否存在依赖关系的依据。
404、去除执行队列中已完成执行的事务。
其中,执行队列中的已完成执行的事务不会再占用CPU资源,也不会对本轮调度产生影响,故去除。
405、获取去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集。
其中,此步骤中获取的所述去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集将于后续步骤中作为判断所述事务与等待队列事务队列中事务是否存在依赖关系的依据。
在本实施例中,所有事务都必定先被提交到数据库管理系统中的提交队列,再经由提交队列被送入其它队列中,而获取事务资源集合的操作在是在本步骤中完成,因此在每一轮调度中,其它队列中的事务的资源集合是已知的,因为在本轮调度之前的调度中,其它队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。所以,等待队列中的事务的资源集合无须重新获取,因为等待队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。
406、将提交队列中的事务送入等待队列。
数据库管理系统将所述提交队列中的事务送入等待队列中,形成新的等待队列,等待队列中的事务等待系统的调度。
407、判断执行队列中所有事务的写资源集合的并集与等待队列中每个事务的读资源集合是否存在交集,若否,则触发执行步骤408,若是,则将等待队列中的事务停留在等待队列中。
408、判断执行队列中所有事务的读资源集合的并集与等待队列中每个事务的写资源集合是否存在交集,若否,则触发执行步骤409,若是,则将等待队列中的事务停留在等待队列中。
409、判断执行队列中所有事务的写资源集合的并集与等待队列中每个事务的写资源集合是否存在交集,若否,则将等待队列中的事务送入准执行队列,若是,则将等待队列中的事务停留在等待队列中。
410、将准执行队列分成可执行队列和不可执行队列,并将不可执行队列中的事务送入等待队列,将可执行队列中的事务发送至CPU。
其中,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
本步骤将准执行队列中的事务分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至CPU的具体方法举例:其中等待队列为P,执行队列为E,准执行队列为Eready,从准执行队列Eready中任意提取一个事务Tx,计算新的准执行队列Eready=Eready-{Tx},将事务Tx送入执行队列E中,计算新的执行队列E=E∪{Tx},并将事务Tx送入可执行队列M中,计算执行队列E中所有事务的读资源集合的并集R和写资源集合的并集W,根据依赖条件,计算准执行队列Eready中所有满足下列条件的事务,构成集合Eready+:准执行队列Eready中事务的读资源集合与执行队列E中所有事务的写资源集合的并集W的交集为空;准执行队列Eready中事务的写资源集合与执行队列E中所有事务的读资源集合的并集R的交集为空;准执行队列Eready中事务的写资源集合与执行队列E中所有事务的写集合的并集W的交集为空。集合Eready+中和事务与执行队列E中的事务之间没有资源冲突。计算集合Eready-=Eready-Eready+,计算新的准执行队列Eready=Eready+,将集合Eready-中的事务送入等待队列P中,计算新的等待队列P=P∪Eready-。然后重复执行上述所有操作步骤,直至准执行队列Eready为空集。
其中,每一轮操作步骤中被送入执行队列E中的事务的集合即为可执行队列,每一轮操作步骤中被送入等待队列P中的事务的集合即为不可执行队列。所述可执行队列中的事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的事务存在依赖关系。
本实施例方法通过获取等待队列的每个事务中每条SQL语句的资源集合,再获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列中的事务分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
本发明第四实施例将对第三实施例中的方法进行详细描述,其中,将所述可执行队列中的事务发送至CPU的步骤将在本实施例中详细描述。本调度方法详细流程请参见图5,进行本轮调度,必须为数据库管理系统中执行队列中有事务完成或有事务被送入提交队列或两者同时发生,该调度方法主要包括步骤:
501、获取提交队列中每个事务中的每条结构化查询语言SQL语句的资源快照。
数据库管理系统对SQL语句进行预编译,即对其进行语法和词法分析。具体操作是找出SQL语句中的操作关键字和操作对象。SQL语句中的操作关键字有4个:选择select、插入insert、删除delete和更新update,其中,除select为读操作外,其余均为写操作。操作对象是指被操作的数据表。
经过上述语法分析和词法分析,可得到SQL语句的资源快照,资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合。资源快照的形式为:其中x代表事务的唯一编号,y代表事务中SQL语句的顺序号,集合{A,B}代表读操作的操作对象为表A和表B的数据,集合{C}代表写操作把数据写入操作对象表C。集合{A,B}为SQL语句的读资源集合,集合{C}为SQL语句的写资源集合。
502、根据资源快照,获取SQL语句的读资源集合和写资源集合。
资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合,系统可根据资源快照获取SQL语句的读资源集合和写资源集合。
503、合并每个事务中的每条SQL语句的读资源集合为每个事务的读资源集合,合并每个事务中的每条SQL语句的写资源集合为每个事务的写资源集合。
数据库管理系统合并所述提交队列中的每个事务中的每条SQL语句的读资源集合为所述提交队列中的每个事务的读资源集合,合并所述提交队列中的每个事务中的每条SQL语句的写资源集合为所述提交队列中的每个事务的写资源集合。
其中,此步骤中获取的提交队列中每个事务的资源集合将于后续步骤中作为判断所述事务与执行队列中事务是否存在依赖关系的依据。
504、去除执行队列中已完成执行的事务。
其中,执行队列中的已完成执行的事务不会再占用CPU资源,也不会对本轮调度产生影响,故去除。
505、获取所述去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集。
其中,此步骤中获取的所述去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集将于后续步骤中作为判断所述事务与等待队列事务队列中事务是否存在依赖关系的依据。
在本实施例中,所有事务都必定先被提交到数据库管理系统中的提交队列,再经由提交队列被送入其它队列中,而获取事务资源集合的操作在是在本步骤中完成,因此在每一轮调度中,其它队列中的事务的资源集合是已知的,因为在本轮调度之前的调度中,其它队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。所以,等待队列中的事务的资源集合无须重新获取,因为等待队列中的事务都曾经作为提交队列中的事务被系统获取过资源集合。
506、将提交队列中的事务送入等待队列。
数据库管理系统将所述提交队列中的事务送入等待队列中,形成新的等待队列,等待队列中的事务等待系统的调度。
507、判断执行队列中所有事务的写资源集合的并集与等待队列中每个事务的读资源集合是否存在交集,若否,则触发执行步骤408,若是,则将等待队列中的事务停留在等待队列中。
508、判断执行队列中所有事务的读资源集合的并集与等待队列中每个事务的写资源集合是否存在交集,若否,则触发执行步骤409,若是,则将等待队列中的事务停留在等待队列中。
509、判断执行队列中所有事务的写资源集合的并集与等待队列中每个事务的写资源集合是否存在交集,若否,则将等待队列中的事务送入准执行队列,若是,则将等待队列中的事务停留在等待队列中。
510、将准执行队列中的事务分成可执行队列和不可执行队列,并将不可执行队列中的事务送入等待队列。
其中,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
511、为可执行队列中的每个事务建立资源前趋图。
事务中的每条SQL语句在资源前趋图中表示为一个节点。若一个事务中有9条SQL语句,依次为E1~E9,任意两条SQL语句:第一SQL语句和第二SQL语句有依赖关系,即第一SQL语句的读资源集合和第二SQL语句的写资源集合的交集不为空,或第一SQL语句的写资源集合和第二SQL语句的读资源集合的交集不为空,或第一SQL语句的写资源集合和第二SQL语句的写资源集合的交集不为空,则在代表第一SQL语句和第二SQL语句的两个节点间画一条有方向的线段,方向为由代表排序较前的SQL语句的节点指向代表排序较后的SQL语句的节点。假设为上述事务建立的资源前趋图如图6。
512、计算资源前趋图的宽度,并根据宽度获取可执行队列中的事务的事务内并行度。
如图6所示的资源前趋图,计算图中入度为0的节点个数,图中只有E1的入度为0,记资源前趋图宽度为max=1;去除入度为0的节点和以这些入度为0的节点为起点的有向线段,保留出度为0的节点,此操作步骤后E1以及以E1为起点的有向线段被去除,此时入度为0的节点个数为3,这三个节点为E2、E3和E4,因为本操作中入度为0的节点个数比上一操作中入度为0的节点的个数大,则记资源前趋图宽度为max=3,否则保持max值不变;去除入度为0的节点和以这些入度为0的节点为起点的有向线段,保留出度为0的节点,此操作步骤后入度为0的节点个数为2,这两个节点为E4和E5,保持max=3不变;去除入度为0的节点和以这些入度为0的节点为起点的有向线段,保留出度为0的节点,此操作步骤后入度为0的节点个数为4,这两个节点为E4、E6、E7和E8,记max=4;去除入度为0的节点和以这些入度为0的节点为起点的有向线段,保留出度为0的节点,此操作步骤后入度为0的节点个数为3,这三个节点为E4、E8和E9,保持max=4不变。所以获取到的所述资源前趋图的宽度为4,其事务内事务并行度为4。
513、根据事务内并行度,按照排序规则对可执行队列中的事务进行排序。
其中,排序规则可能是升序排列、降序排列或者其它有规律的排序规则。
514、根据CPU的计算核数量,按照排序规则对系统中的空闲CPU进行排序。
由于目前数据库管理系统越来越多地使用非对称多处理器,平台中每个CPU的核数是不相同的,因此需要事务内并行度的事务分配到核数多的CPU中执行,以提高平台的执行效率。
其中,排序规则可能是升序排列、降序排列或者其它有规律的排序规则,步骤514中所选择的排序规则必须和步骤513中所选择的排序规则一致。
515、将排序后的可执行队列中的事务依次发送至排序后的CPU中。
将所述排序后的可执行队列中的事务依次发送至所述排序后的CPU中,所述CPU执行所述事务。
本实施例方法通过获取等待队列的每个事务中每条SQL语句的资源集合,再获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列中的事务分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。另外,在非对称处理器平台中使用排序方法将可执行队列中的事务根据事务内并行度进行排序,而多核CPU也用相同的排序方法根据核数进行排序,最后将事务内并行度高的事务分配到核数较多的CPU中执行,将事务内并行度低的事务分配到核数较少的CPU中执行,充分利用CPU资源,提高系统的整体效率。
本发明第五实施例的用于并发事务调度的装置基本结构请参见图7,该装置主要包括:
资源集合获取模块701,新提交的事务被送入提交队列,资源集合获取模块701获取提交队列中每个事务的资源集合。
等待队列管理模块702,资源集合获取模块701获取提交队列中每个事务的资源集合后,等待队列管理模块702将所述提交队列中的事务送入等待队列。
依赖关系判断模块703,根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,若是,则将所述等待队列中的事务停留在等待队列中。
事务分离模块704,接收依赖关系判断模块703送入所述准执行队列中的事务,并将所述事务分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至CPU。
本实施例装置通过获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列中的事务分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。
本发明第六实施例将对第五实施例中的用于并发事务调度的装置进行详细描述,并增加执行队列处理模块和CPU分配模块,所述装置的详细结构请参见图8,该装置主要包括:
资源集合获取模块801,新提交的事务被送入提交队列,资源集合获取模块801获取提交队列中每个事务的资源集合。所述资源集合获取模块801进一步包括:资源快照获取单元8011,接收新提交的事务并送入提交队列,对所述提交队列中每个事务中的每条SQL语句进行预编译,并获取所述SQL语句的资源快照,所述资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合;语句资源集合获取单元8012,根据所述资源快照,获取所述SQL语句的读资源集合和写资源集合;事务资源集合获取单元8013,用于合并所述提交队列中的事务中的每条SQL语句的读资源集合为所述提交队列中的事务的读资源集合,合并所述提交队列中的事务中的每条SQL语句的写资源集合为所述提交队列中的事务的写资源集合。
等待队列管理模块802,资源集合获取模块801获取提交队列中每个事务的资源集合后,等待队列管理模块802将所述提交队列中的事务送入等待队列。
执行队列处理模块803,去除所述执行队列中已完成执行的事务,并获取所述去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集。
依赖关系判断模块804,根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中的事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,若是,则将所述等待队列中的事务停留在等待队列中。所述依赖关系判断模块804进一步包括:第一判断单元8041,判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的读资源集合是否存在交集;第二判断单元8042,判断所述执行队列中所有事务的读资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集;第三判断单元8043,用于判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集。只有第一判断单元8041、第二判断单元8042和第三判断单元8043三者的判断结果同为是时,所述逐一判断所述等待队列中的事务与执行队列中的任一事务是否存在依赖关系的判断结果才为是,否则为否。
事务分离模块805,接收依赖关系判断模块804送入所述准执行队列中的事务,并将所述事务分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至CPU分配模块806。
CPU分配模块806,用于为所述可执行队列中的事务分配CPU。所述CPU分配模块806进一步包括:前趋图建立单元8061,为可执行队列中的每个事务建立资源前趋图;并行度计算单元8062,计算所述资源前趋图的宽度,并根据所述宽度获取所述可执行队列中的事务的事务内并行度;事务排序单元8063,根据所述事务内并行度,按照排序规则对所述可执行队列中的事务进行排序;CPU排序单元8064,根据CPU的计算核数量,按照所述排序规则对系统中的空闲CPU进行排序;CPU分配单元8065,用于将所述排序后的可执行队列中的事务依次发送到所述排序后的CPU中,供CPU执行所述事务。
本实施例装置通过获取等待队列的每个事务中每条SQL语句的资源集合,再获取等待队列中每个事务的资源集合,逐一判断所述等待队列中的事务与执行队列中的任一事务是否存在依赖关系,若否,则将所述等待队列中的事务送入准执行队列,再根据对准执行队列中事务的依赖关系的判断,将所述准执行队列中的事务分成可执行队列和不可执行队列。如此处理后的可执行队列中的事务就是可串行化的,所以将可执行队列中的事务送入CPU中执行就不会出现数据一致性问题,因此不须使用加锁机制,也就避免死锁现象的出现,从而提高了系统整体运行的效率和性能。另外,在非对称处理器平台中将可执行队列中的事务根据事务内并行度进行排序,而多核CPU也用相同的排序规则根据核数进行排序,最后将事务内并行度高的事务分配到核数较多的CPU中执行,将事务内并行度低的事务分配到核数较少的CPU中执行,充分利用CPU资源,提高系统的整体效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种并发事务的调度方法和相关装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种并发事务的调度方法,其特征在于,包括:
获取提交队列中每个事务的资源集合;
所述获取提交队列中每个事务的资源集合包括步骤:
获取提交队列中每个事务中的每条结构化查询语言SQL语句的资源快照,所述资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合;
根据所述资源快照,获取所述SQL语句的读资源集合和写资源集合;
合并所述提交队列中的每个事务中的每条SQL语句的读资源集合为所述提交队列中的每个事务的读资源集合,合并所述提交队列中的每个事务中的每条SQL语句的写资源集合为所述提交队列中的每个事务的写资源集合;
将所述提交队列中的事务送入等待队列;
根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列;
所述根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中的每个事务与执行队列中的任一事务是否存在依赖关系包括步骤:
判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的读资源集合是否存在交集;
和,
判断所述执行队列中所有事务的读资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集;
和,
判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集;
若所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的读资源集合存在交集,所述执行队列中所有事务的读资源集合的并集与所述等待队列中每个事务的写资源集合存在交集,且所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的写资源集合存在交集,则判断结果为所述等待队列中的每个事务与执行队列中的任一事务不存在依赖关系,否则判断结果为所述等待队列中的每个事务与执行队列中的任一事务存在依赖关系;
将所述准执行队列分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至中央处理器CPU,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
2.根据权利要求1所述的方法,其特征在于,
所述资源集合包括读资源集合和写资源集合,所述读资源集合为所述提交队列中的事务中读操作的操作对象的集合,所述写资源集合为所述提交队列中的事务中写操作的操作对象的集合。
3.根据权利要求1或2所述的方法,其特征在于,所述获取提交队列中每个事务的资源集合之后进一步包括步骤:
去除执行队列中已完成执行的事务;
获取去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集。
4.根据权利要求1或2所述的方法,其特征在于,所述将所述可执行队列中的事务发送至CPU包括步骤:
为可执行队列中的每个事务建立资源前趋图;
计算所述资源前趋图的宽度,并根据所述宽度获取所述可执行队列中的事务的事务内并行度;
根据所述事务内并行度,按照排序规则对所述可执行队列中的事务进行排序;
根据CPU的计算核数量,按照所述排序规则对系统中的空闲CPU进行排序;
将排序后的可执行队列中的事务依次发送至排序后的CPU中。
5.一种用于并发事务调度的装置,其特征在于,包括:
资源集合获取模块,用于获取提交队列中每个事务的资源集合;
所述资源集合获取模块包括:
预编译单元,用于对所述提交队列中每个事务中的每条结构化查询语言SQL语句进行预编译,并获取所述SQL语句的资源快照,所述资源快照用于指示所述提交队列的事务中的SQL语句的读资源集合和写资源集合;
语句资源集合获取单元,用于根据所述资源快照,获取所述SQL语句的读资源集合和写资源集合;
事务资源集合获取单元,用于合并所述提交队列中的事务中的每条SQL语句的读资源集合为所述提交队列中的事务的读资源集合,合并所述提交队列中的事务中的每条SQL语句的写资源集合为所述提交队列中的事务的写资源集合;
等待队列管理模块,用于将所述提交队列中的事务送入等待队列;
依赖关系判断模块,用于根据所述等待队列中每个事务的资源集合,逐一判断所述等待队列中每个事务与执行队列中的任一事务是否存在依赖关系,若否,则将与执行队列中的任一事务无依赖关系的等待队列中的事务送入准执行队列;
所述依赖关系判断模块包括:
第一判断单元,用于判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的读资源集合是否存在交集;
第二判断单元,用于判断所述执行队列中所有事务的读资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集;
第三判断单元,用于判断所述执行队列中所有事务的写资源集合的并集与所述等待队列中每个事务的写资源集合是否存在交集;
事务分离模块,用于将所述准执行队列分成可执行队列和不可执行队列,并将所述不可执行队列中的事务送入所述等待队列,将所述可执行队列中的事务发送至中央处理器CPU,所述可执行队列中的两两事务之间不存在依赖关系,所述不可执行队列中的事务与所述可执行队列中的至少一个事务存在依赖关系。
6.根据权利要求5所述的装置,其特征在于,所述装置进一步包括:
执行队列处理模块,用于去除所述执行队列中已完成执行的事务,并获取去除已完成执行的事务的执行队列中所有事务的读资源集合的并集和写资源集合的并集。
7.根据权利要求5或6所述的装置,其特征在于,所述装置进一步包括:CPU分配模块,用于为所述可执行队列中的事务分配CPU,
所述CPU分配模块包括:
前趋图建立单元,用于为可执行队列中的每个事务建立资源前趋图;
并行度计算单元,用于计算所述资源前趋图的宽度,并根据所述宽度获取所述可执行队列中的事务的事务内并行度;
事务排序单元,用于根据所述事务内并行度,按照排序规则对所述可执行队列中的事务进行排序;
CPU排序单元,用于根据CPU的计算核数量,按照所述排序规则对系统中的空闲CPU进行排序;
CPU分配单元,用于将排序后的可执行队列中的事务依次发送到排序后的CPU中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110281872A CN102354289B (zh) | 2011-09-21 | 2011-09-21 | 一种并发事务的调度方法和相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110281872A CN102354289B (zh) | 2011-09-21 | 2011-09-21 | 一种并发事务的调度方法和相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102354289A CN102354289A (zh) | 2012-02-15 |
CN102354289B true CN102354289B (zh) | 2012-10-10 |
Family
ID=45577856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110281872A Expired - Fee Related CN102354289B (zh) | 2011-09-21 | 2011-09-21 | 一种并发事务的调度方法和相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102354289B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306205A (zh) * | 2011-09-30 | 2012-01-04 | 苏州大学 | 一种事务分配方法和装置 |
CN103631831B (zh) * | 2012-08-29 | 2016-12-21 | 阿里巴巴集团控股有限公司 | 一种数据备份方法及装置 |
CN104064489B (zh) * | 2013-03-22 | 2016-10-05 | 上海和辉光电有限公司 | 自动机械调度方法、装置及ela机台制备控制系统 |
CN104182295B (zh) * | 2013-05-27 | 2018-11-02 | 阿里巴巴集团控股有限公司 | 一种数据备份方法及装置 |
CN103473130B (zh) * | 2013-09-23 | 2016-07-06 | 扬州大学 | 一种基于随机进程代数的并发系统死锁检测方法 |
US11226985B2 (en) | 2015-12-15 | 2022-01-18 | Microsoft Technology Licensing, Llc | Replication of structured data records among partitioned data storage spaces |
US10235406B2 (en) * | 2015-12-15 | 2019-03-19 | Microsoft Technology Licensing, Llc | Reminder processing of structured data records among partitioned data storage spaces |
CN107844370B (zh) * | 2016-09-19 | 2020-04-17 | 杭州海康威视数字技术股份有限公司 | 一种实时任务调度方法及装置 |
CN110399378A (zh) * | 2018-04-17 | 2019-11-01 | 北京京东尚科信息技术有限公司 | 数据库系统锁操作分析方法及装置 |
CN111694675B (zh) | 2019-03-15 | 2022-03-08 | 上海商汤智能科技有限公司 | 任务调度方法及装置、存储介质 |
CN110147268B (zh) * | 2019-04-16 | 2020-05-08 | 清华大学无锡应用技术研究院 | 处理并发事务的方法、装置、并发控制系统及存储介质 |
CN110109936B (zh) * | 2019-05-13 | 2020-12-25 | 四川新网银行股份有限公司 | 一种规避数据库锁等待以及事务合并提交的方法 |
CN112395307A (zh) * | 2019-08-16 | 2021-02-23 | 华为技术有限公司 | 执行语句的方法、装置、服务器及存储介质 |
CN111444027B (zh) * | 2020-03-24 | 2022-11-18 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112231071B (zh) | 2020-05-20 | 2021-06-18 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111880908A (zh) * | 2020-06-28 | 2020-11-03 | 北京沃东天骏信息技术有限公司 | 分布式事务的处理方法、装置及存储介质 |
CN113132265B (zh) * | 2021-04-16 | 2022-05-10 | 武汉光迅信息技术有限公司 | 一种多路以太网的多级调度方法和装置 |
CN115629822B (zh) * | 2022-11-09 | 2023-07-25 | 深圳计算科学研究院 | 一种基于多核处理器的并发事务处理方法及其系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6681241B1 (en) * | 1999-08-12 | 2004-01-20 | International Business Machines Corporation | Resource contention monitoring employing time-ordered entries in a blocking queue and waiting queue |
US8286196B2 (en) * | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8204865B2 (en) * | 2009-08-26 | 2012-06-19 | Oracle International Corporation | Logical conflict detection |
CN101996105A (zh) * | 2010-07-09 | 2011-03-30 | 中国科学技术大学苏州研究院 | 可重构计算平台上的静态软硬件任务划分与调度方法 |
CN102156735B (zh) * | 2011-04-11 | 2012-12-26 | 中国有色矿业集团有限公司 | 一种基于数据库事务处理的业务方法执行方法及装置 |
-
2011
- 2011-09-21 CN CN201110281872A patent/CN102354289B/zh not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
李春喜,赵雷.一种改进的增量挖掘算法.《计算机工程》.2010,第36卷(第24期),42-44. * |
李榕,赵雷等.一种应用级数据库入侵检测方法.《计算机应用与软件》.2010,第27卷(第4期),280-282,285. * |
Also Published As
Publication number | Publication date |
---|---|
CN102354289A (zh) | 2012-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102354289B (zh) | 一种并发事务的调度方法和相关装置 | |
Nykiel et al. | MRShare: sharing across multiple queries in MapReduce | |
US8285709B2 (en) | High-concurrency query operator and method | |
JP4571609B2 (ja) | リソース割当方法、リソース割当プログラム、および、管理コンピュータ | |
Mahmoud et al. | Maat: Effective and scalable coordination of distributed transactions in the cloud | |
CN102306205A (zh) | 一种事务分配方法和装置 | |
WO2012060889A1 (en) | Systems and methods for grouped request execution | |
US20170193077A1 (en) | Load balancing for large in-memory databases | |
US20100042631A1 (en) | Method for partitioning a query | |
CN104111936A (zh) | 数据查询方法和系统 | |
CN112579586A (zh) | 数据处理方法、装置、设备及存储介质 | |
US11163792B2 (en) | Work assignment in parallelized database synchronization | |
Wang et al. | Elastic pipelining in an in-memory database cluster | |
Fujiki et al. | Near-memory data transformation for efficient sparse matrix multi-vector multiplication | |
US10802831B2 (en) | Managing parallel processing | |
Chen et al. | Plor: General transactions with predictable, low tail latency | |
US8667008B2 (en) | Search request control apparatus and search request control method | |
JP2009037369A (ja) | データベースサーバへのリソース割当て方法 | |
US8046394B1 (en) | Dynamic partitioning for an ordered analytic function | |
US7392359B2 (en) | Non-blocking distinct grouping of database entries with overflow | |
CN108932258B (zh) | 数据索引处理方法及装置 | |
CN110537174B (zh) | 一种基于交替行锁和列锁的数据锁定方法 | |
CN115438025A (zh) | 数据处理方法及装置 | |
He et al. | Handling data skew for aggregation in spark SQL using task stealing | |
CN116204546A (zh) | Sql预编译方法、装置、服务器和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121010 Termination date: 20170921 |
|
CF01 | Termination of patent right due to non-payment of annual fee |