用于诊断执行问题的数据库查询执行跟踪和数据生成的制作方法

文档序号:11333825阅读:177来源:国知局
用于诊断执行问题的数据库查询执行跟踪和数据生成的制造方法与工艺
本发明一般地涉及数据库开发和管理。具体地说,它提供适合于数据库跟踪的方法和系统。
背景技术
:在开发和管理数据库环境中,必须标识数据库查询执行问题。这些问题可能与数据相关,并且可能包括由于查询执行、内部/外部错误、错误结果、非确定性结果、以及性能下降导致的数据库崩溃。这些问题在复杂数据库环境中的处置更具挑战性,复杂数据库环境可能包括云计算、大数据和业务分析工具。这些环境往往涉及具有耦合到大型快速存储系统的强大计算机的系统。因此,本领域需要解决上述问题。技术实现要素:从第一方面看,本发明提供一种用于数据库跟踪的方法,所述方法包括:接收针对第一查询在第一输入数据上的执行而捕获的踪迹数据,其中所述踪迹数据将所述查询的子句与所述执行期间产生的相应求值(evaluation)状态相关联;在不访问所述第一输入数据的情况下从所述踪迹数据生成第二输入数据,以使得所述第一输入数据保持私有;以及实现第二查询在所述第二输入数据上的执行,其中实现所述第二查询在所述第二输入数据上的执行再现来自所述第一查询在所述第一输入数据上的执行的求值状态。从另一方面看,本发明提供一种用于数据库跟踪的系统,所述系统包括:处理器;以及计算机可读存储介质,其连接到所述处理器,其中所述计算机可读存储介质具有存储在其上的用于控制所述处理器的程序,并且其中所述处理器与所述程序一起操作以执行所述程序以便:接收针对第一查询在第一输入数据上的执行而捕获的踪迹数据,其中所述踪迹数据将所述查询的子句与所述执行期间产生的相应求值状态相关联;在不访问所述第一输入数据的情况下从所述踪迹数据生成第二输入数据,以使得所述第一输入数据保持私有;以及实现第二查询在所述第二输入数据上的执行,其中实现所述第二查询在所述第二输入数据上的执行再现来自所述第一查询在所述第一输入数据上的执行的求值状态。从另一方面看,本发明提供一种用于数据库跟踪的计算机程序产品,所述计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并存储指令,所述指令用于由所述处理电路执行以执行一种用于执行本发明的步骤的方法。从另一方面看,本发明提供一种计算机程序,其存储在计算机可读介质上并且可加载到数字计算机的内部存储器中,所述计算机程序包括软件代码部分,当所述程序在计算机上运行时,所述软件代码部分用于执行本发明的步骤。根据本发明的实施例,一种方法包括接收针对第一查询在第一输入数据上的执行而捕获的踪迹数据。所述踪迹数据将所述第一查询的子句与所述执行期间产生的相应求值状态相关联。在不访问所述第一输入数据的情况下从所述踪迹数据生成第二输入数据。实现第二查询在所述第二输入数据上的执行,其中实现所述第二查询在所述第二输入数据上的执行再现来自所述第一查询在所述第一输入数据上的执行的求值状态。在此还描述和要求保护与以上概述的方法相关的系统和计算机程序产品。附图说明从以下将结合附图阅读的对本发明的示例性实施例的详细说明,本发明的上述方面和其它方面,包括目标、形式、特性和优点,将变得更显而易见。附图未按比例并且为了清晰起见与详细说明一起促进相关领域的技术人员的理解。在附图中:图1示出根据本发明的一个优选实施例的网络计算机环境;图2是根据本发明的一个优选实施例的图1中所示的设备的框图;图3示出根据本发明的一个优选实施例的联接(join)处理的某些方面;图4示出根据本发明的一个优选实施例的联接处理的其它方面。具体实施方式在此公开本发明的详细实施例以便例示要求保护的结构和方法。但是,本发明可以以多种不同的形式体现,并且不应被解释为限于在此公开的示例性实施例。相反,提供这些示例性实施例以使得本公开详尽并完整,并且将本发明的范围完全传达给所属
技术领域
的技术人员。在描述中,可以省略公知特性和技术的细节以便避免不必要地使提供的实施例变得模糊不清。为了使开发和支持团队在合理的时间范围内简单地再现目标数据库的查询执行问题,他们可以在类似于原始执行中使用的规模上使用数据、计算和存储资源。甚至除了这呈现的计算和存储资源挑战之外,数据库管理员可能不愿意与开发和支持团队完全共享目标数据库数据(例如由于隐私问题),尽管管理员通常将共享数据库的模式(schema)。根据本发明的实施例,开发或支持团队可以生成用于故障排除的备选输入数据,其中备选输入数据基于目标数据库模式。在暴力方法中,生成将满足查询谓词的所有排列的数据。对于具有三个谓词的查询,例如,其中每个谓词具有两个可能的求值状态,即真或假,存在谓词的2^3=8个组合,即,(ttt)(ttf)(tft)(ftt)(fft)(tff)(ftf)(fff)。因此,暴力数据生成将涉及针对这八个组合中的每一者生成数据以便用于模拟查询执行。备选地或此外,开发人员可以通过机器生成的查询手动解析,并且尝试通过使用他们的经验进行简化,这可以包括查看在原始执行环境中捕获的踪迹和日志文件。这既繁琐又耗时。所有这些问题都影响开发和支持团队再现和隔离查询执行问题的能力。本发明的实施例提供用于适当限制数据和资源的方式,以便成功再现目标数据库中的查询执行的行为,同时维护目标数据库的数据的隐私。这包括在服务于目标数据库的计算机系统302中提供专用查询跟踪(在此为“指纹跟踪”或“查询指纹跟踪”)。此跟踪导致减少为了再现特定查询的行为而生成的数据。现在参考图3,根据本发明的实施例,可以通过在计算机系统302上执行指纹跟踪程序303,在服务于目标数据库304的计算机系统302中实现查询指纹跟踪。指纹跟踪程序303包括在服务于目标数据库304的计算机系统302上运行的跟踪模块306,其中模块306将跟踪应用于诸如联接过滤器(joinfilter)和谓词求值之类的子句,以及应用于用于区域图、概要或索引的子句(无论哪一个或多个应用),具体取决于特定目标数据库304。(术语“区域图”在此可以用于指区域图、概要或索引。)这包括在查询执行模块312针对给定输入数据集304执行查询314期间捕获指纹踪迹310。踪迹310提供针对被求值数据304的行产生的求值状态的记录。还提供数据生成工具320(在此也被称为dgt或“数据生成器”或“数据生成模块”),其可以是指纹跟踪程序306的一部分,或者可以是单独模块。同样,数据生成模块320可以在服务于目标数据库304的计算机系统302上运行,或者在不同的计算机系统322上运行,如图3中所示。查询指纹踪迹模块306或用于压缩的某个其它模块(例如图3中所示的模块330)响应于指纹踪迹数据310中的这些捕获的求值状态而确定合并数据(uniondata)332,如在下文进一步解释的那样。压缩数据的任何模块都可以被称为“数据压缩模块”、“dcm”、“压缩模块”或“压缩器”。尽管在图3中被示出为单独数据集,但合并数据332可以被包括在踪迹数据310中。根据本发明的实施例,dgt320和压缩器330可以是单个模块。因此,例如在此对压缩器330的引用可以被解释为备选地参考dgt320。根据本发明的实施例,dcm330还响应于踪迹数据310生成修改后的查询333,其中修改后的查询333可以根据合并数据332省略查询314的某些子句。结合在下文提供的示例进一步描述用于生成合并数据332的实现细节。数据生成模块320生成备选输入数据324(即,要由支持或开发团队使用的数据),其用于再现原始查询执行模块312执行原始查询314的行为,例如以便模拟目标数据库304的原始查询执行的行为。dgt320解析指纹踪迹数据310,或者备选地解析其合并数据332版本,并且基于踪迹数据310(或合并数据332)、目标数据库模式308和原始查询314或修改后的查询333,响应性地生成备选输入数据324。查询执行模块(例如系统322的模块334)针对备选输入数据324执行查询以便产生模拟结果336,其模拟导致原始结果316的原始执行,其中该查询可以是基于合并数据332的修改后的查询333或者可以是原始查询314,具体取决于实施例。可以在服务于目标数据库304的计算机系统302上产生数据库查询执行问题的上下文中应用诸如图3中所示的查询指纹跟踪。问题例如可以包括数据库崩溃、内部/外部错误、错误结果、非确定性结果、性能不佳或其任何组合。遇到问题(多个)的用户可以是管理员或客户端计算机系统322处的其它用户,用户可以经由与服务于目标数据库304的计算机系统302的网络,从客户端计算机系统322访问目标数据库304。客户端计算机系统322可以具有客户端指纹跟踪接口模块326,客户端指纹跟踪接口模块326用于与在服务于目标数据库304的计算机系统302上运行的指纹跟踪程序306通信。指纹跟踪程序306在服务于目标数据库304的计算机系统302上执行,其响应地验证会话变量并且然后开始指纹跟踪,这包括扫描查询314以便确定其参数,例如表、列、谓词、值、联接过滤器等。然后,指纹跟踪程序306响应于所述参数而收集查询314的数据。根据本发明的实施例,指纹跟踪程序306在模块312执行查询期间监视给定数据集304中的给定查询谓词的每个行求值,并且响应地生成指纹踪迹310,指纹踪迹310可以采取如在下文描述的特定格式。即,查询指纹踪迹模块306确定谓词求值结果的组合。(这些求值结果中的每一者在此也可以被称为“求值状态”。因为它们是谓词求值的结果,所以每一者可以被称为“谓词求值状态”或者更简单地被称为“谓词状态”。)模块306捕获求值状态,如在下文进一步描述的那样。此外或备选地,指纹跟踪程序306捕获求值并且生成用于联接过滤器的指纹踪迹310。同样,指纹跟踪程序306可以捕获求值并且生成用于区域图的指纹踪迹310。首先在以下示例中描述谓词求值。此后,根据本发明的实施例,提供用于联接过滤器和区域图的示例。考虑具有三个谓词的“或”组合的查询,即,p1orp2orp3,例如“(dept_name='dev'ordept_name='hardware'ordept_name='sales')”,其中“dept_name='dev'”是p1等。(在此,可以在不使用逻辑运算符的情况下声明谓词状态的组合,例如“p1p2p3”,因为它仅指示个体谓词的求值状态。应该理解,例如可以针对具有诸如(p1orp2orp3)、(p1andp2andp3)、(p1and(p2orp3))之类的组合的查询应用“p1p2p3”。)由于本发明实施例的各个方面,生成的数据减少。一个方面涉及如下认识:即,在模块312执行查询中,根据固定、已知顺序的查询314谓词(例如从右到左,即,p1然后p2然后p3)处理输入数据304。因此,关于具有三个谓词的“或(or)”组合的查询314,例如本发明的实施例涉及如下认识:即,一旦查询执行模块312已确定第一组对应行的输入数据304满足第一谓词p1,模块312就提交结果316并且继续移动以便对输入数据304中的下一组行求值,而不进行用于判定第一组行的其余部分是否满足p2或p3的求值。对于如以上示例的具有三个谓词的“或”组合的查询,本发明的实施例可以导致生成这样的数据集:所述数据集具有仅产生谓词求值状态的三个组合的数据值。所述组合之一是p1=true、p2=i和p3=i,其中“i”指示真或假都无关紧要的求值状态,即“不关心”求值状态。(这可以被写为p1p2p3=tii。)在下文将进一步解释“i”状态及其应用。其它两个组合是p1p2p3=fti和p1p2p3=fft。这导致如下进一步的认识:即,在生成用于模拟原始数据304的相同查询执行的备选输入数据324中,在这种情况下dgt320可能不需要重新产生如原始数据304的第一组行的其余部分中的数据324。例如,当查询执行模块312确定产生求值状态并且满足用于第一组输入数据304行的查询314(例如以上示例中的p1=t)时,模块312继续移动以便对输入数据304中的下一组行求值,而不对第一组行中的数据是否满足查询的其它谓词进行求值。在这种情况下,指纹踪迹模块306通过如下操作进行响应:即,针对具有三个谓词的“或”组合的查询的其它剩余谓词(例如p2和p3),指示“i”状态,如在以上示例中那样。在指纹踪迹模块306中配置的相同逻辑导致在第二组合p1p2p3=fti中捕获p3=i,因为p2=t。换言之,查询314包括至少第一谓词和另一个谓词,并且由指纹踪迹310捕获的求值状态包括查询314中的谓词的未求值状态“i”(即,模块312执行的原始查询未进行求值),其中未进行求值是因为原始查询执行确定输入数据304的一组行中的第一数据满足第一谓词并且确定第一谓词满足查询314,而不考虑该组行中的数据是否满足另一个谓词。在本发明实施例的另一个方面,未生成具有产生以上示例中的谓词求值状态组合p1p2p3=fff的数据值的备选输入数据324,因为本发明的实施例涉及如下认识:即,该数据可以作为崩溃或其它问题的潜在原因而被忽略。根据本发明实施例的此方面,指纹踪迹模块306被配置为未针对一组对应输入数据304行(其具有不满足查询314的值,例如以上示例中的p1p2p3=fff)的查询执行模块312求值,在踪迹数据310中捕获个体谓词求值状态。备选地,指纹踪迹模块306可以被配置为针对此类情况在踪迹数据310中捕获个体谓词求值状态,但数据生成模块320被配置为未针对此类踪迹数据310生成备选输入数据324。更进一步,数据生成模块320可以被配置为针对此类踪迹数据310生成备选输入数据324(踪迹数据310的所有实例的合并结果332具有“f”状态的每个谓词除外)。下面进一步提供和解释用于计算合并结果的真值表。以下是根据本发明实施例的生成用于谓词求值的指纹踪迹310的一个示例,其中跟踪模块306捕获在目标数据库304的原始查询执行312中发生的谓词求值的各个方面。在该示例中,不包括“i”状态,这仅为了简化解释。此外,在下文提供其中包括“i”状态的示例。示例查询(“示例1”)如下所示:selectid,emp_name,salaryfromemp,grpwhereid=(selectidfromgrpwheregrp_name=‘dev’orgrp_name='test')orsalary>25000在该示例中,第一谓词p1是“whereid=(selectidfromgrpwheregrp_name=‘dev’orgrp_name='test')”,并且第二谓词p2是“salary>25000”。(备选地,“grp_name=‘dev’orgrp_name='test'”可以被视为两个谓词。)在该查询314的执行312中,假设针对给定输入数据集(即,目标数据库304),在“grp”表中存在两个行:针对这两个行,第一谓词p1求值为“假”并且第二谓词p2求值为“真”;存在两个其它行:针对这两个行,p1求值为“假”并且p2也求值为“假”;以及没有如下行:针对这些行,p1求值为真,而不管p2如何求值。在下面的“谓词指纹踪迹数据”表中汇总作为跟踪310捕获的这些行求值结果,其中“t”指示真并且“f”指示假。谓词指纹踪迹数据(示例1)p1p2计数ff2ft2tf0tt0谓词状态的组合可以被提供为例如上表中的行,其中每个行用于谓词状态的唯一组合。(应该理解,该表还可以通过简单地省略这些行,指示没有求值结果的组合。此外,该表可以省略如下行:该行列出所有谓词的求值结果为假的组合。)对于两个谓词和两个谓词状态t和f,存在四个可能的状态组合ff、ft、tf和tt,因此求值结果状态表可以列出四个求值结果行,如上所示。对于每个求值组合(即,表中的行),查询指纹踪迹模块306使用数据库模式308,捕获在针对目标数据库304的查询314的原始执行312中出现多少个此类求值组合的计数。对于该示例,如上表所示,存在求值组合ff的2个实例、求值组合ft的2个实例、求值组合tf的0个实例、以及求值组合tt的0个实例。如上所述,查询指纹踪迹模块306或用于压缩的某个其它模块(例如图3中所示的模块330)响应于指纹踪迹数据310中的这些捕获的求值状态,确定合并数据332,其中对于针对组合之一(即,针对上表中的一个行)被求值为真的任何谓词,该谓词的合并值也为真,如逻辑“或”条件。(压缩数据的任何模块都可以被称为“数据压缩模块”、“dcm”、“压缩模块”。)对于给定示例,没有真谓词p1的实例,因此所有p1谓词求值组合的合并332=f。存在真谓词p2的实例,因此所有p2谓词求值的合并=t。根据本发明的实施例,dcm不对所有谓词的求值结果为假的执行实例进行计数。因此,该示例中其它三种类型组合的谓词求值的实例总数为2,因此dcm确定合并数据计数=2。该示例的该合并结果332汇总如下:p1p2计数ft2备选地,dcm330可以对如下执行实例计数:针对这些执行实例,具有真合并结果332的谓词的求值结果为真和假,在这种情况下,对于该示例以上合并结果332表中的计数为4。因为对于给定查询谓词p1和目标数据库304,由dcm330确定的该合并结果332为假,这导致在使用合并结果332的实施例中,dgt320消除用于修改后的查询333的谓词p1。因此,dgt320不针对谓词p1生成备选数据324。对于谓词p2,dgt320根据在目标数据库304的初始查询执行312期间捕获的谓词求值踪迹310生成测试数据324。在这种特定情况下,这意味着dgt320根据按照以上谓词指纹踪迹数据表并且按照合并结果332的踪迹310,生成grp和emp表中的测试数据324的行,这些行具有足够的值以便至少两次使谓词p2(salary>25000)求值为真。在其中dcm不对所有谓词的求值结果为假的执行实例计数的备选方案中,dgt320生成grp和emp表中的测试数据324的如下行:这些行具有足够的值以便至少两次使谓词p2(salary>25000)求值为假,并且生成测试数据的如下行:这些行具有足够的值以便至少两次使p2求值为真。以下各表提供dgt320可以针对示例1生成的备选输入数据324的示例。emp表idemp_namesalary1007100randomtext1250011007101randomtext2250021007102randomtext3249981007103randomtext424999grp表idgrp_name1107100randomtext111107101randomtext121107102randomtext13p2要求salary>25000,并且以上“谓词指纹踪迹数据(示例1)”表指示p2为假的踪迹数据310的两个实例(表的第一行)和p2为真的踪迹数据310的两个实例(表的第二行),因此对于该示例,dgt320生成备选数据324中的谓词p2的四个值,其中两个值大于25000并且两个值小于或等于25000。员工名称(emp_name字段)未被包括在任何谓词中,因此dgt320针对该字段的行生成随机数据。所有组名称产生假求值状态,因此dgt320针对该字段的行生成随机数据,只是随机数据被限制为not=“dev”和not=“test”。备选地,对于由模块334执行的用于模拟的查询333,压缩器330可以消除谓词p1,即“grp_name=‘dev’orgrp_name=′test′”。相应地,压缩器330可以从select语句中消除对grp表(“grp”)的引用,以使得修改后的查询333如下所示:selectid,emp_name,salaryfromempwheresalary>25000在该备选方案中,dgt320针对grp表根本不生成任何数据,并且甚至可以选择不定义grp表。在该备选方案中,dgt320可以生成谓词p2具有四个值的备选数据324,其中两个值大于25000并且两个值小于或等于25000,如上所述,或者备选地可以生成谓词p2仅具有两个值的备选数据324,这两个值都大于25000。在上文的示例1中,谓词状态“t”和“f”被提供为指纹踪迹数据表中的求值状态变量。根据本发明的实施例,可以存在其它谓词状态。如前所述,可以包括状态“i”,其指示至少由于以下原因而未对谓词求值。如果少于所有谓词的谓词满足查询,则针对结果表生成的每个行可以从查询的少于所有谓词的求值而产生。因此,当某些谓词满足来自输入表的对应行的特定组合的查询时,可以有意跳过该特定组合的其它谓词的求值,并且这些其它谓词的每个状态可以由“i”指示。用于查询的求值的指纹踪迹数据表中的求值状态变量还可以包括状态“e”,其指示当捕获指纹踪迹数据310时谓词待求值。可能产生该状态,因为模块312执行的查询314可能例如由于崩溃或者由于用户停止执行而在完整求值完成之前停止。根据本发明的实施例,下表汇总四个求值状态。求值状态的含义下面是另一个示例查询(“示例2”):selectemp_name,dept_name,salaryfromempejoinregisterrone.emp_id=r.emp_idjoindeptdonr.dept_id=d.dept_idwheresalary>3000and(dept_name='dev'ordept_name='hardware'ordept_name='sales');除其它项外,该示例示出在指纹踪迹数据310中捕获的其它查询求值状态i。注意,在示例2中,“(dept_name='dev'ordept_name='hardware'ordept_name='sales')”被视为三个谓词,而在示例1中,“(selectidfromgrpwheregrp_name=‘dev’orgrp_name='test')”被视为一个谓词。如前所述,根据本发明的实施例,存在两个备选方案。来自输入表的对应行的任何组合可以满足该示例2的查询,其中p1为真并且p2、p3和p4中的一者或多者为真。因此,如果p1和p2例如为真,则满足查询314。一旦针对对应输入表304行的组合确定p1和p2为真,p3或p4针对这些行是否为真无关紧要。因此,在这种情况下,在对p1和p2求值之后,查询求值模块312可以停止而不对p3和p4求值,并且可以将来自这些输入表304行的数据提交到结果表316的行,其中结果表316中的此类行的谓词p1、p2、p3和p4的状态变量是ttii。下面是该示例查询中涉及的表和列的列表:下面是查询中涉及的谓词的列表:下面是查询中涉及的捕获联接过滤器的列表:下面是该查询的示例输入表:emp表dept表dept_iddept_name101销售102营销103财务104开发105硬件106管理107软件register表下面是将以上查询应用于以上输入表的结果:结果表(示例2)emp_namedept_namesalary福斯特硬件7800吉姆开发5300麦克硬件9700桑杰开发5200重述以上的至少某些内容,dgt320生成备选输入数据324,以便用于通过与最初执行查询314的模块312不同的执行模块334模拟查询314的执行,或者即使通过相同模块312,执行模块334也至少针对备选输入模块324模拟查询314的执行。这是因为最初针对其处理查询314的原始数据304可能例如由于隐私原因而不可用。即使可用,原始数据304也可能太多。模拟可以有助于确定针对原始数据304的查询执行失败或执行不佳的原因。即使针对原始数据304适当地执行查询执行,也可以进行模拟以便分析如何提高查询执行性能。dgt320响应于模式308、以及在针对原始数据304执行查询314期间捕获的指纹踪迹数据310,生成备选输入数据324。dgt320还响应于原始查询314或响应于修改后的查询333,生成备选输入数据324。(因为基于查询314生成修改后的查询333,所以仍然可以说dgt响应于查询314生成备选输入数据324。)由指纹跟踪程序306捕获指纹踪迹数据310。即,在针对原始数据304执行查询314时,指纹跟踪程序306根据查询谓词和原始输入数据集304,针对每个求值(或至少针对选择性求值)捕获某些状态数据,并且响应地提供状态数据作为指纹踪迹310。根据本发明的实施例,状态数据包括可能谓词状态的每个特定组合以及在求值过程中出现的该组合的实例数量的计数。备选地,踪迹310的状态数据可以通过省略仅指示没有求值实例的那些组合。因此,指纹踪迹数据310指示在捕获踪迹数据310时(这可以是发生查询执行故障时)的组合中的每个谓词的求值状态。以下指纹数据表用于根据以上示例2成功完成的查询执行。它提供针对原始数据304执行查询期间捕获的指纹踪迹数据310。因为它用于成功完成的查询执行,所以它不包括“e”状态。在该示例中,跟踪310省略不满足查询的求值实例,例如“销售”中的“詹姆斯”的ffft(这将被捕获为fiii,因为初始p1=f将它从该特定查询中排除),以及例如“财务”中的“亨利”的tfff和“营销”中的“杰克”和“约翰”等。指纹踪迹数据表(示例2)p1p2p3p4计数ttii2tfti2ttti4合并结果对于该示例,如以上指纹踪迹数据表(示例2)的第一行中所示,p1和p2在两个实例中为真,即,“桑杰”和“吉姆”的行,他们的工资都高于$3000(p1)并且都在“开发”部门(p2)。这些条件满足查询,而不管针对原始数据304输入表中的行(即,分别用于“吉姆”的emp、dept和register表中的第5、4和5行以及用于“桑杰”的这些相同表中的第8、4和5行)的对应组合而对p3和p4求值的结果。因此,p3或p4针对这些行是否为真无关紧要。因此在这些情况下,在对p1和p2求值之后,查询求值模块停止而不对p3和p4求值,并且指纹踪迹模块306递增当查询执行模块312将来自这些输入表304行的数据提交到结果表316的行时产生的p1p2p3p4谓词求值状态的“ttii”组合的计数。对于该同一示例,如以上指纹踪迹数据表(示例2)的第二行中所示,p1在另外两个实例中为真,即,针对“麦克”和“福斯特”(即,emp表的第6和11行)为真,但p2针对他们中的任何一个都不为真,因为麦克或福斯特都不在开发部门。这可以从register表的第6和11行中看出,它们都指向dept表的第5行,表明他们都在硬件部门。但是,硬件部门满足p3。因此,在针对原始emp、dept和register表的查询执行期间,查询执行模块将第1和3行分别提交到用于福斯特和麦克的结果表316,其中在这两种情况下,这些时间的谓词求值状态为ttti。每次,指纹踪迹模块306递增谓词状态的ttti组合的计数器。下面是在本发明的实施例中dgt320可如何通过有向随机过程生成备选输入数据324的一个示例。为了准备初始值组(例如从中选择满足至少三个谓词p1、p2和p3的不同组合的值),dgt320生成满足p1的n个值u(即,u1至un)、满足p2的n个值v(即,v1至vn)、满足p3的n个值w(即,w1至wn)、不满足p1的n个值x(即,u1至un)、不满足p2的n个值y(即,v1至vn)、不满足p3的n个值z(即,w1至wn),其中例如u用于表1中的列,v用于表2中的列,并且w用于表3中的列。为了例如生成值的组合以使得p1p2p3=tft,dgt320针对n生成随机值并选择对应的u,针对n生成下一个随机值并选择对应的y,并且针对n生成下一个随机值并选择对应的w。针对u、y和w的选定值的组合将求值为tft。dgt320将这些选定值中的每一者写入其相应表中的对应行(即,彼此链接的行)中。当表中的行通过如模式308指示的其它数据链接在一起时,除了满足谓词的值的上述有向随机生成之外,还需要dgt320生成数据。例如,通过均在emp_id列中具有相同值,以上示例中的register表的第5行被链接到emp表的第5行。同样,通过均在dept_name列中具有相同值,以上示例中的register表的第5行被链接到dept表的第4行。为了将满足谓词的生成值链接在一起,dgt320生成随机值并且将它们写入表中的列,这些列链接具有用于满足谓词的生成值的对应行。根据本发明的实施例,dcm压缩求值状态及其相应计数的踪迹310表。(这可以作为指纹跟踪程序306的一部分完成,或者该压缩可以由另一个程序完成,该程序可以在另一个计算机系统322上,例如在其上dgt320生成备选输入数据324的计算机系统。)该压缩可以如上文关于示例1所述的那样完成,其中针对捕获的指纹跟踪表310的每个列执行合并332操作。但是,下面提供以下其它细节,因为示例1示出仅具有两个状态的指纹踪迹310,而踪迹310可以捕获四个求值状态,如示例2示出。以下真值表提供适用于所有四个求值状态的合并运算的规则。合并真值表执行压缩的压缩模块330可以是指纹跟踪程序306或数据生成程序或另一个程序的模块。压缩模块330针对指纹踪迹数据310的列中的求值状态执行以上真值表定义的合并运算。例如,参见上文示例2的指纹数据表的底端行。一旦向压缩模块提供以上指纹数据表,压缩模块就针对其每个列中的求值状态执行合并运算。对于第一列,txt=t。对于第二列,txf=t。依此类推。对于较大数据集,当然指纹数据表将通常具有更多行。如果具有要压缩的三个行,则在列中的第一和第二行的第一合并运算之后,使用同一列中的第三行中的求值状态和来自第一合并运算的结果来执行第二合并运算。如果具有要压缩的四个行,则针对来自第二合并运算的结果执行第三合并运算。如果仍然具有更多行,则依此类推。dgt320使用指纹踪迹数据310和指纹踪迹数据310的压缩版本(即,合并运算的结果)来确定生成什么数据以便包括在备选输入数据324的集合中,该集合用于由查询执行模块334处理以便作为处理原始数据304的模拟。更具体地说,对于示例2,dgt320生成emp、dept和register表中具有如下值的行:针对这些值,查询执行导致查询谓词求值状态p1p2=tt(上文示例2的指纹踪迹数据表的第一行)的至少两个实例以及状态p1p2p3=tft(第二行)的至少两个实例。换言之,dgt320生成具有如下值的行:这些值与以下值产生相同的求值状态:用于“吉姆”的emp、dept和register表的第5、4和5行中的值、用于“桑杰”的这些相同表的第8、4和5行中的值、以及用于“麦克”和“福斯特”的emp和register表的第6和11行和dept表的第5行中的值。但是,dgt320在不访问原始数据304本身的情况下生成该备选输入数据324,这意味着没有实际的雇员姓名、工资等。注意,对于示例2,dgt320不一定针对谓词p4生成emp、dept和register表中的数据。这是因为在针对原始数据的查询的执行期间,针对p4捕获的指纹踪迹状态在所有实例中都为“i”,这可以从指纹踪迹数据310的各个行看出,并且还可以从所有行合并结果的p4列看出。一般而言,dgt320可以使用合并结果332来确定dgt320不需要生成数据的谓词,即,针对合并结果332没有t状态的那些谓词,如根据以上合并真值表指示的逻辑确定的那样。根据本发明的实施例,dgt320不生成此类数据。对于上文求值状态表的含义中的“i”,该表指明“考虑查询中的谓词消除”。这是因为根据合并真值表,“i”和“f”的合并是“f”,这指示不在模拟查询中保留谓词,但根据合并真值表,“i”和“t”的合并是“t”,这指示在模拟查询中保留谓词。因此,在踪迹数据的一个行中保留还是不保留具有“i”状态的谓词取决于该行与其它行(可能具有“t”或“f”状态)的合并结果。对于上文求值状态表的含义中的“e”,该表指明“保留谓词”。这是因为根据合并真值表,“e”与“f”的合并以及“e”与“t”的合并都为“t”,这指示在模拟查询中保留谓词,而不管其它行的“t”或“f”状态。即,在踪迹数据的一个行中保留还是不保留具有“e”状态的谓词不取决于“e”状态行与具有“t”或“f”状态的其它行的合并结果。对于上文求值状态表的含义中的“f”,该表指明“生成行的数据,因为谓词的求值值为假”。这意味着如果踪迹数据310行中的谓词具有“f”状态,则dgt320针对该行的该谓词确实生成一行备选数据324(即,在执行模拟查询333中将被求值为“f”的数据值),但是当该谓词的合并结果332为“f”时除外,在这种情况下,压缩器330针对模拟查询333消除该谓词,这意味着dgt320可以跳过针对该谓词生成数据324。下面是另一个示例查询(示例3):selectemp_id,emp_name,salaryfromempewheresalary>3000oremp_id=(selectemp_idfromregisterwheredept_id=107);除其他项外,该示例查询示出压缩器330的查询修改逻辑的各个方面如何操作,以便由模块334针对生成器320生成的备选输入数据324实现适当的模拟查询执行。该示例包含将在给定数据集中从不变成真的子查询,因为上文register表指示dept_id=107(软件)没有注册的员工。因此,针对该示例数据的谓词“selectemp_idfromregisterwheredept_id=107”的踪迹数据310中的所有求值状态将为“f”或至少为“i”,前提是查询求值未提前停止,在这种情况下可能为“e”状态。只要该谓词没有“e”状态,压缩器330将相应地在合并数据333中针对该谓词指示“f”,因为合并真值表指示“f”的合并以及“f”与“i”的合并的合并结果为“f”。对于针对合并数据332而不是针对指纹踪迹数据310的所有谓词组合实例生成备选输入数据324的本发明的实施例或模式,压缩器330生成修改后的查询333,其响应于合并数据33中该谓词的“f”指示,省略来自原始查询314的该谓词。因此,由于修改后的查询333中没有该谓词,因此当执行修改后的查询333时,模拟查询执行模块324不尝试针对该谓词读取备选输入数据324。这特别有用,因为备选输入数据324将没有用于该谓词的数据,因为在该模式或实施例中,由于与压缩器330生成省略该谓词的修改后的查询333相同的原因(即,由于合并数据333针对该谓词指示f),数据生成器320不针对该谓词生成数据。注意,这在这种情况下特别有用,数据生成器320不针对该谓词生成数据,因为该谓词的数据是register表的唯一非键数据列。因此,数据生成器320根本不必生成register表。sqljoin子句用于基于公共字段来组合来自两个或更多数据表的行。根据本发明的实施例,以与以上针对谓词求值描述的相同方式,通过指纹踪迹模块306监视由查询执行模块312进行的join求值,针对join求值执行指纹跟踪。以与用于谓词求值的指纹跟踪相同的方式,这减少针对备选输入数据324生成的数据,这甚至可以包括消除全部表(如在以上示例中)的生成、以及在表之间不一致的不需要行的生成。此外,以与用于谓词求值的指纹跟踪相同的方式,指纹跟踪join求值提供指纹踪迹数据310或合并数据322或这两者,从而使dgt320能够针对如join子句指示的表列生成备选输入数据324。现在连同图3一起参考图4,在图4中示出动作,根据本发明的实施例,这些动作涉及产生备选输入数据324和修改后的查询333,并且涉及由查询执行模块334模拟模块312所执行的原始查询314,其中查询执行模块334针对备选输入数据324执行修改后的查询333。根据本发明的实施例,dgt320和压缩器330(根据本发明的实施例,这两者备选地可以是单个模块)执行例如图4中所示的动作,这包括扫描和解析踪迹数据310和模式数据308。(尽管图3将模式308示为单独数据结构,但它可以被包括在踪迹文件310中。踪迹文件310可以包括谓词、联接过滤器、区域图求值的特殊踪迹文件、统计信息、模式转储308和其它日志文件,这些日志文件用于如在此解释的诊断目的,并且可以采取单个tarball文件的形式,如通过诸如nzlogcollector之类的实用工具产生的文件那样。)例如,当用户遇到其中指纹跟踪有用的问题时,开始图4中所示的动作400。用户可以通过经由接口326与指纹跟踪程序306通信,开始405跟踪。具体地说,用户可以例如通过向指纹跟踪接口326发出会话变量“setsql_fingerprint_trace=on”,开始405跟踪。在用户发出会话变量时,客户端指纹跟踪接口326将会话变量传送到指纹跟踪程序306。这样,用户可以在系统302上重新执行有问题的查询314,并且经由模块306捕获踪迹数据310。在开始405,用户还经由接口326发出其它会话变量以便向程序303指示针对当前指纹跟踪会话请求什么动作。图4以特定顺序示出这些动作410、420等,并且因此下面以所示顺序描述这些动作,但是,这些动作410、420等的执行并不限于示出和描述的顺序,除了显式指示或由所描述的上下文暗示。实际上,可以在适当情况下同时执行这些动作410、420等。如果程序303在410处检测到请求模式转储,则模块306执行模式转储动作415以便产生模式308作为指纹跟踪的一部分。(如前所述,模式308可以被包括在踪迹310中。)根据本发明的实施例,模式308包括模式转储并且可以采取脚本的形式,模式转储包含用于创建数据库、表和关联对象的ddl语句的完整定义。大多数数据库服务器能够将这种定义生成到脚本中。根据本发明的实施例,dgt320使用模式转储脚本308针对备选输入数据324创建表和数据库对象,就像查询执行模块312在针对数据304执行查询314时在数据304中遇到这些表和数据库对象那样。下面是能够由netezza数据库服务器和nzsql实用工具使用的模式转储脚本308的一个示例:此外,如果程序303在420处检测到请求联接指纹跟踪,则模块306执行动作425以便捕获联接指纹跟踪作为踪迹数据310的一部分,如已在上文描述的那样。同样,如果程序303在430处检测到请求谓词指纹跟踪,则模块306执行动作435以便捕获谓词指纹跟踪作为踪迹数据310的一部分,如已在上文描述的那样。此外,如果程序303在440处检测到请求区域图指纹跟踪,则模块306执行动作445以便捕获区域图指纹跟踪作为踪迹数据的一部分,如下所示。区域图是由数据库服务器例如针对日期、时间戳、字节整数、整数和数据类型自动生成的内部表,以便改进针对分组的或近乎有序的大数据集的查询的吞吐量和响应时间。区域图通过针对受限扫描查询消除where子句的开始和结束范围之外的记录,减少检索数据需要的磁盘扫描操作。即,区域图用于跳过表的不包含感兴趣行的部分,并且因此减少要扫描的磁盘页和盘区(extent)的数量。这又减少了搜索时间、磁盘争用和磁盘i/o。大多数数据库服务器具有类似的实现,但可能使用不同的术语,例如区域图、概要或索引范围。如前所述,术语“区域图”在此用于包含任何和所有这些实现。根据本发明的实施例,指纹踪迹模块306在由查询执行模块312执行期间确定满足查询314的相应列中的数据304的范围,并且以区域图中指定的项指示范围。指纹踪迹模块306将该范围和列信息写入踪迹数据310中。压缩器330然后将该区域图信息从踪迹数据310供应给dgt320,dgt320响应地限制其针对备选输入数据324生成的模拟数据,以使得数据324被限于针对每个相应列的所确定的范围。这提供比纯粹随机生成的数据更接近客户范围值的更有针对性的数据。下面是另一个示例查询(示例4),其示出根据本发明的实施例的踪迹数据310的区域图捕获的各个方面:selectemp_name,dept_name,salaryfromempejoinregisterrone.emp_id=r.emp_idjoindeptdonr.dept_id=d.dept_idwheresalary>3000and(dept_name='dev'ordept_name='hardware'ordept_name='sales');下表指示针对数据304的emp表的工资列的区域图定义的区域标记z1-z9范围:对于该示例,查询314执行的结果316如下所示:emp_namedept_namesalary福斯特硬件7800吉姆开发5300麦克硬件9700桑杰开发5200为了针对上文示例数据304emp表执行此以上示例4查询,例如指纹踪迹模块306在由查询执行模块312执行期间针对满足查询314的“工资(salary)”列中的数据304(即,遇到的具有“t”求值状态的数据值),确定落入区域图的相应z1-z9标记范围内的那些特定数据304的实例数量。对于该示例,由模块306捕获的“工资”列区域图相关的指纹踪迹数据310如下所示:指纹踪迹模块306还在查询314执行期间确定产生“e”求值状态的数据值,尽管在以上示例中没有指示。dgt320响应于踪迹数据310中的t和e求值状态的对应实例,生成产生这些状态的备选输入数据324。根据本发明的实施例,指纹踪迹模块306丢弃i和f求值,因此dgt320不生成产生这些求值状态的备选输入数据324。此外,如果程序303在450处检测到请求统计指纹跟踪,则模块306执行动作455以便在由模块306进行的指纹跟踪中捕获操作统计信息,其可以被包括在踪迹数据310中。操作统计信息提供系统302如何在最近系统和查询活动的上下文中运行的高级概述,这有助于诊断问题、理解性能特征以及与系统管理软件对接。大多数数据库服务器能够通过计划文件或sql命令“generatestatistics”提供查询统计信息。根据本发明的实施例,指纹踪迹模块306解析由数据库服务器提供的统计信息,并且在踪迹数据310中捕获其信息,例如表行计数、不同和最常见的值(commonvalue)。dgt320在针对数据304执行查询314时,使用该信息生成具有更接近查询执行模块312遇到的环境的种类和容量的模拟数据324。例如,对于针对上文dept表的查询“select*fromdept;”,指纹踪迹模块306在踪迹数据310中捕获由数据库服务器提供的以下统计信息:表的统计信息:表:dept行计数:7列的统计信息:列名称:dept_name列类型:字符(15)低值:“admin”高值:“software”常见值:0列名称:dept_id列类型:整数低值:101高值:107常见值:0结合模块312执行查询314(模块306针对该查询捕获指纹踪迹310),当程序303在460处检测到特定查询314的执行被停止时(例如由于错误检测、没有进度等导致的完成或中断),程序303经由接口326通知用户。用户响应地经由接口326将会话变量“setsql_fingerprint_trace=off”传送到程序303。转而,模块306的跟踪活动响应地停止跟踪,这降低系统302中的性能开销。备选地,可以配置程序303以使得当它在460处检测到特定查询314的执行被停止时,程序303通知用户并且模块306自动停止跟踪。此外在460处,一旦模块306停止跟踪,用户就可以经由接口326指示压缩器330读取踪迹数据310并且执行压缩(即,合并)功能。(备选地,如果指纹306执行压缩功能,则用户可以指示数据生成器320读取踪迹数据310。)在获得包括合并结果332的踪迹数据310时,用户可以指示dgt320执行动作470以便生成备选输入数据324,如在上文详细描述的那样。总之,通过设计,指纹踪迹数据310不提供查询执行的所有细节,因为这可能太多,并且因为它可能需要大量计算资源以便进行模拟查询执行。相反,数据310及其合并数据332基于在查询执行期间发生并且更可能与执行故障关联的求值状态来提供选择性信息。根据本发明的至少某些实施例,指纹踪迹模块306可以仅对查询执行中实际产生的那些求值状态组合的实例计数并且将所述实例包括在指纹踪迹数据310中。此外,在实际产生的那些组合中,指纹踪迹模块306可以仅对满足查询的那些组合的实例计数并将所述实例包括在指纹踪迹数据310中。备选地,指纹踪迹模块306可以计数,但数据生成模块320可以被配置为对于不满足查询的组合的踪迹数据310实例不生成备选输入数据324。更进一步,数据生成模块320可以从压缩器330接收合并数据332,并且可以响应地生成备选输入数据324,以便仅产生在上文描述的合并数据332中被指示为真的求值状态。因此,压缩器330可以修改原始查询314,使得由查询执行模块334为了模拟而执行的修改后的查询333仅包括在合并数据332中被指示为真的那些子句。尽管通过设计,指纹踪迹数据310不提供查询执行的所有细节,然而根据本发明实施例的指纹跟踪可导致响应于所生成的备选输入数据324的查询处理而再现的行为的准确性提高,因为基于在指纹踪迹数据310中捕获的查询执行期间发生的事件的证据来生成备选输入数据324。相比之下,更随机生成的数据可能无法再现原始查询执行的行为。如上所述,在指纹踪迹数据310中捕获的特定事件是满足查询的求值状态的实例。捕获这些事件往往提高模拟行为的准确性,因为这些事件导致进一步查询执行。即,在判定一行数据是否满足查询中,当查询执行确定满足当前正在被求值的子句(“真”求值状态)时,查询执行然后继续针对该行对下一个子句求值,或者如果当前子句的真状态满足该行的整体查询,则查询执行继续以对下一行求值。对于采用快速失败谓词求值方案的数据库服务器(例如netezza),具有and的谓词p1andp2...andpn的字符串中的为“假”的求值意味着整个表达式为假,并且服务器将停止处理进一步谓词。没有快速失败属性的某些其它数据库系统可以继续对谓词求值。然而,在任何一种情况下,具有union指纹踪迹数据集都有帮助,因为它是该数据库系统中实际发生什么的真实表示。为了模拟而执行的查询的指纹跟踪和修改将提高模拟行为的准确性。其原因至少包括以下趋势:与假求值状态相比,真求值状态导致更多性能问题或者以其他方式与更多性能问题关联。不管其原因为何,应用本发明实施例的经验已表明,应用本发明实施例在减少的数据捕获和执行资源的约束内提供更接近理想的模拟性能。有利的是,本发明的实施例标识数据相关查询执行问题,并且有助于在崩溃期间以及针对内部/外部错误、错误结果、非确定性结果和性能问题发现查询执行的状态。标识上述求值状态t、f、i和e有助于简化或删除查询中从未被求值的谓词,从而允许开发人员简化复杂查询并更容易理解和调试。在减少必须被捕获和分析的数据量的同时实现这些优点。因此,本发明的实施例减少在查询执行中标识数据相关问题所需的时间和硬件。本发明的实施例比随机生成方法更好地再现执行行为,而不需要密集的手动操作和分析,而且不损害客户数据隐私。否则,由于大量的数据和复杂的查询,通常难以定期测试。通过在信息收集以重现内部问题中减少团队之间的来回通信,本发明的实施例向客户支持、开发和质量保证信息技术人员以及客户提供益处。这导致增加的客户满意度。图1示出根据本发明实施例的示例计算环境100。如图所示,计算环境100包括经由网络120连接的计算机系统110.1、110.2至110.n,网络120可以是公共的或专用的。系统110.1、110.2等分别包括相应模块,其可以是被配置为针对其相应设备执行任务的程序或硬件模块。图2示出根据本发明实施例的系统200,其可以被应用为计算机系统110.1、110.2等中的任何一个或全部。如图所示,系统200包括中央处理单元(cpu)205、网络接口215、互连(即,总线)217、存储器220和存储装置230。cpu205可以检索和执行存储在存储器220中的编程指令。同样,cpu205可以检索和存储驻留在存储器220中的应用数据。互连217可以促进cpu205、存储装置230、网络接口215和存储器220之间的传输,例如编程指令和应用数据的传输。包括cpu205以便表示单个cpu、多个cpu、具有多个处理核心的单个cpu等。此外,根据本发明的实施例,包括存储器220以便表示随机存取存储器,其包括用于运行时执行的数据和程序模块,例如所示的示例数据222和模块224。但是,应该理解,一个或多个模块(例如模块224)可以由其它硬件实现,并且可以是固件。数据222和模块224可以是来自存储装置230的数据和程序模块的实例,例如示出的示例数据232和模块234,用于cpu205在存储器220中的运行时执行。存储装置230中的数据和程序模块可以包括数据库表和一个或多个查询执行模块。存储装置230例如可以是磁盘驱动器存储设备。尽管被示出为单个单元,但存储装置230可以是固定和/或可移动存储设备的组合,例如固定磁盘驱动器、软盘驱动器、磁带驱动器、可移动存储卡或光存储装置、网络附加存储(nas)或存储区域网络(san)。附图中的上述示例和描述并不意味着暗示架构限制。例如,设备110.1、110.2等中的任何一个可以是笔记本计算机、手持式计算机、智能电话、自助终端机等。此外,本发明可以驻留在由计算机系统使用的任何数据存储介质(即,软盘、光盘、硬盘、磁带、rom、ram等)上。(术语“计算机”、“系统”、“计算机系统”和“数据处理系统”在此可以互换使用。)本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是—但不限于—电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。用于执行本发明操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其它设备以特定方式工作,从而,存储有指令的计算机可读存储介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。附图中的流程图和框图显示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。一个或多个数据库可以被包括在主机中,以便存储和提供对各种实现的数据的访问。所属
技术领域
的技术人员还将认识到,出于安全原因,本发明的任何数据库、系统或组件可以包括在单个位置或多个位置处的数据库或组件的任何组合,其中每个数据库或系统包括各种合适的安全特性,例如防火墙,访问码、加密、解密等。数据库可以是任何类型的数据库,例如关系、分层、面向对象等。可以用于实现数据库的数据库产品是或其它可用数据库产品。(ibm和db2是国际商业机器公司在世界各地注册的商标。)可以以任何合适的方式(包括作为数据表或查找表)组织数据库。可以通过所属
技术领域
已知和实践的任何数据关联技术实现某些数据的关联。例如,可以手动或自动实现关联。自动关联技术例如可以包括数据库搜索、数据库合并、grep、agrep、sql等。可以通过数据库合并功能实现关联步骤,例如使用每个制造商和零售商数据表中的键字段。键字段根据由键字段定义的对象的高级类对数据库进行分区。例如,可以将特定类指定为第一数据表和第二数据表中的键字段,然后可以基于键字段中的类数据合并两个数据表。在该实施例中,对应于每个合并数据表中的键字段的数据优选地相同。但是,还可以例如通过使用agrep合并键字段中具有相似但不相同数据的数据表。主机可以提供可由用户访问的合适网站或其它基于因特网的图形用户界面。在一个实施例中,netscapeweb服务器、internet工具套件、ibmdb2、通用数据库平台和sybase数据库平台与sunsolaris操作系统平台结合使用。(ibm和websphere是国际商业机器公司在世界各地注册的商标。)此外,可以使用诸如jbdc驱动程序之类的组件、ibm连接池和ibmmq系列连接方法提供对数个源的数据访问。在此使用的术语网页并不意味着限制可能用于与用户交互的文档和应用的类型。例如,除了标准html文档之外,典型的网站还可能包括各种表单、小程序、javascript、活动服务器页面(asp)、java服务器页面(jsp)、通用网关接口脚本(cgi)、可扩展标记语言(xml)、动态html、级联样式表(css)、帮助应用、插件等。java以及所有基于java的商标及徽标都是oracle公司和/或其关联公司的商标或注册商标。从以上所述,应该理解,根据本发明的实施例,所述踪迹数据不包括所述第一输入数据。此外,所述第一输入数据包括数据值,并且在没有所述第一输入数据的情况下从所述踪迹数据生成所述第二输入数据将生成所述第二输入数据的与第一输入数据值的相应值对应的值,其中每个第二输入数据值具有这样的值,使得:在所述第二查询的执行中,每个第二输入数据值产生与针对对应第一输入数据值在所述踪迹数据中捕获的求值状态相同的求值状态,但在其他方面与该对应第一输入数据值无关。在另一个方面,所述踪迹数据包括来自将所述第一查询的所述子句应用于所述第一输入数据的行的第一执行的求值状态的相应组合的计数。根据本发明的实施例,在没有所述第一输入数据的情况下从所述踪迹数据生成所述第二输入数据包括生成具有范围限制的随机值,以使得在所述第二输入数据上执行所述第二查询对于预定类型的求值状态组合再现相同数量的组合。在另一个方面,来自第一执行的求值状态包括未求值状态,其中所述未求值状态的每个实例源自未将查询子句应用于输入数据行的实例。此外,来自第一执行的求值状态包括真、假以及待求值状态中的一者或多者,其中所述真、假以及待求值状态的每个实例源自将所述查询子句之一应用于所述第一输入数据的一个行的实例。根据本发明的实施例,在没有所述第一输入数据的情况下从所述踪迹数据生成所述第二输入数据包括生成第二执行的数据,所述数据导致第二执行再现所述第一执行的真求值状态而不包括第一执行的未求值的求值状态。在另一个方面,计算机过程判定所述踪迹数据中的所述求值状态的合并结果对于所述第一查询中的每个子句是否为真。根据本发明的实施例,从所述第一查询生成所述第二查询,其中生成所述第二查询包括当正在被从所述第一查询中消除的子句的所述合并结果不为真时消除该子句。此外,在另一个方面,响应于所述踪迹数据和所述第一输入数据的模式生成备选输入数据包括生成第二查询执行的数据,所述数据导致第二查询执行仅针对具有真合并状态的子句再现第一查询执行的求值状态。尽管本说明书包含许多细节,但这些细节不应被解释为对本发明或能够要求保护的内容的范围的限制,而应该被解释为对特定于本发明的特定实现的特性的描述。在本说明书中在单独实现的上下文中描述的某些特性还可以在单个实现中组合实现。相反,在单个实现的上下文中描述的各种特性还可以在多个实现中单独或以任何合适的子组合来实现。此外,尽管以上可以将特性描述为在某些组合中起作用,并且甚至最初要求如此保护,但要求保护的组合的一个或多个特性在某些情况下可以从该组合中被删除,并且要求保护的组合可以涉及子组合或子组合的变型。同样,尽管在附图中以特定顺序示出操作,但这不应被理解为要求以所示的特定顺序或者以连续顺序执行此类操作,或者执行所有示出的操作以便实现所需的结果。在某些情况下,多任务和并行处理可以是有利的。在此使用诸如“第一查询”、“第二查询”、“第一输入数据”和“备选输入数据”之类的术语。应该理解,除非上下文另有显式声明或明确指示,否则诸如“第一”、“第二”和“备选”之类的修饰符仅是将一个对象或动作与另一个对象或动作区分开的标签,并且针对被修饰对象或动作的明确引用建立前提基础,而不表示时间或分层意义。已阅读本公开的所属
技术领域
的技术人员将认识到,可以在不偏离本发明的范围的情况下对实施例做出改变和修改。应该认识到,在此示出和描述的特定实现例示本发明及其最佳模式,并且并非另外以任何方式限制本发明的范围。其它变化在以下权利要求的范围内。例如,已描述涉及诸如谓词、联接和区域图之类的查询中的子句的本发明实施例。在此描述的跟踪和基于踪迹的模拟还可以应用于查询选择列表中的case表达式。应该从此处的公开认识到,本发明的实施例可以适用于具有多于一个表的join子句的sql查询。以上已针对特定实施例描述了益处、其它优点和问题的解决方案。但是,益处、优点、问题的解决方案、以及可以导致任何益处、优点或解决方案发生或变得更显著的任何元素(多个)不被解释为任何或所有权利要求的关键、必需或必要的特性或元素。如在此使用的,术语包括、包含或其任何其它变型旨在涵盖非排他包含,以使得包括元素列表的过程、方法、物品或装置不仅包括这些元素,而且可以包括未显式列出或者此类过程、方法、物品或装置固有的其它元素。此外,除非显式描述为必要或关键,否则在此描述的元素不是实现本发明所必需的。在此使用的术语仅出于描述特定实施例的目的并且并非旨在作为本发明的限制。如在此使用的,除非上下文另外清楚地指示,否则单数形式“一”、“一个”和“该”旨在同样包括复数形式。还将理解,术语“包括”和/或“包含”在用于本说明书中时指定所声明的特性、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其它特性、整数、步骤、操作、元件、组件和/或它们的组合的存在或添加。以下的权利要求中的对应结构、材料、操作以及所有功能性限定的装置或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它元件相组合地执行该功能的结构、材料或操作。所给出的对本发明的描述其目的在于示意和描述,并非是穷尽性的,也并非是要将本发明限定到所表述的形式。对于所属
技术领域
的普通技术人员来说,在不偏离本发明范围和精神的情况下,显然可以作出许多修改和变型。对实施例的选择和说明,是为了最好地解释本发明的原理和实际应用,使所属
技术领域
的普通技术人员能够明了,本发明可以有适合所要的特定用途的具有各种改变的各种实施方式。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1