CN107545015A - 一种查询故障的处理方法及处理装置 - Google Patents
一种查询故障的处理方法及处理装置 Download PDFInfo
- Publication number
- CN107545015A CN107545015A CN201610505556.5A CN201610505556A CN107545015A CN 107545015 A CN107545015 A CN 107545015A CN 201610505556 A CN201610505556 A CN 201610505556A CN 107545015 A CN107545015 A CN 107545015A
- Authority
- CN
- China
- Prior art keywords
- operator
- failure
- query
- plan tree
- information
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
- G06F11/1451—Management of the data involved in backup or backup restore by selection of backup contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1474—Saving, restoring, recovering or retrying in transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种查询故障的处理方法,包括:接收查询语句,并生成对应的查询计划树,该查询计划树包括流水线关系的多层算子,其中,每个算子都包含由逻辑操作所构成的逻辑关系;根据查询计划树执行查询语句;当执行查询语句的过程中出现故障时,则调取故障算子的中间状态信息,中间状态信息是在执行故障发生之前的备份时间点备份的,根据查询计划树和故障算子的中间状态信息,更新故障算子的操作符以及操作符之间的逻辑关系,以得到重构的查询计划树;当故障恢复后,根据重构的查询计划树,续跑查询语句,以得到查询语句的查询结果。本发明实施例可以保障在故障恢复后,继续执行当前的查询语句,从而减少查询中断对整个查询流程的影响。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种查询故障的处理方法及处理装置。
背景技术
数据库***是整个软件大厦中最具挑战也是最为核心的部分,一个完整的数据库***通常由数据库(Database)和数据库管理***(Database Management System,DBMS)两部分组成。随着大数据时代的到来,数据库中通常都需要存储海量的数据,用户通过数据库管理***来查询数据库中的数据。为了满足不同用户在不同环境下对于查询业务的需求,需要数据库***具有很强的健壮性,以保障查询业务的正常进行。而事实上,由于业务环境的复杂性及影响数据库稳定因素的多样性,数据库***出现故障的可能性始终存在。
针对一些复杂度较高,查询时间较长的查询业务,数据库***故障会导致查询业务中断,而随之而来的作业重跑将会严重影响整个业务的进度。作业重跑即从头开始的重新查询。特别的,对于需要保障业务准时结束并用于市场分析的企业来说,进度的延迟将带来灾难性的影响。
发明内容
为了解决现有技术中查询故障影响整个查询业务流程的问题,本发明实施例提供一种查询故障的处理方法,可以保障在数据库***故障恢复后,可以继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。本发明实施例还提供了相应的处理装置。
本发明第一方面提供一种查询故障的处理方法,应用于数据库管理***,该数据库管理***可以由数据库服务器来实现,该数据库服务器与数据库的外部存储装置通过通信网络通信,该数据库管理***在执行查询语句时,若出现查询故障,则查询故障的处理方法包括:接收查询语句,并生成该查询语句对应的查询计划树,查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及所述操作符之间的逻辑关系;根据查询计划树执行查询语句;当执行查询语句的过程中出现故障时,则调取故障算子的中间状态信息,中间状态信息是在执行故障发生之前的备份时间点备份的,且中间状态信息包括故障算子在备份时间点已完成的操作和未完成的操作,故障算子为执行故障发生时正在执行查询语句的算子;根据查询计划树和故障算子的中间状态信息,更新故障算子的操作符以及操作符之间的逻辑关系,以得到重构的查询计划树;当故障恢复后,根据重构的查询计划树,续跑查询语句,以得到查询语句的查询结果。本发明实施例中所描述的查询故障可以包括执行节点故障,机器故障和网络异常中断等。从上述第一方面可以看出,通过故障算子的中间状态信息重构查询计划树,可以保障在数据库***故障恢复后,可以继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。
结合第一方面,在第一种可能的实现方式中,查询故障的处理方法还包括:基于故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息。本发明实施例中所涉及的代价可以理解为是资源消耗量,如:处理器代价指的是处理器的占用量,页面读取代价指的是进行业务读取所消耗的资源量。从上述第一方面第一种可能的实现方式中可以看出,是否备份故障算子的中间状态信息是基于备份代价的,代价小才会备份,这样不仅可以实现作业续跑,还可以节省硬件资源。
结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,周期性执行第一种可能的实现方式中选择性备份的步骤。
结合第一方面第一种可能或第二种的实现方式,在第三种可能的实现方式中,上述第一种可能的实现方式中的步骤:基于故障算子的中间状态的备份代价,选择性备份故障算子的中间状态信息,包括:当确定出故障算子续跑所节省的代价大于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时,则备份故障算子的中间状态信息。从上述第一方面第三种可能的实现方式中可以看出,只有当续跑所节省的代价大于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时才会备份该故障算子的中间状态信息,这样可以充分节省硬件资源。
结合第一方面第一种可能或第二种的实现方式,在第四种可能的实现方式中,上述第一种可能的实现方式中的步骤:基于故障算子的中间状态的备份代价,选择性备份故障算子的中间状态信息,包括:当确定出故障算子续跑的代价小于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时,则备份故障算子的中间状态信息。从上述第一方面第四种可能的实现方式中可以看出,只有当续跑的代价小于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时才会备份该故障算子的中间状态信息,这样可以充分节省硬件资源。
结合第一方面、第一方面第一种或第二种可能的实现方式,在第五种可能的实现方式中,第一方面中的步骤:根据查询计划树和故障算子的中间状态信息,更新故障算子的操作符以及操作符之间的逻辑关系,以得到重构的查询计划树,包括:递归处理未完成的操作和已完成的操作,以得到故障算子的重构信息,所述重构信息包括重构操作符以及所述重构操作符之间的逻辑关系;根据重构信息,更新查询计划树的故障算子中与重构信息对应的原始信息,以得到所述重构的查询计划树,所述原始信息包括原始操作符以及所述原始操作符之间的逻辑关系。从上述第一方面第五种可能的实现方式中可以看出,通过操作符级别的操作符之间的逻辑关系修改完成查询计划树的重构,可以提高重构的效率和准确度。
结合第一方面第五种可能的实现方式,在第六种可能的实现方式中,上述第五种可能的实现方式中的步骤:递归处理未完成的操作和已完成的操作,以得到所述故障算子的重构信息,包括:对已完成操作设置已完结操作符,并在未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到重构操作符以及重构操作符之间的逻辑关系。从上述第一方面第六种可能的实现方式中可以看出,通过操作符级别的操作符之间的逻辑关系修改完成查询计划树的重构,可以提高重构的效率和准确度。
结合第一方面第三种可能的实现方式,在第七种可能的实现方式中,查询故障的处理方法还包括:当确定出续跑所节省的代价小于所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。从上述第一方面第七种可能的实现方式中可以看出,当不节省代价时,直接记录查询语句,从而避免不必要的资源消耗。
结合第一方面第四种可能的实现方式,在第八种可能的实现方式中,查询故障的处理方法还包括:当确定出续跑的代价大于所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。从上述第一方面第八种可能的实现方式中可以看出,当不节省代价时,直接记录查询语句,从而避免不必要的资源消耗。
结合第一方面、第一方面第一种、第二种或第三种可能的实现方式,在第九种可能的实现方式中,查询故障的处理方法还包括:当生成查询计划树时出现故障,则记录查询语句,查询语句用于在查询故障恢复后,重新生成查询计划树。从上述第一方面第九种可能的实现方式中可以看出,在生成查询计划树阶段出现查询故障,直接记录查询语句,从而避免不必要的资源消耗。
本发明第二方面提供一种查询故障的处理装置,该处理装置被配置实现上述第一方面或第一方面任一可选的实现方式所提供的方法的功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的单元。
本发明第三方面提供一种查询故障处理的装置,包括:收发器、处理器和存储器,存储器用于备份故障算子的中间状态信息;收发器用于接收查询语句;处理器用于执行如下步骤:生成该查询语句对应的查询计划树,查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及操作符之间的逻辑关系;根据查询计划树执行查询语句;当执行查询语句的过程中出现故障时,则调取故障算子的中间状态信息,中间状态信息是在执行故障发生之前的备份时间点备份的,且中间状态信息包括故障算子在备份时间点已完成的操作和未完成的操作,故障算子为执行故障发生时正在执行查询语句的算子;根据查询计划树和故障算子的中间状态信息,更新故障算子的操作符以及操作符之间的逻辑关系,以得到重构的查询计划树;当故障恢复后,根据重构的查询计划树,续跑查询语句,以得到查询语句的查询结果。从上述描述可以看出,通过故障算子的中间状态信息重构查询计划树,可以保障在数据库***故障恢复后,可以继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。从上述第三方面可以看出,通过故障算子的中间状态信息重构查询计划树,可以保障在数据库***故障恢复后,可以继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。
结合第三方面,在第一种可能的实现方式中,该查询故障的处理装置中,处理器还用于基于故障算子的中间状态的备份代价,选择性备份故障算子的中间状态信息。从上述第三方面第一种可能的实现方式中可以看出,是否备份故障算子的中间状态信息是基于备份代价的,代价小才会备份,这样不仅可以实现作业续跑,还可以节省硬件资源。
结合第三方面第一种可能的实现方式,在第二种可能的实现方式中,处理器具体用于:周期性执行选择性备份的步骤。
结合第三方面第一种可能或第二种的实现方式,在第三种可能的实现方式中,处理器具体用于:当确定出故障算子续跑所节省的代价大于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时,则备份故障算子的中间状态信息。从上述第三方面第三种可能的实现方式中可以看出,只有当续跑所节省的代价大于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时才会备份该故障算子的中间状态信息,这样可以充分节省硬件资源。
结合第一方面第一种可能或第二种的实现方式,在第四种可能的实现方式中,处理器具体用于:当确定出故障算子续跑的代价小于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时,则备份故障算子的中间状态信息。从上述第三方面第四种可能的实现方式中可以看出,只有当续跑的代价小于备份故障算子已完成的操作和恢复故障算子未完成的操作所需要的代价之和时才会备份该故障算子的中间状态信息,这样可以充分节省硬件资源。
结合第三方面、第三方面第一种或第二种可能的实现方式,在第五种可能的实现方式中,处理器具体用于:递归处理未完成的操作和已完成的操作,以得到故障算子的重构信息,重构信息包括重构操作符以及重构操作符之间的逻辑关系;根据重构信息,更新查询计划树的故障算子中与重构信息对应的原始信息,以得到重构的查询计划树,原始信息包括原始操作符以及原始操作符之间的逻辑关系。从上述第三方面第五种可能的实现方式中可以看出,通过操作符级别的操作符之间的逻辑关系修改完成查询计划树的重构,可以提高重构的效率和准确度。
结合第三方面第五种可能的实现方式,在第六种可能的实现方式中,处理器具体用于:对已完成操作设置已完结操作符,并在未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到重构操作符以及重构操作符之间的逻辑关系。从上述第三方面第六种可能的实现方式中可以看出,通过操作符级别的操作符之间的逻辑关系修改完成查询计划树的重构,可以提高重构的效率和准确度。
结合第三方面第三种可能的实现方式,在第七种可能的实现方式中,处理器还用于当确定出续跑所节省的代价小于所需要的代价之和时,则记录查询语句,查询语句用于在查询故障恢复后,重新生成查询计划树。从上述第三方面第七种可能的实现方式中可以看出,当不节省代价时,直接记录查询语句,从而避免不必要的资源消耗。
结合第三方面第四种可能的实现方式,在第八种可能的实现方式中,处理器还用于当确定出续跑的代价大于所需要的代价之和时,则记录查询语句,查询语句用于在查询故障恢复后,重新生成查询计划树。从上述第三方面第八种可能的实现方式中可以看出,当不节省代价时,直接记录查询语句,从而避免不必要的资源消耗。
结合第三方面、第三方面第一种、第二种或第三种可能的实现方式,在第九种可能的实现方式中,处理器还用于当生成查询计划树时出现故障,则记录查询语句,查询语句用于在查询故障恢复后,重新生成查询计划树。从上述第三方面第九种可能的实现方式中可以看出,在生成查询计划树阶段出现查询故障,直接记录查询语句,从而避免不必要的资源消耗。
本发明第四方面提供一种计算机存储介质,该计算机存储介质存储有上述第一方面或第一方面任一可选的实现方式的查询故障的处理程序。
本发明第五方面提供一种数据库管理***,包括:查询故障的处理装置和外部存储装置,所述终端设备为上述第二方面或第三方面的处理装置。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中数据库管理***所处的硬件环境一结构示意图;
图2A是本发明实施例中查询计划树的一示例示意图;
图2B是本发明实施例中结合数据表的数据库操作示例示意图;
图2C是本发明实施例中示例场景的查询结果;
图3是数据库管理***的简图;
图4是本发明实施例中查询计划树的一种表现形式示意图;
图5是本发明实施例中查询故障处理过程的一实施例示意图;
图6是本发明实施例中查询故障处理过程的另一实施例示意图;
图7是本发明实施例中查询故障的处理方法的一实施例示意图;
图8是是本发明实施例中服务器的一实施例示意图。
具体实施方式
本发明实施例提供一种查询故障的处理方法,可以保障在故障恢复后,可以继续执行当前的查询语句,节省查询时间。本发明实施例还提供了相应的装置。以下分别进行详细说明。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中的查询故障的处理方法可以在如图1所示的数据库服务器1中实现,数据库服务器1具有存储器,例如:内存和硬盘等,用于存储数据和计算机可执行程序;数据库服务器1还包括至少一个处理器,例如:中央处理器(Central Processing Unit,CPU)能够从存储器读取计算机可执行程序,并执行程序。数据库服务器1上运行有操作***15,数据库管理***(Database Management System,DBMS)5,以及应用程序(APP)3。其中,操作***(Operating System,OS)15,数据库管理***5,和应用程序可以以可执行代码的形式存储在存储器中,被处理器执行后实现相应的功能。APP3根据用户的操作或者***触发,生成查询语句,该查询语句可以是例如:结构化查询语言(Structured QueryLanguage,SQL)。数据库管理***5用于从APP 3接收查询语句,执行查询语句并返回查询结果到APP3和操作***15,该操作***例如可以是Linux。操作***15用于管理数据库服务器1的硬件与软件资源,并向上层的数据库管理***5和APP 3提供接口,数据库管理***5和APP 3可以通过该接口调用相应的硬件资源。
进一步的,如图1所示,数据库服务器1和外部存储装置19经由通信网络17通信连接。
外部存储装置19可以是任何具有存储资源的装置。例如,外部存储装置19可以是文件服务器,单个磁盘驱动器(例如,硬盘驱动器),或具有多个磁盘驱动器的存储***。外部存储装置中的数据库21能够存储多个索引25和多个表23。每个索引25的数据包括,例如,图2A和图2B所示出的排列项索引25A和顺序索引25B。每个表23的数据包括,例如,图2B所示的部分表23A,排列项(LINEITEM)表23B和顺序(ORDER)表23C,每个表都包括多个行,每行由多个行元素组成。索引用于建立一个表与另一个表的联系。例如:图2B所示出的排列项索引25A用于建立部分表与排列项表的联系,顺序索引25B用于建立排列项表与顺序表的联系。
如图1所示,DBMS 5包括一个查询接口7、查询计划树发生器11、查询执行器9、查询的任务管理器13和数据库缓冲器(DB缓冲器)12。其中,查询接口7用于接收来自APP3的查询语句,查询计划树发生器11用于产生诸如图2A所示的查询计划树。查询执行器9用于根据查询计划树执行查询语句。任务管理器13用于管理查询语句。DB缓冲器12属于存储资源,可以缓存查询执行器9执行任务时所需的数据。
下面以图2A和图2B的数据为例,介绍DBMS5执行查询语句,并输出图2C所示的查询结果的过程。
DBMS5从应用程序(例如,APP3)接收查询语句并生成图2A所示的查询计划树。如图2A所示,查询计划树包括流水线关系的五层算子,从最底层到最上层分别为算子1、算子2、算子P3、算子4和算子5,表示这五层算子以流水线的方式依次执行。在图2A所示的示例中,每层算子都包括一个算子,但该示例只是一个特例,实际上,在不同示例场景中,每层算子可以包括一个或多个算子。在本发明实施例中,查询计划树中每层的操作逻辑用一个或多个算子来描述,在其他场景中查询计划树的操作逻辑还可能用操作(Operation,OP)来描述,也可能用节点来描述。但无论用什么来描述,都不应对本发明实施例的理解造成限定。进一步的,因为单个操作符通常不具有逻辑意义,所以算子通常都包含多个操作符以及这些操作符之间的逻辑关系。以算子3为例,该算子3中包括数据提取操作和对象标识符过滤操作,以及数据提取操作和对象标识符过滤操作之间的逻辑关系。其中,数据提取操作和对象标识符过滤操作都需要由多个操作符和操作符之间的逻辑关系组成。算子1中也包含了行查找操作和读取数据操作,以及行查找操作和读取数据操作之间的逻辑关系。而且,行查找操作和读取数据操作都可能需要由多个操作符和操作符之间的逻辑关系组成。其中,图2A中,算子1中包括一个部分表23A,算子3中包括一个排列项(LINEITEM)表23B,算子5中包括一个顺序(ORDER)表23C,算子2中包括排列项索引25A,算子4中包括一个顺序索引25B。其中,部分表23A,排列项表23B和顺序表23C的示例如图2B所示。排列项索引25A和顺序索引25B可以存储在例如图1所示的外部存储装置19中。
根据图2A所示出的查询计划树。图2A所示的算子1至算子5中被查询执行器9依次执行,直至部分表23A中的所有行被读出。
结合图2A和图2B的算子,执行算子1的过程中通过行查找锁定要读出的行,然后通过从部分表23A读出一个行,例如,读出第二行,名称为BX01,产品(Product)标识PID=301。执行算子2的过程中,从算子1输出的行数据中确定索引PID,例如PID=301,然后使用LINEITEM索引25A的操作,索引到排列项表中相应的行。执行算子3的过程中利用索引PID搜索LINEITEM表23B中相应的数据。当执行算子1读出的是第二行时,则在执行算子2时确定索引PID=301,执行算子3从LINEITEM表23B中读出相应的PID=301的行,然后使用行标识(ROW identifier,OID)执行过滤,例如,仅输出具有OID小于504行,因为在LINEITEM表23B中PID=301的行有两个,对应的OID分别为500和503,则这两个行都可以输出。执行算子4就是执行顺序索引操作,也就是根据执行算子3确定的行,确定索引OID,例如:依照上述描述,确定出的索引为OID=500和OID=503,然后通过索引OID索引到顺序表中相应的行。执行算子5的过程中使用OID搜索ORDER表23C中对应的OID,找到ORDER表23C中对应的行。则使用OID=500和OID=503可以确定ORDER表23C中对应的两行数据。
执行完上述操作后,可以再返回到算子1,读取部分表中的下一行,然后再依次执行上述算子1至算子5的相应操作,直到部分表中的每一行都被读出,最后输出图2C所示出的查询结果。
在图2A至图2C的实施例中,通过查询执行器9执行算子的任务。如果有必要在任务执行期间读取外部存储装置19的数据时,查询执行器9会读出该数据,执行算子任务。
下面再以图3和图4为例,介绍在数据库管理***在正常状态下执行查询语句的过程,图3所示的数据库管理***5,只示出了一些关键模块,其他未示出的模块功能可以参阅图1部分进行理解。
如图3所示,数据库管理***可以包括查询接口7、查询计划发生器11和查询执行器9,查询接口7接收到查询语句后,查询计划发生器11会根据获取的查询语句,生成查询计划树,所述查询计划树包括流水线关系的多层算子,各层算子之间按照流水线的方式顺序执行,且上层算子的输入依赖有直接流向关系的相邻下层算子的输出。
该查询语句可以是结构化查询语言(Structured Query Language,SQL)语句。需要说明的是,对于一些复杂度较高,查询执行时间较长的查询语句,在本发明所有实施例中统一称为大查询,如大的选择查询、数据重分布和大的更新查询等。实际上,查询语句与查询任务是对应的,查询任务通常是面向用户的表达方式,查询语句是与该查询任务对应的机器语言。
查询计划树还可以参照图4的表示方式进行理解,1层算子为最下层的算子,2层算子的输入依赖1层算子的输出,3层算子的输入依赖2层算子的输出,4层算子的输入依赖3层算子的输出,在图2所示的示例中,4层算子为最上层的算子。其中,1层的1号算子和2号算子与2层的5号算子有直接流向关系,2层5号算子和6号算子与3层的8号算子有直接流向关系,3层的8号算子和9号算子与4层的10号算子有直接流向关系。其他算子间的流向关系可以参阅图4和前述的示例性描述进行理解,在此不再一一赘述。
图4所示出的只是查询计划树的一种表示方式,实际上,查询计划树的表示方式可以有很多种,不应将图4理解为是对查询计划树表示方式的限定。
查询执行器9会根据查询计划发生器11生成的查询计划树依次完成每个算子的功能,最终完成该查询语句,得到查询结果,并将该查询结果反馈给用户。
以上实施例所描述的是正常的查询语句执行过程,实际上,对于数据库管理***中的查询业务,尤其是大查询业务,整个查询过程中会有很多算子互相配合着以流水线式工作,有下层算子的输入才会产生上层算子的输出。因此,当查询在一个算子处中断时,很有可能该算子已经完成了部分的业务。虽然该算子出现故障,但下层算子仍在不断的输入。造成下层算子在故障后输入的数据丢失,无法追溯,从而导致很难根据中断时候的状态进行作业续跑。作业续跑是指从查询中断时已经完成的查询位置继续完成后续的查询语句。若针对一个查询语句,在故障恢复后,无法实现作业续跑,只能依靠作业重跑来完成查询语句。作业重跑必然会增加查询作业的时间,因此,解决此类问题的关键在于是否可以利用已经完成的工作来继续执行这个大查询。
在数据库管理***执行查询业务时,按照***类型的不同,可以包括非流水线的查询方式和流水线的查询方式,甲骨文(Oracle)***和SQL Server***都属于流水线的查询方式。
Oracle和SQL Server等数据库在执行查询语句时是按照流水线去执行的,即上层算子的输出依赖于下层算子的输入,由于流水线的执行方式很难存储每个算子在每个时刻的状态信息,所以这种执行方式上的差异性导致了Oracle和SQL Server这种流水线的***难以解决查询的可继续执行问题。
本发明实施例中,所涉及到的出现故障的时刻主要包括两种。
第一种是查询执行器9执行过程中出现故障。
第二种是可以在查询计划发生器11生成查询计划树时出现故障,该种情况包括查询计划树已经生成。
下面针对第一种故障出现的时刻,结合图5介绍本发明实施例在查询执行器9执行各算子功能时出现故障的查询故障的处理方法。
图5为本发明实施例中查询故障处理的一实施例示意图。图5所示的数据块管理***5为简图,只画出了一些关键模块,其他未示出的模块功能可以参阅图1部分进行理解。
如图5所示,本发明实施例提供的查询故障的处理方法的一实施例包括:
数据库管理***可以包括查询接口7、查询计划发生器11、查询执行器9、决策模块8和重构模块10。
查询接口7接收到查询语句后,将查询语句传递给查询计划发生器11,查询计划发生器11会根据查询语句,生成查询计划树,所述查询计划树包括流水线关系的多层算子,也就是,上层算子的输入依赖有直接流向关系的相邻下层算子的输出,其中,每层至少包括一个算子,每个算子都包含由逻辑操作符以及所述操作符之间的逻辑关系。查询计划树可以参照图4的表示方式进行理解。
查询执行器9会根据查询计划发生器11生成的查询计划树,从数据库中获取数据依次完成各算子的功能,在执行各算子功能的过程中,查询执行器9会周期性的将各算子的中间状态信息备份到数据库中,以便于数据库管理***发生故障时,不会造成中间状态信息丢失。
当正在执行某个算子的功能时,会在备份时间点备份该算子的中间状态信息,该中间状态信息包括存储时该算子中已完成的操作和未完成的操作。备份可以是周期性备份。
当在执行该算子功能过程中,出现查询故障,则该算子成为故障算子,也就是说当所述查询语句执行到所述多层算子中的故障算子处出现查询故障,则调取故障算子的中间状态信息,所述中间状态信息是在所述执行故障发生之前的备份时间点备份的,且所述中间状态信息包括所述故障算子在所述备份时间点已完成的操作和未完成的操作,所述故障算子为所述执行故障发生时正在执行所述查询语句的算子。
例如:执行图4所示的5号算子时,则可以备份5号算子中间状态信息,当5号算子还未执行完时出现查询故障,则可以调取该5号算子在故障发生之前的备份时间点备份的中间状态信息,所述中间状态信息包括在所述备份时间点5号算子中已完成的操作和未完成的操作。
在本发明实施例中,查询执行器9周期性备份故障算子的中间状态信息,然后由重构模块10根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树。
当所述故障恢复后,根据所述重构的查询计划树,续跑所述查询语句,以得到所述查询语句的查询结果。
这种查询故障的处理方法,可以在出现故障时,根据出现故障处算子的中间状态信息,重构查询计划树,在故障恢复后,可以根据该重构的查询计划树实现查询语句的续跑,也就是从故障发生处继续执行当前的查询语句,从而节省了查询时间。
进一步地,通过测试发现,并不一定每次保存算子的中间状态信息都会有收益的。因此,本发明实施例进一步提出了代价决策方案,也就是,针对正在执行的每个算子,基于算子的中间状态的备份代价,选择性备份算子的中间状态信息。
可以理解为由图5中的决策模块8来执行,也就是说,在查询执行器9执行算子功能的过程中到达备份时间点时,则确定所述故障算子续跑所节省的代价是否大于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和;当确定出所述故障算子续跑所节省的代价大于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。另外,还可以是确定所述故障算子续跑的代价是否小于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和;当确定出所述故障算子续跑的代价小于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。这样,通过决策模块8决策后,再备份中间状态信息,重构所述查询计划树,得到重构的查询计划树。不仅可以实现作业续跑,节省查询时间,还可以节省硬件资源。
本发明实施例中所涉及的代价可以理解为是资源消耗量,如:处理器代价指的是处理器的占用量,页面读取代价指的是进行业务读取所消耗的资源量。
本发明实施例中所描述的查询故障可以包括执行节点故障,机器故障和网络异常中断等。
当决策模块8确定出续跑所节省的代价小于所述所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。
还可以是,当决策模块8确定出续跑的代价大于所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。
完成上述核心思想的关键技术就是在流水线执行框架下进行基于代价的中间状态信息备份。为了细化代价估算,首先针对算子采用操作符级别隔离的代价计算。例如,当5号算子为Hash Join算子时,该Hash Join算子中包含了两部分操作:第一部分是对获取得到的右表进行构建(build)操作,第二部分是对获取得到的左表进行探测(probe)操作。这样就需要得到每个操作符对应的代价。其次还可以参照查询计划发生器11在生成查询计划树时所提供的基本代价,如中央处理器(Central Processing Unit,CPU)代价和页面读取代价等计算存储当前状态所需要的代价,存储所需的代价主要为写状态所需的代价。再者,依据当前执行状态,估算当前故障算子进行续跑所节省的代价。有了这些基本代价后,就可以决策是否进行存储:当续跑所节省的代价大于存储和恢复执行所消耗的代价时,则备份当前查询计划树所涉及算子的所有状态;当续跑所节省的代价小于存储和恢复所消耗的代价,则不作任何存储处理,此时集群恢复后,直接依据查询语句得到查询结果。在实际实施中,基于代价的决策可采用定期评价或者通过操作符自行进行判断两种方式进行调用。
可选地,所述根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树,可以包括:
递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,所述重构信息包括重构操作符以及所述重构操作符之间的逻辑关系;
根据所述重构信息,更新所述查询计划树的所述故障算子中与所述重构信息对应的原始信息,以得到所述重构的查询计划树,所述原始信息包括原始操作符以及所述原始操作符之间的逻辑关系。
其中,所述递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,包括:
对所述已完成操作设置已完结操作符,并在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到所述重构操作符以及所述重构操作符之间的逻辑关系。
本发明实施例在备份算子的中间状态信息后,关键点是需要根据所述查询计划树和所述算子的中间状态信息重构所述查询计划树,得到重构的查询计划树。具体重构过程可以是:
根据所述故障算子的中间状态信息,确定所述故障算子中未完成的操作和已完成的操作,可以将故障算子中未完成的操作定义为左子树,将故障算子中已完成的操作定义为右子树。
将备份的故障算子中的已完成的操作结果标记为saved存储状态,也就是设置已完结操作符,将其作为当前算子的右子树用于后期扫描。与此同时,由于仍有部分需要后续处理,因此需要在该当前算子的上层添加“UNION ALL”,将未完成的操作作为左子树,并在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符。然后递推处理当前算子的左子树和右子树。
关于右子树是已完成的操作,左子树是未完成的操作本处只是举例说明,实际上,也可以是右子树是未完成的操作,左子树是已完成的操作。
当得到重构的查询计划树后,在故障恢复后,利用重构的查询计划树进行续跑操作。
为了说明本发明实施例中所涉及的技术点,下面将构造实际的查询语句用于说明本发明实施例的查询执行过程。本发明实施例示例中选用的sql语句是“INSERT INTO C(C1,C2)SELECT A.col,B.col FROM A INNER JOIN B ONA.col=B.col GROUP BY 1,2LIMIT 100”。
本发明实施例的一个关键点就是进行查询计划树的重构。因此需要先获得上述根据查询语句生成的查询计划树。因为无论查询计划树中有多少个算子,在执行过程中都是逐个算子执行的,因此下面以查询计划树种的一个算子的结构为例进行说明,一下为一个算子的结构和该算子中执行相应操作所需要的代价:
其中,右边的cost代表进行相应操作所需要的代价。由于执行操作中的HashJoin包含了build过程和probe过程。因此两部分的操作符需要分开统计执行代价。当故障场景是:Hash Join已经开始输出,根据该算子在备份时间点上备份的中间状态信息可以确定,build操作已完成,probe操作还有一部分未完成,则在当前Hash Join的上层添加包含已完成操作和未完成操作的合并标识符“UNION ALL”,然后将已完成的build操作定义为该算子的右子树。可以设置已完结操作符Scan(saved_B),probe操作还有一部分未完成,则在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符,例如:probe操作中的Scan(part of A),将probe操作中还未完成的部分(probe)Scan(partof A)定义为该算子的左子树。对于左子树而言,当前Scan(A)操作并未结束,因此只需记录已扫描的位置而无需改变子树状态。对于右子树而言,build操作实际已经结束,为了保证完整性,在该Scan(B)原有位置增加,原有Scan(B)由于实际build操作已经完成,而已完成的备份结果标记为saved_B,作为其右子树。随着操作和操作逻辑关系的更新,各操作所需的代价也随之修改。因此可以得到该算子的重构信息为以下内容。
用重构信息更新故障算子处的原始信息,得到更新后的算子之间操作和操作之间的关系可以参阅如下内容进行理解。
故障算子更新后,也就得到了重构的查询计划树。
依据上述产生的重构的查询计划树与原有查询计划树在执行意义上本质上是一致的。这也是保障故障恢复后查询能够执行的关键之所在。
下面结合上述代价示例,说明本发明实施例中基于代价来评估备份策略。同样的,依据上述查询语句生成的查询计划作为初始的代价。考虑如下几种场景:
当Hash Join执行build中,假设Scan(B)已经执行了30,则存储和恢复代价包含恢复Hash Join所需的40以及扫描B所需的1,共41,而节省的代价及已经执行的部分30。此时代价小于存储和恢复代价,放弃存储,可直接重算。
当Hash Join已经完成build,存储和恢复代价包括存储Scan(B)和恢复HashJoin的代价,共计90。而节省代价则包含Scan(B)所花费的70以及Build操作所花费的60,共计130。节省代价大于存储和恢复代价,存储Hash Join的hash表。
当Hash Join已经处于输出状态,且Scan(A)已经进行了100,存储和恢复代价包括存储Hash Join部分输出结果所需的30以及恢复Scan(A)所需的1,共计31。而节省代价包括Scan(A)的100以及Scan(B)的70共170。节省代价大于存储和恢复代价,存储Hash Join的hash表以及部分Hash Join的部分输出结果。
依次类推,当此次评价结束后,将清除上次存储的所有结果。
得益于大查询能够在查询故障恢复后利用存储的中间状态进行查询续跑,保障业务在发生不可预期的故障后能够用较低的代价完成作业的续跑,从而使得整个业务流程不受大查询作业的影响。
上述第二种故障出现的时刻所涉及的查询故障处理的过程描述完后,下面结合图6,介绍本发明实施例中第二种故障出现的时刻所涉及的查询故障处理的过程。
图6本发明实施例中查询故障处理的另一实施例示意图。图6所示的数据块管理***5为简图,只画出了一些关键模块,其他未示出的模块功能可以参阅图1部分进行理解。
如图6所示,本发明实施例提供的查询故障处理的过程包括:
查询管理设备可以包括查询接口7、查询计划发生器11和查询执行器9,查询接口7接收查询语句后,将查询语句传递给查询计划发生器11,查询计划发生器11会根据获取的查询语句,生成查询计划树,所述查询计划树包括流水线关系的多层算子,也就是上层算子的输入依赖有直接流向关系的相邻下层算子的输出,其中,每个算子都包含由逻辑操作所构成的逻辑关系。
在查询计划发生器11生成查询计划树时出现查询故障,由于查询计划发生器11生成查询计划树所需的时间相对于查询执行器9执行算子功能的时间相对来说是非常少的,因此当故障发生时,查询语句仍停留在优化器处理阶段,可直接记录当前执行的查询语句而无需保存任何的中间状态。当环境故障恢复后,可重新解析该查询语句生成执行计划并交给查询执行器9完成最终的查询语句。
参阅图7,本发明实施例提供的查询故障的处理方法的一实施例包括:
101、接收查询语句,并生成所述查询语句对应的查询计划树,所述查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及所述操作符之间的逻辑关系。
102、根据所述查询计划树执行所述查询语句。
103、当执行所述查询语句的过程中出现故障时,则调取故障算子的中间状态信息,所述中间状态信息是在所述执行故障发生之前的备份时间点备份的,且所述中间状态信息包括所述故障算子在所述备份时间点已完成的操作和未完成的操作,所述故障算子为所述执行故障发生时正在执行所述查询语句的算子。
104、根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树。
104、当所述故障恢复后,根据所述重构的查询计划树,续跑所述查询语句,以得到所述查询语句的查询结果。
与现有技术相比,本发明实施例所提供的查询故障的处理方法,可以在出现故障时,根据故障发生处算子的中间状态信息,重构的查询计划树,在故障恢复后,可以根据该重构的查询计划树实现查询语句的续跑,也就是从故障发生处继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。
本发明实施例所提供的查询故障的处理方法可以参阅图1-图6部分的相关描述进行理解,本处不再重复赘述。
本发明实施例提供的查询故障的处理装置20所包括的模块和各模块之间的关系,可以参阅图5和图6部分的数据库管理***进行理解,本处不再重复赘述。
本发明实施例所提供的图1至图6所示的数据库管理***或者查询故障的处理装置可以通过服务器或者物理主机来实现,下面以服务器为例,介绍查询故障的处理方法依靠服务器实现的过程。
图8是本发明实施例提供的服务器60的结构示意图。所述服务器60包括处理器610、存储器650和收发器630,存储器650可以包括只读存储器和随机存取存储器,并向处理器610提供操作指令和数据。存储器650的一部分还可以包括非易失性随机存取存储器(NVRAM)。
在一些实施方式中,存储器650存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
在本发明实施例中,当服务器执行上述图1至图6所示的数据库管理***或查询故障的处理装置所执行的上述图1至图7部分所描述的查询故障处理的功能时,通过调用存储器650存储的操作指令(该操作指令可存储在操作***中),
通过收发器630用于接收查询语句;
生成所述查询语句对应的查询计划树,所述查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及所述操作符之间的逻辑关系;
根据所述查询计划树执行所述查询语句;
当执行所述查询语句的过程中出现故障时,则调取故障算子的中间状态信息,所述中间状态信息是在所述执行故障发生之前的备份时间点备份的,且所述中间状态信息包括所述故障算子在所述备份时间点已完成的操作和未完成的操作,所述故障算子为所述执行故障发生时正在执行所述查询语句的算子;
根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树;
当所述故障恢复后,根据所述重构的查询计划树,续跑所述查询语句,以得到所述查询语句的查询结果。
与现有技术相比,本发明实施例所提供服务器,可以在出现故障时,根据故障发生处算子的中间状态信息,重构的查询计划树,在故障恢复后,可以根据该重构的查询计划树实现查询语句的续跑,也就是从故障发生处继续执行当前的查询语句,从而减少查询中断对整个查询业务流程的影响。
处理器610控制服务器60的操作,处理器610还可以称为CPU(Central ProcessingUnit,中央处理单元)。存储器650可以包括只读存储器和随机存取存储器,并向处理器610提供指令和数据。存储器650的一部分还可以包括非易失性随机存取存储器(NVRAM)。具体的应用中服务器60的各个组件通过总线***620耦合在一起,其中总线***620除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线***620。
上述本发明实施例揭示的方法可以应用于处理器610中,或者由处理器610实现。处理器610可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器610中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器610可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器650,处理器610读取存储器650中的信息,结合其硬件完成上述方法的步骤。
可选地,处理器610还用于:
基于所述故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息。
可选地,处理器610具体用于:周期性执行所述选择性备份的步骤。
可选地,处理器610具体用于:
当确定出所述故障算子续跑所节省的代价大于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
可选地,处理器610具体用于:
当确定出所述故障算子续跑的代价小于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
可选地,处理器610具体用于:
递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,所述重构信息包括重构操作符以及所述重构操作符之间的逻辑关系;
根据所述重构信息,更新所述查询计划树的所述故障算子中与所述重构信息对应的原始信息,以得到所述重构的查询计划树,所述原始信息包括原始操作符以及所述原始操作符之间的逻辑关系。
可选地,处理器610具体用于:对所述已完成操作设置已完结操作符,并在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到所述重构操作符以及所述重构操作符之间的逻辑关系。
可选地,处理器610还用于:
当确定出续跑所节省的代价小于所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。
可选地,处理器610还用于:
当确定出续跑的代价大于所需要的代价之和时,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。
可选地,处理器610还用于:
当生成所述查询计划树时出现故障,则记录所述查询语句,所述查询语句用于在所述查询故障恢复后,重新生成所述查询计划树。
以上图8所描述的服务器可以参阅图1至图6部分的查询管理设备进行理解,本处不再重复赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的查询故障的处理方法以及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (14)
1.一种查询故障的处理方法,其特征在于,包括:
接收查询语句,并生成所述查询语句对应的查询计划树,所述查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及所述操作符之间的逻辑关系;
根据所述查询计划树执行所述查询语句;
当执行所述查询语句的过程中出现故障时,则调取故障算子的中间状态信息,所述中间状态信息是在所述执行故障发生之前的备份时间点备份的,且所述中间状态信息包括所述故障算子在所述备份时间点已完成的操作和未完成的操作,所述故障算子为所述执行故障发生时正在执行所述查询语句的算子;
根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树;
当所述故障恢复后,根据所述重构的查询计划树,续跑所述查询语句,以得到所述查询语句的查询结果。
2.根据权利要求1所述的处理方法,其特征在于,所述方法还包括:
基于所述故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息。
3.根据权利要求2所述的处理方法,其特征在于,所述方法还包括:周期性执行所述选择性备份的步骤。
4.根据权利要求2或3所述的处理方法,其特征在于,所述基于所述故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息,包括:
当确定出所述故障算子续跑所节省的代价大于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
5.根据权利要求2或3所述的处理方法,其特征在于,所述基于所述故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息,包括:
当确定出所述故障算子续跑的代价小于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
6.根据权利要求1-3任一所述的处理方法,其特征在于,所述根据所述查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树,包括:
递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,所述重构信息包括重构操作符以及所述重构操作符之间的逻辑关系;
根据所述重构信息,更新所述查询计划树的所述故障算子中与所述重构信息对应的原始信息,以得到所述重构的查询计划树,所述原始信息包括原始操作符以及所述原始操作符之间的逻辑关系。
7.根据权利要求6所述的处理方法,其特征在于,所述递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,包括:
对所述已完成操作设置已完结操作符,并在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到所述重构操作符以及所述重构操作符之间的逻辑关系。
8.一种查询故障的处理装置,其特征在于,包括:查询接口、查询计划发生器、查询执行器和重构模块,
所述查询接口用于接收查询语句;
所述查询计划发生器用于生成所述查询接口接收的查询语句对应的查询计划树,所述查询计划树包括流水线关系的多层算子,其中,每层至少包括一个算子,每个算子都包含操作符以及所述操作符之间的逻辑关系;
所述查询执行器用于按照所述查询计划发生器生成的查询计划树执行所述查询语句;当执行所述查询语句的过程中出现故障时,则调取故障算子的中间状态信息,所述中间状态信息是在所述执行故障发生之前的备份时间点备份的,且所述中间状态信息包括所述故障算子在所述备份时间点已完成的操作和未完成的操作,所述故障算子为所述执行故障发生时正在执行所述查询语句的算子;
所述重构模块用于根据所述查询计划发生器生成的查询计划树和所述故障算子的中间状态信息,更新所述故障算子的操作符以及所述操作符之间的逻辑关系,以得到重构的查询计划树;
所述查询执行器还用于当所述故障恢复后,根据所述重构的查询计划树,续跑所述查询语句,以得到所述查询语句的查询结果。
9.根据权利要求8所述的处理装置,其特征在于,所述处理装置还包括决策模块,
所述决策模块,用于基于所述故障算子的中间状态的备份代价,选择性备份所述故障算子的中间状态信息。
10.根据权利要求9所述的处理装置,其特征在于,
所述决策模块具体用于周期性执行所述选择性备份的步骤。
11.根据权利要求9或10所述的处理装置,其特征在于,
所述决策模块具体用于:
当确定出所述故障算子续跑所节省的代价大于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
12.根据权利要求9或10所述的处理装置,其特征在于,
所述决策模块具体用于:
当确定出所述故障算子续跑的代价小于备份所述故障算子已完成的操作和恢复所述故障算子未完成的操作所需要的代价之和时,则备份所述故障算子的中间状态信息。
13.根据权利要求8-10任一所述的处理装置,其特征在于,
所述重构模块具体用于:
递归处理所述未完成的操作和所述已完成的操作,以得到所述故障算子的重构信息,所述重构信息包括重构操作符以及所述重构操作符之间的逻辑关系;
根据所述重构信息,更新所述查询计划树的所述故障算子中与所述重构信息对应的原始信息,以得到所述重构的查询计划树,所述原始信息包括原始操作符以及所述原始操作符之间的逻辑关系。
14.根据权利要求13所述的处理装置,其特征在于,
所述重构模块具体用于:
对所述已完成操作设置已完结操作符,并在所述未完成操作中设置用于标记未完成操作起始位置的起始操作符,以得到所述重构操作符以及所述重构操作符之间的逻辑关系。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610505556.5A CN107545015B (zh) | 2016-06-29 | 2016-06-29 | 一种查询故障的处理方法及处理装置 |
PCT/CN2017/071709 WO2018000811A1 (zh) | 2016-06-29 | 2017-01-19 | 一种查询故障的处理方法及处理装置 |
US16/234,095 US10866866B2 (en) | 2016-06-29 | 2018-12-27 | Query fault processing method and processing apparatus |
US17/101,033 US11461195B2 (en) | 2016-06-29 | 2020-11-23 | Query fault processing method and processing apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610505556.5A CN107545015B (zh) | 2016-06-29 | 2016-06-29 | 一种查询故障的处理方法及处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107545015A true CN107545015A (zh) | 2018-01-05 |
CN107545015B CN107545015B (zh) | 2020-12-04 |
Family
ID=60785725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610505556.5A Active CN107545015B (zh) | 2016-06-29 | 2016-06-29 | 一种查询故障的处理方法及处理装置 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10866866B2 (zh) |
CN (1) | CN107545015B (zh) |
WO (1) | WO2018000811A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110909023A (zh) * | 2018-09-17 | 2020-03-24 | 华为技术有限公司 | 一种查询计划的获取方法、数据查询方法及装置 |
CN111221674A (zh) * | 2019-12-31 | 2020-06-02 | 瑞庭网络技术(上海)有限公司 | 故障排查方法、装置及可读存储介质 |
WO2023000561A1 (zh) * | 2021-07-20 | 2023-01-26 | 威讯柏睿数据科技(北京)有限公司 | 一种对数据库操作进行加速的方法和装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107545015B (zh) * | 2016-06-29 | 2020-12-04 | 华为技术有限公司 | 一种查询故障的处理方法及处理装置 |
US11599539B2 (en) * | 2018-12-26 | 2023-03-07 | Palantir Technologies Inc. | Column lineage and metadata propagation |
US11138213B2 (en) * | 2019-04-10 | 2021-10-05 | Snowflake Inc. | Internal resource provisioning in database systems |
US10915418B1 (en) * | 2019-08-29 | 2021-02-09 | Snowflake Inc. | Automated query retry in a database environment |
US10949197B1 (en) * | 2019-11-05 | 2021-03-16 | International Business Machines Corporation | Analysis of patch impact on a running database application |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103136363A (zh) * | 2013-03-14 | 2013-06-05 | 曙光信息产业(北京)有限公司 | 查询处理方法和集群数据库*** |
EP2922274A1 (en) * | 2014-03-18 | 2015-09-23 | Axis AB | Finding services in a service-oriented architecture (SOA) network |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
CN105701128A (zh) * | 2014-11-28 | 2016-06-22 | 华为技术有限公司 | 一种查询语句的优化方法和装置 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8775412B2 (en) * | 2004-01-08 | 2014-07-08 | International Business Machines Corporation | Method and system for a self-healing query access plan |
US9886492B2 (en) * | 2004-12-22 | 2018-02-06 | Teradata Us, Inc. | Self-adjusting database-query optimizer |
US8239535B2 (en) * | 2005-06-06 | 2012-08-07 | Adobe Systems Incorporated | Network architecture with load balancing, fault tolerance and distributed querying |
US7739269B2 (en) * | 2007-01-19 | 2010-06-15 | Microsoft Corporation | Incremental repair of query plans |
US20100312776A1 (en) * | 2009-06-04 | 2010-12-09 | International Business Machines Corporation | Intelligent performance analysis and isolaton of potential problem queries |
US8938644B2 (en) * | 2010-12-03 | 2015-01-20 | Teradata Us, Inc. | Query execution plan revision for error recovery |
CN102663117B (zh) * | 2012-04-18 | 2013-11-20 | 中国人民大学 | 面向数据库与Hadoop混合平台的OLAP查询处理方法 |
US20130290295A1 (en) * | 2012-04-30 | 2013-10-31 | Craig A. Soules | Maintaining fault domains in a distributed database |
US9659057B2 (en) * | 2013-04-15 | 2017-05-23 | Vmware, Inc. | Fault tolerant distributed query processing using query operator motion |
CN103559245A (zh) * | 2013-10-29 | 2014-02-05 | 华为技术有限公司 | 一种分布式事务提交故障的处理方法、装置和*** |
CN103793538A (zh) | 2014-03-06 | 2014-05-14 | 赛特斯信息科技股份有限公司 | 实现数据库宕机情况下网站服务恢复的***及方法 |
US10303558B2 (en) * | 2015-04-17 | 2019-05-28 | Microsoft Technology Licensing, Llc | Checkpointing higher order query operators |
CN107545015B (zh) * | 2016-06-29 | 2020-12-04 | 华为技术有限公司 | 一种查询故障的处理方法及处理装置 |
US20180025055A1 (en) * | 2016-07-19 | 2018-01-25 | Sap Se | Fault-tolerant database query execution plans using non-volatile memories |
US20180107712A1 (en) * | 2016-10-13 | 2018-04-19 | International Business Machines Corporation | Adaptive query row selection |
US10049133B2 (en) * | 2016-10-27 | 2018-08-14 | International Business Machines Corporation | Query governor across queries |
US10795887B1 (en) * | 2016-11-06 | 2020-10-06 | Tableau Software, Inc. | Dynamic rebuilding of query execution trees and reselection of query execution operators |
US10521430B1 (en) * | 2016-11-06 | 2019-12-31 | Tableau Software, Inc. | Dynamic selection of query execution operators |
US10409812B2 (en) * | 2016-12-20 | 2019-09-10 | International Business Machines Corporation | Query restart based on changing system resources and an amount of data change |
US20190205448A1 (en) * | 2018-01-04 | 2019-07-04 | Microsoft Technology Licensing, Llc | Relational database system that uses real-time statistics for selection of physical operators |
-
2016
- 2016-06-29 CN CN201610505556.5A patent/CN107545015B/zh active Active
-
2017
- 2017-01-19 WO PCT/CN2017/071709 patent/WO2018000811A1/zh active Application Filing
-
2018
- 2018-12-27 US US16/234,095 patent/US10866866B2/en active Active
-
2020
- 2020-11-23 US US17/101,033 patent/US11461195B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103136363A (zh) * | 2013-03-14 | 2013-06-05 | 曙光信息产业(北京)有限公司 | 查询处理方法和集群数据库*** |
EP2922274A1 (en) * | 2014-03-18 | 2015-09-23 | Axis AB | Finding services in a service-oriented architecture (SOA) network |
CN105701128A (zh) * | 2014-11-28 | 2016-06-22 | 华为技术有限公司 | 一种查询语句的优化方法和装置 |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110909023A (zh) * | 2018-09-17 | 2020-03-24 | 华为技术有限公司 | 一种查询计划的获取方法、数据查询方法及装置 |
WO2020057369A1 (zh) * | 2018-09-17 | 2020-03-26 | 华为技术有限公司 | 一种查询计划的获取方法、数据查询方法及装置 |
CN110909023B (zh) * | 2018-09-17 | 2021-11-19 | 华为技术有限公司 | 一种查询计划的获取方法、数据查询方法及装置 |
CN111221674A (zh) * | 2019-12-31 | 2020-06-02 | 瑞庭网络技术(上海)有限公司 | 故障排查方法、装置及可读存储介质 |
WO2023000561A1 (zh) * | 2021-07-20 | 2023-01-26 | 威讯柏睿数据科技(北京)有限公司 | 一种对数据库操作进行加速的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US20190129811A1 (en) | 2019-05-02 |
US10866866B2 (en) | 2020-12-15 |
CN107545015B (zh) | 2020-12-04 |
WO2018000811A1 (zh) | 2018-01-04 |
US11461195B2 (en) | 2022-10-04 |
US20210073085A1 (en) | 2021-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107545015A (zh) | 一种查询故障的处理方法及处理装置 | |
US7844620B2 (en) | Real time data replication for query execution in a massively parallel computer | |
US10657008B2 (en) | Managing a redundant computerized database using a replicated database cache | |
Marcu et al. | Spark versus flink: Understanding performance in big data analytics frameworks | |
US9576028B2 (en) | Managing data queries | |
Simitsis et al. | Optimizing ETL workflows for fault-tolerance | |
US9396217B2 (en) | Monitoring and debugging query execution objects | |
US20070250517A1 (en) | Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries | |
US20070112866A1 (en) | Reason-based database changes | |
CN103729442A (zh) | 记录事务日志的方法和数据库引擎 | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
US20090094294A1 (en) | Associating Database Log Records into Logical Groups | |
CN110196758A (zh) | 数据处理方法和装置、存储介质及电子装置 | |
CN113553313A (zh) | 一种数据迁移方法及***、存储介质、电子设备 | |
CN104636480B (zh) | 重建备机数据库的方法及其装置 | |
US9348882B2 (en) | Method, system, and computer readable medium for long term archiving of data in a MES system | |
CN110888761A (zh) | 一种基于关键任务部分主动备份的容错方法和流处理平台 | |
EP2343658A1 (en) | Federation as a process | |
Schönig | Mastering PostgreSQL 15: Advanced techniques to build and manage scalable, reliable, and fault-tolerant database applications | |
US20230333973A1 (en) | Retrying failed test cases in software testing using parallel threads | |
US9442698B2 (en) | Migration between model elements of different types in a modeling environment | |
JP6523823B2 (ja) | 仮想データベースシステム管理装置、管理方法及び管理プログラム | |
US20070294317A1 (en) | Apparatus and Method for Journaling and Recovering Indexes that Cannot be Fully Recovered During Initial Program Load | |
CN117891866A (zh) | 一种分布式机器学习的批流统一构建*** | |
CN117149526A (zh) | 一种适用于mpp数据库的数据恢复方法、***及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |