CN102236705B - 数据库重放的细粒度同步 - Google Patents
数据库重放的细粒度同步 Download PDFInfo
- Publication number
- CN102236705B CN102236705B CN201110162901.7A CN201110162901A CN102236705B CN 102236705 B CN102236705 B CN 102236705B CN 201110162901 A CN201110162901 A CN 201110162901A CN 102236705 B CN102236705 B CN 102236705B
- Authority
- CN
- China
- Prior art keywords
- database
- command
- database command
- order
- previously
- 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.)
- Active
Links
Classifications
-
- 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/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
Abstract
提供了一种方法、设备和计算机可读介质,用于在重放数据库命令期间在不严格地保持数据库命令的全局顺序的情况下保持数据依赖性。获取处理获取由生产系统执行的数据库命令的工作负载。所获取的工作负载包括标识在生产系统执行数据库命令期间直接或间接地引用的数据库对象的对象标识符。所获取的工作负载还包括在执行命令期间数据库对象是否可能被读取或写入的指示。处理该工作负载以确定在执行命令期间被访问的对象在执行一个或多个其它命令期间被先前修改。在测试数据库系统上的重放处理阻止该命令被重放,直到一个或多个其它命令已经被重放而修改了该对象之后。
Description
相关申请的交叉引用
本申请要求了根据巴黎公约第4条于2010年5月6日提出的标题为“Fine是GrainSynchronizationForDatabaseReplay”的美国专利申请12/775,322的优先权。本申请涉及:(1)于2006年10月20日提出的标题为“DatabaseWorkloadCaptureAndReplayArchitecture”的美国专利申请60/853,271,其整体内容据此通过引用被并入如同在这里完全示出;(2)于2007年5月3日提出的标题为“DatabaseWorkloadCaptureAndReplayArchitecture”的美国专利申请11/800,122,其整体内容据此通过引用被并入如同在这里完全示出;(3)于2007年5月3日提出的标题为“DatabaseWorkloadReplayRemappingInfrastructure”的美国专利申请11/800,240,其整体内容据此通过引用被并入如同在这里完全示出;(4)于2007年5月3日提出的标题为“TransactionallyConsistentDatabaseWorkloadReplay”的美国申请11/800,238,其整体内容据此通过引用被并入如同在这里完全示出;(5)于2007年5月3日提出的标题为“Client-DrivenFunctionallyEquivalentDatabaseReplay”的美国专利申请11/800,224,其整体内容据此通过引用被并入如同在这里完全示出;(6)于2007年5月3日提出的标题为“CapturingDatabaseWorkloadWhilePreservingOriginalTranactionalAndConcurrencyCharacteristicsForReplay”的美国专利申请11/800,239,其整体内容据此通过引用被并入如同在这里完全示出。在此的一个或多个申请取消了在一个或多个相关申请或其起诉历史中任何权利要求范围的放弃权利,并告知美国专利商标局本申请的权利要求会在某些方面比所述一个或多个相关申请的范围更宽。总的来说,这六个相关申请被称为“工作负载获取和重放”申请。
技术领域
本发明涉及在一个数据库系统中获取工作负载并在另一个数据库系统中重放该工作负载。
背景技术
数据库系统
数据库管理系统(“DBMS”)管理数据库。数据库管理系统可包含一个或多个数据库服务器。数据库包括保存在永久性存储器机制,例如硬盘集合上的数据库数据和元数据。元数据定义数据库对象,例如关系表、表列、视图和触发器。
数据库应用和客户端通过向数据库服务器提交命令与数据库服务器进行交互,通过执行针对数据库的命令,使得数据库服务器完成对存储于数据库中的数据的操作。数据库命令采用符合数据库语言的数据库语句的形式。表示数据库请求的语言是结构化查询语言(SQL)。存在许多不同版本的SQL,一些版本是标准的,一些版本是专有的,还存在各种扩展。将SQL数据定义语言(“DDL”)指令发布给数据库服务器,以创建或配置数据库对象,例如表、视图或复杂数据类型。SQL/XML是一种在对象-关系型数据库中操纵XML数据时使用的常见SQL扩展。虽然例子是基于Oracle的SQL描述的,但在此提供的技术不局限于SQL的任何特殊版本或数据库命令的任何特殊方式。
数据库系统的测试和验证
大型的重要商业应用是复杂的并经受高度变动的负载和使用模式。本申请期望根据响应时间、吞吐量、正常运行时间和可用性来提供某些服务保证。有时,可能需要改变包括这种应用的系统。例如,这种改变会涉及升级系统的数据库服务器或修改配置。然而,在对生产系统做出任何改变以前,应该在测试系统中完成大量的测试和验证。为了确信生产系统中的改变不会产生问题(例如,错误或性能发布),一旦改变被引入生产系统,系统测试器应该试图使测试系统经受与生产系统在现实世界环境中实际经受的工作负载非常类似的工作负载。
许多其它方法仍未能够在测试系统中复制实际生产工作负载。按照一种方法,写测试脚本的集合来测试通常被执行的代码路径。虽然这种方法对于完成回归测试和功能测试可能有用,但这种方法不能模仿生产工作负载。这种方法通常只能在非常小的程度上施压给测试系统。
根据另一种方法,人类用户被要求使用测试系统,恰如测试系统是生产系统。然而,这种方法是非常随机和不确定的。这种方法常常不能再现实际生产环境中经受的负载模式。
数据库工作负载获取和重放
在Oracle公司开发的数据库工作负载获取和重放架构下,如已经在此通过引用结合的工作负载获取和重放应用所描述的,测试数据库系统按照生产数据库系统原始处理工作负载的相同提交顺序经受工作负载。然而,与生产数据库系统相比,测试数据库系统会花费更多或更少的时间来处理一些事务。因为事务顺序是严格地保持的,在处理其它事务以前测试系统会不必要地等待一些事务完成。严格地保持事务顺序对测试系统是次佳的。
另一方面,允许测试系统不按顺序地处理事务会引起测试系统维护的测试数据与在生产系统中维持的生产数据不同。换句话说,测试系统不按顺序执行的事务不再读取或修改生产系统中相同或相似的事务读取或修改的数据,导致产生错误表示生产工作负载的测试工作负载。此外,不按顺序执行的事务会引起测试系统中断,例如读取或修改尚未存在的数据时。
所需要的是一种允许测试系统以下面的方式处理工作负载的技术:(a)不被生产系统的执行顺序严格地束缚;以及(b)收敛到与生产系统相同或相似的数据状态,且以与生产系统不同的顺序处理事务时不中断。
在本节中描述的方法是可被采取的方法,但不是已经先前设想或已采取的方法。因此,除非另有陈述,不假定在本节中描述的任何方法仅仅借助于在本节中他们所包含的内容而获得现有技术的认可。
附图说明
本发明的各种实施例是通过举例而非限制的方式在附图中示出的,其中相似的参考标记指的是相似的元件并且其中:
图1示出按照此处所述实施例的其中获取并重放被提交给生产数据库服务器的工作负载到测试数据库服务器的系统的例子的框图;
图2A和2B为示出了按照此处所述实施例获取的样本工作负载中的信息的表;
图3A和3B是按照此处所述实施例为样本工作负载构造的依赖关系图;以及
图4举例说明了一种在其上实现此处所述实施例的计算机系统的框图。
具体实施方式
在随后的描述中,出于解释的目的,为了提供对本发明的彻底的了解,提出了很多具体细节。然而很明显的是,可以在没有这些具体细节的情况下实施本发明,在其它情况下,以框图形式示出公知的结构和装置以避免不必要地模糊本发明。
总的概述
按照一个实施例,生产数据库系统执行一个或多个从一个或多个客户端接收的命令。描述一个或多个命令的工作负载被获取,所获取的工作负载包括标识由生产数据库系统执行的一个或多个命令直接或间接地引用的数据库对象的对象标识符。所获取的工作负载还包括当生产系统执行命令时数据库对象是否被读取或写入的指示。所获取的对象标识符、所获取的对象是否被读取和/或写入的指示,以及所获取的数据库命令的工作负载可被处理,来确定生产系统执行命令时被访问的对象在生产系统先前执行一个或多个其他命令时先前已经被修改过。在重放期间,在测试数据库系统上的重放处理阻止访问先前已修改对象的命令的执行,直到一个或多个其它命令已经被执行来完成对该对象的一个或多个先前的修改。测试数据库系统可按照与在生产系统中原始执行命令的顺序不同的顺序执行命令,即便一个或多个命令依赖于一个或多个其它命令。在一个实施例中,虽然命令以不同顺序被执行,测试系统中维持的测试数据并不与生产系统中维持的生产数据不同。
当一个命令的执行引起生产系统访问在其它命令执行期间,先前被修改的对象的时候,这个命令可以被称为″依赖”于另一个命令。通过处理所获取的标识在命令执行期间被访问和/或修改的对象的工作负载,可确定一个命令对另一个命令的依赖性。此外,如果通过数据库服务器执行命令可能引起数据库服务器访问对象,则命令可以被称为“访问”对象。例如,执行引用视图的命令引起数据库服务器访问该视图所基于的表。依照此方式,命令可以被称为“访问”表或“使用”表,因为通过执行该命令,数据库服务器正在访问或使用表。作为另一例子,如果执行命令引起数据库服务器获取该表上的锁定,即使执行该命令时数据库服务器事实上并没有访问该表,命令也可以被称为“访问”表。
对象标识符可标识数据库中任何类型的数据库对象。在一个实施例中,对象标识符是用于标识表的表标识符。可以获取表标识符来标识被命令访问和/或修改的表。在一个特殊实施例中,可从存储被该命令访问和/或修改的表有关的信息的光标中标识被命令访问和/或修改的那些表。例如,光标可提供标识需要锁定以便执行该命令的表的信息。如果命令读取或修改表,则生产数据库系统可在执行该命令的处理中获取该表上的锁定。该锁定可以是许多不同锁定类型之一(例如,共享锁或互斥型锁),并且所获取的锁定类型可提供与该命令是否访问和/或修改过该表有关的信息。例如,在对象上具有互斥型锁的命令可假定为已经修改了该对象。在对象上具有共享锁的命令可假定为已经访问了该对象而未修改它。
可使用工作负载来确定第二命令依赖于第一命令。例如,如果在生产期间第二命令访问第一命令先前修改的对象,则第二命令依赖于第一命令。响应于确定第二命令依赖于第一命令,工作负载处理系统可存储在重放工作负载时第二命令不应被执行直到第一命令被执行之后的指示。例如,在测试系统上的重放处理可使用该指示来在重放期间阻止第二命令被执行直到第一命令被执行之后。在一个实施例中,在重放期间第一命令已经被执行之后该指示触发重放处理来执行第二命令。
在一个实施例中,在重放命令期间重放处理会遇到依赖于第一命令的第二命令。重放处理确定在重放期间第一命令还没有被执行。响应于确定第一命令还没有被执行,重放处理等待执行第二命令。在一个实施例中,通过访问与从中接收第一命令的重放驱动器相关联的计数器,重放处理确定第一命令还没有被执行。计数器记录由对应驱动器或通过该驱动器模拟的对应线程最近执行指令的计数。例如,当第一命令与比该线程最近执行指令的数量更大的计数相关联时,测试数据库系统可确定第一命令还没有被执行。
在一个实施例中,在接收第二命令之后,测试数据库系统接收并执行第一命令。重放处理确定第一命令已经被执行,作为响应,引起在测试数据库系统上执行第二命令。在一个实施例中,通过访问与从中第一命令被发送的线程相关联的计数,重放处理确定第一命令已经被执行。例如,当第一命令所关联的计数小于或等于该线程最近执行命令的计数时,重放处理可确定第一命令已经被执行。在一个实施例中,每个线程的计数仅存储为该线程最近执行命令的计数。
在一个实施例中,存储诸如依赖关系图的信息来表示生产系统中被执行的第二命令依赖于生产系统中先前执行的第一命令。可以基于生产系统获取的工作负载构成依赖关系图。在一个实施例中,在重放期间,在测试数据库系统已经执行第一命令之前,测试数据库系统不执行第二命令。可访问依赖关系图来确定第二命令依赖于第一命令。在一个实施例中,通过确定在重放期间第一命令是否已经被执行,重放处理确定依赖性是否得以满足。例如,可为每个线程存储共享计数器,以指示为该线程最后执行的命令。重放处理会检查与第一命令相关联的线程的共享计数器,以确定在重放期间该线程是否已经执行第一命令。如果在重放期间还没有执行第一命令,则依赖性没有被满足。响应于确定依赖性没有被满足,重放处理等待执行第二命令,直到在重放期间第一命令已经被执行。等待第一命令的同时可执行不直接或间接地依赖于第一命令的其它命令。
在一个实施例中,用于使命令的重放同步的信息不包括在生产系统中执行第一或第二命令的定时。换句话说,在没有涉及生产系统执行命令的逻辑时间的情况下,仅仅基于依赖关系图可以使命令同步。在测试系统中重放工作负载之前,不需要确定重放命令的全局顺序,该全局顺序包括提交变化的重放命令的全局顺序。基于命令顺序和这些命令访问或修改的对象标识符可以构成依赖关系图。一旦构成依赖关系图,可以按照任何满足依赖关系图的顺序重放命令。在一个实施例中,在重放期间基于数据依赖性信息动态地实现重放系统执行命令的顺序。依照此方式,在重放期间,无需被重放命令的全局顺序,就可以确保数据依赖性,无论那些命令是否将提交变化。在一个特殊实施例中,依赖关系图存储包括第一命令和第二命令的命令对。在重放期间,第二命令不会被执行,直到第一命令已经被执行。当命令之间没有直接的或间接的数据依赖性时,它们可以依照关于彼此的任何顺序被重放。
在一个实施例中,为了加强的目的,不需要记录命令之间的间接依赖性。例如,如果第三命令来自于与较早的第二命令相同的线程,则第三命令将在重放期间跟随在第二命令之后,无论在第三命令和第二命令之间是否存储依赖性。依照此方式,可以通过仅仅规定在第一命令之后将要执行第二命令,规定第三命令和第二命令都将在第一命令之后执行的依赖性得以确保。
获取工作负载
在工作负载获取和重放应用中描述工作负载获取和重放架构,其在此已经通过引用被结合。这些应用描述获取生产系统的工作负载、处理该工作负载以为重放准备该工作负载、在测试系统上重放工作负载和监视测试系统性能的技术。所获取的工作负载可包括与数据库的初始状态有关的信息和描述调用集合或针对数据库的数据库命令的信息。所获取的工作负载也可以包括事务性数据,例如系统改变次数(SystemChangeNumbers,SCN),其描述其中针对数据库调用被接收、执行或提交的相对时间。数据库的初始状态、所发布命令的集合以及所发布命令相关联的SCN定义执行给定数据库命令所针对的数据库状态。
在工作负载获取和重放应用中描述的技术使测试系统按照与生产系统相同的提交顺序处理相同工作负载。此处所述的技术允许测试系统以不被生产系统的执行顺序严格束缚的方式处理工作负载。此处所述的用于获取、处理、重放和监视的技术不受限于工作负载获取和重放应用中提供的那些技术。
图1为示出一个其中获取并重放被提交给生产数据库服务器的工作负载到测试数据库服务器的系统的例子的框图。示出的例子包括客户端104A-N、应用服务器106A-N、生产数据库服务器108、生产数据库112、所获取的工作负载114、重放驱动器116A-N、测试数据库服务器118和测试数据库120,其中测试数据库服务器118包括用于重放从重放驱动器116A-N接收的重放命令的重放处理。生产数据库服务器108包括获取处理110A-N。
客户端104A-N可以是分离的计算机或在同一计算机上执行的分离处理。例如,在一个实施例中,客户端104A-N为互联网浏览器(例如,MozillaFirefox),其在可通信地耦合至该互联网的分离计算机上运行。在一个实施例中,客户端104A-N经由该互联网发送请求到应用服务器106A-N和从应用服务器106A-N接收响应。
应用服务器106A-N可以是分离的计算机或在同一计算机上执行的分离处理。例如,在一个实施例中,应用服务器106A-N是网络服务器调用的处理,其在可通信地耦合至该互联网的分离服务器上运行。在一个实施例中,应用服务器106A-N经由该互联网接收来自客户端104A-N的请求和发送响应到客户端104A-N。应用服务器106A-N的每一个可实现用于响应来自客户端104A-N的不同类型请求的不同功能。
在服务于来自客户端104A-N的请求时,应用服务器106A-N可能需要从数据库检索数据和/或存储数据到数据库。为实现这个过程,在一个实施例中,应用服务器106A-N与生产数据库服务器108建立数据库会话。在这些会话内应用服务器106A-N发送数据库命令到生产数据库服务器108。例如,这种数据库命令可包括结构化查询语言(StructuredQueryLanguage,SQL)选择语句。
生产数据库服务器108执行与生产数据库112有关的这些数据库命令。作为执行这些数据库命令的结果,生产数据库服务器108可在生产数据库112中存储数据和/或从生产数据库112中检索数据。生产数据库服务器108以事务性方式执行两个或更多数据库命令,从而在生产数据库112中不会永久性造成任何一个在单个事务中的数据库命令的影响,除非可以永久性产生数据库命令的所有影响。生产数据库服务器108可返回从生产数据库112检索的作为执行某些特定数据库命令(例如SQL选择语句)的结果的数据到应用服务器106A-N。应用服务器106A-N可在形成对客户端104A-N的响应时使用这种检索数据。
在一个实施例中,生产数据库服务器108包括获取处理110A-N。获取处理110A-N可实现为同时执行的分离处理或同一处理中同时执行的线程,例如。在一个实施例中,获取处理110A-N共同地、透明地、不干扰地获取生产数据库服务器108从外部实体(例如,应用服务器106A-N和/或客户端104A-N)接收的所有工作负载。
正如此处使用的那样,术语“工作负载(workload)”指的是称为“工作负载单元(workloadunits)”的离散的、具有独立意义的单元。在一个实施例中,每个“工作负载单元”对应于单独的“用户请求(userrequest)”(例如,源于(a)客户端104A-N之一、(b)应用服务器106A-N之一或(c)在生产数据库服务器108外部的其它处理的请求)。在一个例子中,工作负载包括描述以下内容的信息:被请求由生产数据库服务器执行的一个或多个命令、与一个或多个命令相关联的一个或多个数据库对象的对象标识符,以及对一个或多个命令是否访问和/或修改所述对象标识符的指示。
在一个实施例中,描述一个或多个命令的信息包括命令的实际文本,例如SQL命令的SQL文本。作为替代,描述一个或多个命令的信息可包括标识一个或多个命令或一个或多个命令的一个或多个部分的命令标识符。作为选择,描述命令的信息可以保存为二进制或压缩格式。描述命令的信息可以依照任何方式以任何格式保存,测试数据库系统可使用这些命令来重放在生产数据库系统上原始执行的命令。在一个实施例中,存储在所获取工作负载中的命令需要进一步处理,以便准备要在测试数据库系统上重放的命令。
获取处理110A-N存储并记录这种工作负载为所获取工作负载114。因此,所获取工作负载114可包含在指定时间间隔期间获取的工作负载,此处被称为“记录间隔(recordinginterval)”。在一个实施例中,所获取工作负载114表示生产数据库服务器108的实际的真实世界使用,其使用不特别地用于任何测试目的。
在一个实施例中,获取处理110A-N最初将所获取工作负载写入输入存储缓冲器。分批地压缩和写出存储在这些输入存储缓冲器中的数据到永久性存储器。因为涉及永久性存储器的I/O事务不需要在获取每个单独的工作负载单元之后被执行,所以降低了工作负载获取对生产数据库服务器108性能的影响。
获取用于确定数据依赖性的信息
此处所述的技术使得重放的确定基于一个命令是否依赖于另一个命令,而不是以同样提交顺序严格地重放工作负载。在一个实施例中,获取处理获取标识被在生产系统上执行的命令访问或修改的对象的信息。所获取的信息可以是所获取工作负载的一部分,或者所获取的信息可以是与所获取的工作负载分开获取的。所获取的信息可以是能被处理以用于确定特定命令访问一个或多个由一个或多个其它命令最后修改的对象的任何信息。在一个实施例中,所述特定命令与下列内容相关联:(a)与提交一个或多个对象改变的提交命令相同的对象标识符,以及(b)比提交命令相对较晚的执行时间。该特定命令和一个或多个其它命令可以保存在依赖关系图中。在一个实施例中,重放过程读取该命令和依赖关系图,并基于该依赖关系图,等到执行一个或多个其它命令之后,在测试数据库系统中执行该特定命令。在一个实施例中,重放驱动器发送对应于生产系统的客户端的命令线程。测试数据库系统上的重放处理重放命令直到重放处理到达由于特定命令与来自另一个线程的在前命令之间的数据依赖性而还不能执行的特定命令。然后重放过程等待来自其它线程的在前命令被执行,然后一旦检测到这个事件就执行该特定命令。
所获取的信息可包括标识两个命令之间的潜在的或可能的数据依赖性的任何信息。在一个实施例中,所获取信息包括时序元素和数据元素。例如,所获取的信息可包括SCN、标识与两个或更多命令相关的对象的对象标识符,和表示两个或更多命令中的每一个是否访问和/或修改该对象的指示。
在一个实施例中,利用在提交针对数据库的命令时增加SCN,生产系统获取命令和与该命令相关联的SCN。与具有较高SCN的命令相比,具有较低SCN的命令与数据库的较早状态相关联。在一个例子中,较早的数据库命令提交变化给生产系统中的数据库,并且较晚数据库命令读取生产系统中的数据库。用于该命令的SCN可用来确定具有较低SCN的较早命令在具有较高SCN的较晚命令之前被执行。换句话说,SCN可用来确定用于两个命令的相对时序元素。在一个例子中,在较早命令以前数据库不反映该变化,但是该数据库于该较早命令之后且于较晚命令之前反映该变化。
如果在生产系统中,其它命令不先修改特定命令访问的对象,则在测试系统中,可在其它命令之前重放该特定命令。在上述例子中,只要在先修改较晚命令访问的对象的任何命令之前没有重放较晚命令,测试系统就可在较早命令之前重放较晚命令。例如,虽然在生产系统中在读取或修改表2的命令之前可能已经执行修改表1的命令,但由于执行修改表1的命令不影响读取或修改表2的命令的结果,所以在测试系统中在修改表1的命令之前可重放读取或修改表2的命令。
另一方面,在生产系统中在先前修改表2的命令之前可不重放读取或修改表2的命令。不按顺序重放命令会引起测试系统维护的数据库状态与生产系统维护的数据库状态不同。
在一个实施例中,基于标识潜在的或可能的数据依赖性信息,做出数据依赖性判定并构建数据依赖关系图。在一个特定实施例中,来自与命令相关联的事务性光标的光标信息用来确定可能由该命令访问或修改的对象标识符,以及用其来确定是可能修改了还是仅仅可能访问了那些对象标识符的指示。例如,在处理命令时,光标可表示在表1上获取互斥型锁和在表2上获取非互斥型锁或共享锁。基于该光标信息,该命令可被称为已经访问和修改表1并且在没有修改表2的情况下访问表2。在某些情况下,在没有实际修改表的情况下命令可获取该表上的互斥型锁。在一个实施例中,即使命令没有实际修改该表,由所获取的互斥型锁确定该命令已经修改该表。依照此方式,所有潜在的数据依赖性可以通过定义逻辑数据依赖性来保持,以在没有确定实际数据依赖性的情况下包括实际数据依赖性。相应地,正如此处使用的那样,术语“数据依赖性”可以指逻辑数据依赖性或实际数据依赖性。
在一个实施例中,所获取的对象标识符表示在命令中直接或间接地被实际引用的对象。在一个例子中,命令可直接引用表,并且可以获取标识该表的对象标识符。在另一个例子中,引用视图的命令可间接地访问该视图引用的表。获取标识该表的对象标识符以便确保针对该视图引用的表的正确状态执行引用该视图的命令。在一个实施例中,由与锁定相关联的对象标识符反映针对对象的直接和间接引用。
图2A和2B举例说明可从生产数据库系统获取并被处理以产生依赖关系图的示例性工作负载信息。如图所示,工作负载信息保存在表中,例如,存储在如图4所示的计算机系统上的表。然而,本领域技术人员能够理解可以采用各种其它方式表示这种信息。
图2A示出了针对生产数据库执行的调用。每个提交改变生产数据库的状态并使得SCN增加。例如,由于直到执行来自线程2的第一读取T1调用之后,才提交更新T1调用,所以来自线程1的更新T1调用并不影响来自线程2的第一读取T1调用。然而,来自线程2的第二和第三读取T1调用受到更新T1调用的影响,因为它们在提交更新T1调用之后被执行。基于图2A中显示的信息,可以确定来自线程2的第二和第三读取T1调用必须等待来自线程1的提交调用。图2B示出了另一个表来列举示例性调用、这些调用读取的表和这些调用写入的表。如图所示,读取T1(2)和读取T1(4)都在修改表T1的提交(1)之后读取表T1并得到SCN。
处理和重放工作负载
该工作负载获取和重放应用描述了:按照从生产系统获取的SCN,以生产系统处理工作负载的相同提交顺序在测试系统上重放工作负载。例如,从三个客户端接收调用的生产系统将使用三个重放驱动器在三个线程上仿真来自这三个客户端的调用。所有这些重放驱动器重放的调用将以与在生产系统上执行调用的相同的全局提交顺序在测试系统上被执行。
按照此处所述的技术,在重放期间不必严格地保持生产中调用的全局提交顺序。在测试系统上执行命令以前不需要确定出这些命令的重放顺序。重放驱动器上的线程模拟最初提交的生产系统上执行的的命令的客户端。在重放期间重放驱动器提交来自不同线程的命令到测试系统。测试系统接收这些命令并且以保持由依赖关系图指定依赖性的方式执行这些命令。依照此方式,在重放期间基于所规定的数据依赖性动态地实现全局执行顺序。
在一个实施例中,如果对特定命令无法确定数据依赖性,则存储数据依赖性会引起该特定命令等待在该特定命令之前事先执行的所有命令。在同一或另一个实施例中,存储数据依赖性会引起在该特定命令之后先前执行的所有命令等待该特定命令。
参照图1,在获取处理110A-N已经在所获取的工作负载114中存储了工作负载之后,所获取的工作负载114可经历自动化处理。可以按照非实时的方式完成这种自动化处理。例如,在获取处理110A-N已经完成在所获取工作负载114中存储数据之后,生产数据库服务器108外部的处理可处理所获取的工作负载114。在生产数据库服务器108进一步服务于来自应用服务器106A-N的请求的同时可以完成这种处理。因此,在对生产数据库服务器108的操作的没有任何干扰或影响的情况下,可以完成对所获取工作负载114的处理。在一个实施例中,处理该工作负载使得为重放驱动器116A-N的每一个生成依赖关系图和命令列表。
在一个实施例中,在所获取工作负载114已经经历如上所述的处理之后,以与从客户端104A-N中相应的客户端或应用服务器106A-N中相应的应用服务器发送命令给生产数据库服务器108的相同方式,重放驱动器116A-N的每一个从已处理的工作负载发送命令到测试数据库服务器118。重放驱动器116A-N可实现为分离的并行执行的处理或同一处理中并行执行的线程,例如。在一个实施例中,重放驱动器116A-N发送它们各自的命令到测试数据库服务器118,其访问依赖关系图以在不需要命令的全局执行顺序的情况下保持依赖性。
在一个实施例中,重放驱动器116A-N的每一个可重放多个分离的获取处理110A-N获取的工作负载。因此,在一个实施例中,重放驱动器116A-N的数量可以比获取处理110A-N的数量少。重放驱动器116A-N的每一个可以是多线程的。
测试数据库服务器118在一个或多个方面可以不同于生产数据库服务器108。例如,测试数据库服务器118可能是生产数据库服务器108的已升级版本。对于另一个例子,测试数据库服务器118可能是生产数据库服务器108的相同品牌和版本,但是测试数据库服务器118可能被配置得(例如,在一个或更多设置中)不同于生产数据库服务器108。对于另一个例子,测试数据库服务器118可能是完全不同于生产数据库服务器108的数据库服务器品牌。测试数据库服务器118可在机器上运行,该机器具有与运行生产数据库服务器108的机器硬件不同的硬件。测试数据库服务器118可与操作系统结合运行,该系统不同于生产数据库服务器108的运行结合的操作系统。使测试数据库服务器118承受和生产数据库服务器108实际承受相同工作负载,其目的可在于确定在测试数据库服务器118和生产数据库服务器108之间的区别,和/或确定那些数据库服务器运行环境的区别是否是容许的或合乎需要的区别。
测试数据库服务器118处理测试数据库服务器118从重放驱动器116A-N接收的命令。如果工作负载包括数据库命令,则测试数据库服务器118执行与测试数据库120有关的这些数据库命令。作为执行这些数据库命令的结果,测试数据库服务器118可在测试数据库120中存储数据,和/或从测试数据库120中检索数据。如果依赖关系图指定特定命令将等待一个或多个其它命令,则在对测试数据库服务器118执行该特定命令之前,测试数据库服务器118将等待一个或多个其它命令被执行。当测试数据库服务器118等待一个或多个其它命令被执行时,测试数据库服务器118执行来自其它重放驱动器116A-N的命令。响应于执行一个或多个其它命令,测试数据库服务器118检测到该特定命令正在等待被执行并使得该特定命令被执行。测试数据库服务器118可返回从测试数据库120检索的作为执行某些数据库命令(例如SQL选择语句)的结果的数据到重放驱动器116A-N。
在图1所示的实施例中,存在该生产数据库服务器的一个实例和该测试数据库服务器的一个实例。然而,在可供选择的实施例中,可以有多个生产数据库服务器的实例,所有实例执行与生产数据库112有关的数据库操作。另外,在可供选择的实施例中,可以有多个测试数据库服务器的实例,所有实例执行与测试数据库120有关的数据库操作。在一个实施例中,生产数据库服务器实例的数目不同于测试数据库服务器实例的数目。
测试数据库120可以在一个或多个方面不同于生产数据库112。例如,在测试数据库120与生产数据库112中,逻辑关系型数据库结构的物理分布和存储在磁盘上的方式可能不同。因此,虽然存储于测试数据库120中数据中呈现的值会收敛到与存储在生产数据库112中的数据相同的值,但在两个数据库之间将那些值存储在磁盘上采用的方式可以不同。另外,测试数据库服务器120中划分关系表的方式可不同于生产数据库112中划分对应关系表的方式。另外,测试数据库120中为关系表构造(或不构造)的索引可不同于生产数据库112中为对应关系表构造(或不构造)的索引。可评估测试数据库服务器118和/或测试数据库120的性能,以确定测试系统和生产系统之间的区别是否是容许的或合乎需要的区别。
记录间隔可开始于生产数据库112已经处于某一状态的时候。例如,在记录间隔开始的时候,生产数据库112可能已经包含一个或多个可能已经填充了数据的逻辑数据结构(例如,数据库表、存储的过程、触发器、视图、索引等等)。如果到重放驱动器116A-N开始“重放”所获取工作负载114到测试数据库服务器118时为止,测试数据库120还未以相同状态包含这些结构,则在与测试数据库120有关的被重放工作负载中执行数据库命令可能产生错误。因此,在一个实施例中,在重放驱动器116A-N开始重放所获取工作负载114到测试数据库服务器118以前,测试数据库120置于与生产数据库108相同的逻辑状态中。例如,这可以通过“备份”生产数据库112并且从产生的备份数据对测试数据库120进行恢复来实现。在一个实施例中,在生产数据库112处原始工作负载即将被接收的时刻或稍早于该时刻,进行这种备份。这基本上获取了生产数据库112的在前工作负载状态。因此,当备份数据相对于测试数据库120被恢复时,测试数据库120的状态非常类似于在接收到原始工作负载之前生产数据库112所存在的状态。
重放驱动器116A-N重放所获取的工作负载114到测试数据库服务器118的时间间隔可以与获取处理110A-N截取和存储工作负载的时间间隔完全不相重叠且不同时。例如,获取处理110A-N会在第一个时间间隔期间截取和记录所获取的工作负载114。在第一个时间间隔结束之后的几个小时、几天乃至几个星期,在与第一个时间间隔的任何部分都不同时的第二个时间间隔期间,重放驱动器116A-N可重放所获取的工作负载114到测试数据库服务器118。
在一个实施例中,客户端104A-N和应用服务器106A-N不需要重放所获取的工作负载114到测试数据库服务器118。因为重放驱动器116A-N处理重放所获取的工作负载114到测试数据库服务器118,所以不必在重放系统中复制客户端104A-N或应用服务器106A-N。这样做有利于节省资源。
图3A和3B举例说明了列出调用和要等待的调用的示例性依赖关系图。例如,来自图2A和2B的信息可用来构成如图3A所示的依赖关系图,其规定读取T1(2)、读取T1(3)和读取T1(4)调用都等待提交(1)调用。如图所示,依赖关系图保存在表中,例如,存储在图4所示的计算机系统上的表。然而,本领域技术人员能够理解可以采用各种其它方式表示这种信息。
通过去除来自该依赖关系图的冗余信息可以优化该图。例如,假设表达式“B->A”指的是调用B在被执行前等待调用A。如果B->A并且B->C,且如果(1)C与A来自同一线程以及(2)C的调用计数器小于A,则可以从该图中移走条目B->C。换句话说,如果调用A在调用C之后被同一线程发送,则明确地规定调用B将等待调用A和C是冗余的。在此情况下,等待调用A也暗示等待调用C。在一个实施例中,该图仅仅存储B->A,而不存储B->C。
作为另一例子,假定B->A和D->A,且如果(1)D和B来自同一线程以及(2)D的调用计数器大于B,则可以从该图中移走条目D->A。换句话说,如果调用D在调用B之后被同一线程发送,则明确地规定调用A将在调用B和D之前执行是冗余的。在此情况下,在调用B之前执行调用A也暗示在调用D之前执行调用A。在一个实施例中,该图仅仅存储B->A,而不存储D->A。
作为又一个例子,如果A和B来自于同一线程,可以从依赖关系图中移走依赖性B->A,因为在一个实施例中,来自同一线程的调用执行顺序是被保持的。
通过比较图3A和图3B所示,在示例中,从依赖关系图中移走读取T1(3)调用是由于读取T1(3)调用与提交(1)调用出现在同一线程中并将在提交(1)调用之后被重放,即使没有使用依赖关系图也是这样。此外,从依赖关系图中移走读取T1(4)调用是由于读取T1(4)调用与读取T1(2)调用出现在同一线程中并将在读取T1(2)调用之后被重放,即使没有使用依赖关系图也是这样。利用该依赖关系图,测试数据库系统将在提交(1)调用之后重放读取T1(2)调用。
在执行读取T1(2)调用时,测试数据库系统使用依赖关系图来确定读取T1(2)依赖于提交(1)。然后,测试数据库系统确定提交(1)是否已经被重放。如果提交(1)还没有被重放,则测试数据库系统等待执行读取T1(2),直到提交(1)被重放。测试数据库系统会在提交(1)调用之前执行读取T2、更新T2和来自进程3的提交(2)调用,即使在生产系统中这些调用是在提交(1)之后出现的。修改表T2的这些命令的在前执行不影响涉及表T1的命令的执行。
在一个实施例中,每个相应的重放驱动器存储那些由生产系统中的对应客户端提交的命令。例如,与线程1相关联的重放驱动器存储那些生产系统中第一线程提交的命令,与线程2相关联的重放驱动器存储那些生产系统中第二线程提交的命令。测试数据库服务器存储规定来自线程2的读取T1(2)将等待来自线程1的提交(1)的依赖关系图的一部分。当测试数据库系统重放该命令时,测试数据库系统等待执行读取T1(2)命令,直到提交(1)已经被执行。
监控性能
工作负载获取和重放应用进一步描述了监控测试系统的性能,并描述了做出是否用测试系统替换生产系统的判定。例如,在处理与生产系统相同的工作负载时,当测试系统展现出良好性能的时候,做出用测试系统替换生产系统的判定。此处所述的技术不需要监控测试系统或生产系统的性能。如果监控两个系统之一的性能,任何已知的或者最近开发的性能监控技术可用于与此处所述的技术相结合。
在一个实施例中,将测试数据库的状态与生产数据库的状态比较,来确保测试数据库的状态收敛到生产数据库的状态。在同一个或另一个实施例中,可以将测试环境中执行命令的结果与生产环境中执行命令的结果相比较。在另一个实施例中,可以将测试系统中执行命令的相对时序与生产系统中执行命令的相对时序相比较。
性能数据可用来确定是否使用测试数据库系统作为生产数据库系统。例如,如果测试数据库的状态收敛到生产数据库的状态,如果测试数据库系统比生产数据库系统运行更有效或处理命令更迅速,则与生产数据库系统相比,测试数据库系统可被确定为展现出良好性能。
硬件概述
根据一个实施例,通过一个或多个专用的计算设备实现此处所述的技术。该专用的计算设备可以是硬连线的以实现这些技术,或可包括数字电子设备,比如一个或多个专用集成电路(ASIC)或被永久性编程以实现这些技术的现场可编程门阵列(FPGA),或可包括一个或多个被编程的通用硬件处理器以依据固件、内存、其它存储器或组合中的程序指令实现这些技术。这种专用的计算设备也可以组合常规硬连线逻辑、ASIC或具有常规程序的FPGA以实现该技术。该专用的计算设备可以是台式计算机系统、便携式计算机系统、手持设备、网络设备或任何采用硬连线和/或程序逻辑以实现这些技术的其它设备。
例如,图4是示出了在其上可以实现此处所述技术的计算机系统400的框图。计算机系统400包括总线402或其它用于交换信息的通信机制,和耦接到总线402用于处理信息的的硬件处理器404。例如,硬件处理器404可以是通用微处理器。
计算机系统400还包括主存储器406,比如随机存取存储器(RAM)或其它动态存储器,其耦接至总线402用于存储信息和处理器404要执行的指令。主存储器406也可以用于在处理器404要执行的指令的执行期间存储临时变量或其它中间信息。当被保存在可访问处理器404的存储介质中时,这种指令使计算机系统400反映为被定制以执行指令中规定的操作的专用机。
计算机系统400还包括耦合至总线402的只读存储器(ROM)408或其它静态存储设备,以用于为处理器404存储静态信息和指令。存储设备410,比如磁盘或光盘,被提供并耦合至总线402以用于存储信息和指令。
计算机系统400可以经由总线402耦合到显示器412,比如阴极射线管(CRT),以用于显示信息给计算机用户。包括字母数字以及其它键的输入设备414耦合至总线402,以用于传递信息和命令选择给处理器404。用户输入设备的另一类型是光标控制装置416,比如鼠标、轨迹球或光标方向键,以用于传递方向信息和命令选择给处理器404,且用于控制在显示器412上的光标移动。输入设备通常在两个坐标轴上具有两个自由度,第一坐标轴(例如,x)和第二坐标轴(例如,y),其允许设备指定平面中的位置。
计算机系统400可使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑实现此处所述的技术,该程序逻辑与计算机系统结合使得计算机系统400或对其编程成为专用机。按照一个实施例,响应于处理器404执行包含在主存储器406中的一个或多个指令的一个或多个序列,计算机系统400实现在此描述的技术。从另一个存储介质,比如存储设备410,将这种指令读入主存储器406。执行包含在主存储器406中的指令序列令处理器404完成此处所述的处理步骤。在替代的实施例中,硬连线电路可用于代替软件指令或与软件指令结合。
正如此处使用的那样,术语“存储介质”指的是存储使机器以特定的方式运行的数据和/或指令的任何介质。这种存储介质可包含非易失性介质和/或易失性介质。非易失性介质包括,比如光盘或磁盘,诸如存储设备410。易失性介质包括动态存储器,比如主存储器406。存储介质的常见形式包括,例如,软盘、柔性磁盘、硬盘、固态驱动、磁带,或任何其它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔状图案的任何物理介质、RAM、PROM、以及EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盘盒。
存储介质不同于传输介质但可用于结合传输介质。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,其包含组成总线402的电线。传输介质还可以采取声或光波的形式,诸如那些产生于无线电和红外线数据通信期间的声或光波。
各种形式的介质可涉及承载一个或多个指令的一个或多个序列到处理器404以用于执行。例如,这些指令最初可在磁盘或远程计算机的固态驱动器上承载。该远程计算机可将这些指令加载到动态存储器中,并经由电话线使用调制解调器发送这些指令。位于计算机系统400的调制解调器能接收电话线上的数据,并使用红外线发射器将数据转换为红外信号。红外检测器可接收承载于红外信号中的数据,并且适当的电路可将数据置于总线402上。总线402传送数据到主存储器406,处理器404从主存储器406检索和执行指令。由主存储器406接收到的指令可以可选地在被处理器404执行之前或之后存储在存储设备410上。
计算机系统400还包括耦合至总线402的通信接口418。通信接口418提供耦合至连接到本地网络422的网络链路420的双向数据通信。例如,通信接口418可以是综合服务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器、或调制解调器,以用于提供数据通信连接到相应类型的电话线。作为另一例子,通信接口418可以是局域网(LAN)卡以用于提供数据通信连接到兼容LAN。还可以实现无线链路。在任何这种实现方式中,通信接口418发送和接收承载表示各种类型信息的数字数据流的电、电磁或光学信号。
网络链路420通常通过一个或多个网络提供数据通信到其它数据设备。例如,网络链路420可通过本地网络422提供连接到主机计算机424或到由互联网服务供应商(ISP)426操作的数据设备。ISP426反过来通过全球分组数据通信网络(现在通常称为“互联网”)428提供数据通信业务。本地网络422和互联网428都使用承载数字数据流的电、电磁或光学信号。经由各种网络的信号和在网络链路420上并经由通信接口418的信号是传输介质的示例形式,这些信号承载数字数据往返于计算机系统400。
计算机系统400可经由网络、网络链路420和通信接口418发送消息和接收包括程序代码的数据。在互联网示例中,服务器430可经由互联网428、ISP426、本地网络422和通信接口418为应用程序发送所请求的代码。
接收到的代码可按原样由处理器404执行,和/或保存在存储设备410中,或存储在其它非易失性存储器中用于稍后执行。
在上面的说明书中,本发明的实施例已经参照各种实现方式所不同的很多具体细节进行了描述。因此,本说明书和附图意在举例说明,而不是限制性的意义。
按照本申请的一个方面,公开了一种获取和处理由一个或多个数据库服务器针对数据库执行的数据库命令的方法,所述方法包括:存储用于标识以下内容的信息:被第一数据库命令修改的一个或多个数据库对象,所述第一数据库命令由执行针对所述数据库的命令的所述一个或多个数据库服务器执行;以及被第二数据库命令访问的所述一个或多个数据库对象,所述第二数据库命令由执行针对所述数据库的命令的一个或多个数据库服务器执行;至少部分基于被存储的信息,通过确定该第二数据库命令访问由第一数据库命令先前修改的数据库对象,确定该第二数据库命令依赖于该第一数据库命令;其中该方法由一个或多个专用的计算设备完成。
按照本申请的另一个方面,公开了一个或多个存储指令的存储介质,当这些指令被一个或多个计算设备执行的时候,通过促使实现上述方法,促使实现获取和处理数据库命令,该数据库命令由一个或多个数据库服务器针对数据库执行。
仍然按照本申请的另一个方面,公开了一种在数据库系统上重放数据库命令的方法,所述方法包括:存储表示第二先前执行的数据库命令依赖于第一先前执行的数据库命令的信息;接收在重放数据库命令期间待执行的第二先前执行的数据库命令;使用所存储的信息来确定第二先前执行的数据库命令依赖于第一先前执行的数据库命令;确定在重放数据库命令期间第一先前执行的数据库命令还未被执行;响应于确定在重放数据库命令期间第一先前执行的数据库命令还未被执行,等待引起第二先前执行的数据库命令被执行,直到第一先前执行的数据库命令的执行之后;其中该方法由一个或多个专用的计算设备完成。
仍然按照本申请的另一个方面,公开了一个或多个存储指令的存储介质,当这些指令被一个或多个计算设备执行时,通过促使实现上述方法而促使实现在数据库系统上重放数据库命令。
Claims (20)
1.一种获取和处理由一个或多个数据库服务器针对数据库执行的数据库命令的方法,所述方法包括:
存储用于标识以下内容的信息:
被第一数据库命令修改的一个或多个数据库对象,所述第一数据库命令由执行针对所述数据库的命令的所述一个或多个数据库服务器执行;以及
被第二数据库命令访问的一个或多个数据库对象,所述第二数据库命令由执行针对所述数据库的命令的一个或多个数据库服务器执行;
至少部分基于被存储的信息,通过确定该第二数据库命令访问由第一数据库命令先前修改的数据库对象,确定该第二数据库命令依赖于该第一数据库命令;
至少部分基于确定该第二数据库命令依赖于该第一数据库命令,在依赖关系图中存储规定所述第一数据库命令的第二数据库命令的条目;
其中所述依赖关系图存储多个条目,其中每个条目用于单独的数据库命令,并且其中每个条目规定该单独的数据库命令所依赖的一个或多个其他数据库命令。
2.如权利要求1所述的方法,还包括:
基于所述依赖关系图,在重放数据库命令期间,阻止第二数据库命令被执行,直到第一数据库命令被执行之后。
3.如权利要求1所述的方法,还包括:
基于所述依赖关系图,在重放数据库命令期间,在第一数据库命令被执行之后,触发第二数据库命令以被执行。
4.如权利要求1所述的方法还包括,在数据库命令重放期间:
接收待执行的第二数据库命令;
确定在重放期间第一数据库命令还未被执行;
响应于确定第一数据库命令在重放期间还未被执行,等待引起第二数据库命令被执行;
在等待之后,确定在重放期间第一数据库命令已经被执行;
响应于确定第一数据库命令在重放期间已经被执行,引起第二数据库命令被执行。
5.如权利要求4所述的方法,其中确定第一数据库命令还未被执行包括:
访问记录与第一数据库命令相关联的线程最新执行的命令的计数的计数器。
6.如权利要求1所述的方法,其中由第一数据库命令先前修改的数据库对象是在一个或多个数据库服务器执行第一数据库命令期间被互斥锁定的表。
7.一种在数据库系统上重放数据库命令的方法,所述方法包括:
在依赖关系图中存储用于第二先前执行的数据库命令的条目,该条目指定第一先前执行的数据库命令;
接收在重放数据库命令期间待执行的第二先前执行的数据库命令;
使用所述依赖关系图来确定第二先前执行的数据库命令依赖于第一先前执行的数据库命令;
确定在重放数据库命令期间第一先前执行的数据库命令还未被执行;
响应于确定在重放数据库命令期间第一先前执行的数据库命令还未被执行,以及第二先前执行的数据库命令依赖于第一先前执行的数据库命令,等待引起第二先前执行的数据库命令被执行,直到第一先前执行的数据库命令的执行之后。
8.如权利要求7所述的方法,其中所述依赖关系图不包括在一个或多个数据库服务器上先前执行第一或第二数据库命令的逻辑时间。
9.如权利要求7所述的方法,其中至少部分基于下述确定产生所述依赖关系图:在先前执行第一先前执行的数据库命令和第二先前执行的数据库命令期间,第二先前执行的数据库命令引用在执行第一先前执行的数据库命令期间被互斥锁定的对象。
10.如权利要求7所述的方法,其中确定在重放数据库命令期间第一先前执行的数据库命令还未被执行包括:
访问记录与第一数据库命令相关联的线程最新执行的命令的计数的计数器。
11.一种获取和处理由一个或多个数据库服务器针对数据库执行的数据库命令的系统,所述系统包括:
用于存储用于标识以下内容的信息的装置:
被第一数据库命令修改的一个或多个数据库对象,所述第一数据库命令由执行针对所述数据库的命令的一个或多个数据库服务器执行;以及
被第二数据库命令访问的一个或多个数据库对象,所述第二数据库命令由执行针对所述数据库的命令的所述一个或多个数据库服务器执行;
用于至少部分基于被存储的信息,通过确定该第二数据库命令访问由第一数据库命令先前修改的数据库对象,确定该第二数据库命令依赖于该第一数据库命令的装置;
用于至少部分基于确定该第二数据库命令依赖于该第一数据库命令,在依赖关系图中存储规定所述第一数据库命令的第二数据库命令的条目的装置;
其中所述依赖关系图存储多个条目,其中每个条目用于单独的数据库命令,并且其中每个条目规定该单独的数据库命令所依赖的一个或多个其他数据库命令。
12.如权利要求11所述的系统,还包括:
用于基于所述依赖关系图,在重放数据库命令期间阻止第二数据库命令被执行,直到第一数据库命令被执行之后的装置。
13.如权利要求11所述的系统,还包括:
用于基于所述依赖关系图,在重放数据库命令期间,在第一数据库命令被执行之后,触发第二数据库命令以被执行的装置。
14.如权利要求11所述的系统,还包括用于在数据库命令重放期间进行以下操作的装置:
接收待执行的第二数据库命令;
确定在重放期间第一数据库命令还未被执行;
响应于确定第一数据库命令在重放期间还未被执行,等待引起第二数据库命令被执行;
在等待之后,确定在重放期间第一数据库命令已经被执行;
响应于确定第一数据库命令在重放期间已经被执行,引起第二数据库命令被执行。
15.如权利要求14所述的系统,其中确定第一数据库命令还未被执行包括:
访问记录与第一数据库命令相关联的线程最新执行的命令的计数的计数器。
16.如权利要求11所述的系统,其中由第一数据库命令先前修改的数据库对象是在一个或多个数据库服务器执行第一数据库命令期间被互斥锁定的表。
17.一种用于在数据库系统上重放数据库命令的系统,所述系统包括:
用于在依赖关系图中存储用于第二先前执行的数据库命令的条目的装置,该条目指定第一先前执行的数据库命令;
用于接收在重放数据库命令期间待执行的第二先前执行的数据库命令的装置;
用于使用所述依赖关系图来确定第二先前执行的数据库命令依赖于第一先前执行的数据库命令的装置;
用于确定在重放数据库命令期间第一先前执行的数据库命令还未被执行的装置;
用于响应于确定在重放数据库命令期间第一先前执行的数据库命令还未被执行,以及第二先前执行的数据库命令依赖于第一先前执行的数据库命令,等待引起第二先前执行的数据库命令被执行,直到第一先前执行的数据库命令的执行之后的装置。
18.如权利要求17所述的系统,其中所述依赖关系图不包括在一个或多个数据库服务器上先前执行第一或第二数据库命令的逻辑时间。
19.如权利要求17所述的系统,其中所述依赖关系图是至少部分基于下述确定产生的:在先前执行第一先前执行的数据库命令和第二先前执行的数据库命令期间,第二先前执行的数据库命令引用在执行第一先前执行的数据库命令期间被互斥锁定的对象。
20.如权利要求17所述的系统,其中用于确定在重放数据库命令期间第一先前执行的数据库命令还未被执行的装置包括:
用于访问记录与第一数据库命令相关联的线程最新执行的命令的计数的计数器的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/775,322 US8326816B2 (en) | 2010-05-06 | 2010-05-06 | Fine grain synchronization for database replay |
US12/775,322 | 2010-05-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102236705A CN102236705A (zh) | 2011-11-09 |
CN102236705B true CN102236705B (zh) | 2016-07-13 |
Family
ID=44173446
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110162901.7A Active CN102236705B (zh) | 2010-05-06 | 2011-05-05 | 数据库重放的细粒度同步 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8326816B2 (zh) |
EP (1) | EP2385472B1 (zh) |
CN (1) | CN102236705B (zh) |
Families Citing this family (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7634584B2 (en) | 2005-04-27 | 2009-12-15 | Solarflare Communications, Inc. | Packet validation in virtual network interface architecture |
US8438144B2 (en) | 2010-08-27 | 2013-05-07 | Oracle International Corporation | Transactionally consistent database replay in an environment with connection pooling |
US8954397B2 (en) * | 2007-05-03 | 2015-02-10 | Oracle International Corporation | Creation and replay of a simulation workload using captured workloads |
US10873613B2 (en) | 2010-12-09 | 2020-12-22 | Xilinx, Inc. | TCP processing for devices |
US9600429B2 (en) | 2010-12-09 | 2017-03-21 | Solarflare Communications, Inc. | Encapsulated accelerator |
US9003053B2 (en) | 2011-09-22 | 2015-04-07 | Solarflare Communications, Inc. | Message acceleration |
US9258390B2 (en) | 2011-07-29 | 2016-02-09 | Solarflare Communications, Inc. | Reducing network latency |
US9674318B2 (en) | 2010-12-09 | 2017-06-06 | Solarflare Communications, Inc. | TCP processing for devices |
US8996644B2 (en) | 2010-12-09 | 2015-03-31 | Solarflare Communications, Inc. | Encapsulated accelerator |
US8763018B2 (en) | 2011-08-22 | 2014-06-24 | Solarflare Communications, Inc. | Modifying application behaviour |
US8682942B1 (en) | 2011-08-23 | 2014-03-25 | Amazon Technologies, Inc. | System and method for performing object-modifying commands in an unstructured storage service |
US8549154B2 (en) | 2011-09-09 | 2013-10-01 | Oracle International Corporation | Recovering stateful read-only database sessions |
CN103207809B (zh) * | 2012-01-13 | 2017-07-07 | 金蝶软件(中国)有限公司 | 清除互斥锁的方法及系统 |
US9391840B2 (en) | 2012-05-02 | 2016-07-12 | Solarflare Communications, Inc. | Avoiding delayed data |
US9391841B2 (en) | 2012-07-03 | 2016-07-12 | Solarflare Communications, Inc. | Fast linkup arbitration |
US9021303B1 (en) * | 2012-09-24 | 2015-04-28 | Emc Corporation | Multi-threaded in-memory processing of a transaction log for concurrent access to data during log replay |
US8977898B1 (en) * | 2012-09-24 | 2015-03-10 | Emc Corporation | Concurrent access to data during replay of a transaction log |
US10505747B2 (en) | 2012-10-16 | 2019-12-10 | Solarflare Communications, Inc. | Feed processing |
US10742604B2 (en) | 2013-04-08 | 2020-08-11 | Xilinx, Inc. | Locked down network interface |
US9426124B2 (en) | 2013-04-08 | 2016-08-23 | Solarflare Communications, Inc. | Locked down network interface |
EP2809033B1 (en) | 2013-05-30 | 2018-03-21 | Solarflare Communications Inc | Packet capture in a network |
US10394751B2 (en) | 2013-11-06 | 2019-08-27 | Solarflare Communications, Inc. | Programmed input/output mode |
JP6211949B2 (ja) * | 2014-02-12 | 2017-10-11 | 株式会社東芝 | データベース装置 |
US11188427B2 (en) | 2014-09-26 | 2021-11-30 | Oracle International Corporation | System and method for transaction recovery in a multitenant application server environment |
US9983918B2 (en) | 2015-10-30 | 2018-05-29 | Oracle International Corporation | Continuous capture of replayable database system workload |
US9892024B2 (en) | 2015-11-02 | 2018-02-13 | Sony Interactive Entertainment America Llc | Backward compatibility testing of software in a mode that disrupts timing |
US10339127B2 (en) | 2016-01-28 | 2019-07-02 | Oracle International Corporation | Guaranteed commit outcome in a distributed transaction processing system |
US10552413B2 (en) | 2016-05-09 | 2020-02-04 | Sap Se | Database workload capture and replay |
US10298702B2 (en) * | 2016-07-05 | 2019-05-21 | Sap Se | Parallelized replay of captured database workload |
US10592528B2 (en) | 2017-02-27 | 2020-03-17 | Sap Se | Workload capture and replay for replicated database systems |
US11392603B1 (en) | 2017-04-03 | 2022-07-19 | Amazon Technologies, Inc. | Database rest API |
US11500824B1 (en) | 2017-04-03 | 2022-11-15 | Amazon Technologies, Inc. | Database proxy |
US11182496B1 (en) | 2017-04-03 | 2021-11-23 | Amazon Technologies, Inc. | Database proxy connection management |
US11106540B1 (en) * | 2017-04-03 | 2021-08-31 | Amazon Technologies, Inc. | Database command replay |
US11615113B2 (en) * | 2017-11-03 | 2023-03-28 | International Business Machines Corporation | Net change mirroring optimization across transactions in replication environment |
US11327857B2 (en) * | 2018-04-04 | 2022-05-10 | Netapp Inc. | Faster replay of metadata and data operations using inode number based dependency graph |
US10698892B2 (en) | 2018-04-10 | 2020-06-30 | Sap Se | Order-independent multi-record hash generation and data filtering |
US10747643B2 (en) | 2018-05-23 | 2020-08-18 | Dropbox, Inc. | System for debugging a client synchronization service |
US10970193B2 (en) | 2018-05-23 | 2021-04-06 | Dropbox, Inc. | Debugging a client synchronization service |
US11080166B2 (en) | 2018-05-31 | 2021-08-03 | Sap Se | Database trace debugger |
US11687507B2 (en) | 2019-09-12 | 2023-06-27 | Oracle International Corporation | Termination of database sessions for planned failover |
US11936739B2 (en) | 2019-09-12 | 2024-03-19 | Oracle International Corporation | Automated reset of session state |
CN110597725B (zh) * | 2019-09-19 | 2023-05-05 | 浙江诺诺网络科技有限公司 | 一种Mysql的模拟返回方法、装置及设备 |
US11709752B2 (en) | 2020-04-02 | 2023-07-25 | Sap Se | Pause and resume in database system workload capture and replay |
US11615012B2 (en) | 2020-04-03 | 2023-03-28 | Sap Se | Preprocessing in database system workload capture and replay |
US20230058452A1 (en) * | 2021-08-17 | 2023-02-23 | Sap Se | Efficient error reproduction scenarios through data transformation |
US20230185792A1 (en) * | 2021-12-13 | 2023-06-15 | Sap Se | Verification of database system using deterministic read workloads |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864843A (en) * | 1995-10-20 | 1999-01-26 | Ncr Corporation | Method and apparatus for extending a database management system to operate with diverse object servers |
US5937415A (en) * | 1995-12-13 | 1999-08-10 | Sybase, Inc. | Data base development system with methods facilitating copying of data from one data source to another |
CN1783018A (zh) * | 2004-11-29 | 2006-06-07 | 国际商业机器公司 | 用于在操作环境之间关联数据的方法、系统和程序产品 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69031295T2 (de) | 1989-06-19 | 1998-04-02 | Digital Equipment Corp | Anordnung zur Integration von Anwendungsprogrammen in einem digitalen Datenverarbeitungssystem |
US5440735A (en) | 1993-10-08 | 1995-08-08 | International Business Machines Corporation | Simplified relational data base snapshot copying |
US6253228B1 (en) * | 1997-03-31 | 2001-06-26 | Apple Computer, Inc. | Method and apparatus for updating and synchronizing information between a client and a server |
US6041344A (en) | 1997-06-23 | 2000-03-21 | Oracle Corporation | Apparatus and method for passing statements to foreign databases by using a virtual package |
US6236997B1 (en) | 1997-06-23 | 2001-05-22 | Oracle Corporation | Apparatus and method for accessing foreign databases in a heterogeneous database system |
US6542904B2 (en) | 1999-07-30 | 2003-04-01 | International Business Machines Corporation | Method and system for efficiently providing maintenance activity on a relational database that is utilized within a processing system |
US6629313B1 (en) | 2000-06-29 | 2003-09-30 | Microsoft Corporation | In-line database access statements without a pre-compiler |
US6769054B1 (en) | 2001-02-26 | 2004-07-27 | Emc Corporation | System and method for preparation of workload data for replaying in a data storage environment |
US7111023B2 (en) * | 2001-05-24 | 2006-09-19 | Oracle International Corporation | Synchronous change data capture in a relational database |
US6886041B2 (en) | 2001-10-05 | 2005-04-26 | Bea Systems, Inc. | System for application server messaging with multiple dispatch pools |
US20040015600A1 (en) * | 2002-02-21 | 2004-01-22 | Ashutosh Tiwary | Workload post-processing and parameterization for a system for performance testing of N-tiered computer systems using recording and playback of workloads |
US7076480B2 (en) | 2002-07-01 | 2006-07-11 | Softbase Systems, Inc. | Dynamic adjustment of commit frequency |
US7685095B2 (en) | 2003-12-16 | 2010-03-23 | Oracle International Corporation | Executing a parallel single cursor model |
US7340452B2 (en) | 2003-12-16 | 2008-03-04 | Oracle International Corporation | Parallel single cursor model on multiple-server configurations |
US20050172029A1 (en) | 2004-01-29 | 2005-08-04 | International Business Machines Corporation | Method and apparatus for managing a connection pool using heuristic information |
US7761435B2 (en) | 2005-04-29 | 2010-07-20 | Sap Ag | External persistence of session state information |
US7890458B2 (en) * | 2006-10-20 | 2011-02-15 | Oracle International Corporation | Capturing database workload while preserving original transactional and concurrency characteristics for replay |
US20080098003A1 (en) * | 2006-10-20 | 2008-04-24 | Oracle International Corporation | Database workload replay remapping infrastructure |
US8024299B2 (en) | 2006-10-20 | 2011-09-20 | Oracle International Corporation | Client-driven functionally equivalent database replay |
US7984015B2 (en) * | 2006-10-20 | 2011-07-19 | Oracle International Corporation | Database workload capture and replay architecture |
US7890457B2 (en) * | 2006-10-20 | 2011-02-15 | Oracle International Corporation | Transactionally consistent database workload replay |
US8700608B2 (en) | 2007-10-17 | 2014-04-15 | Oracle International Corporation | SQL execution plan verification |
-
2010
- 2010-05-06 US US12/775,322 patent/US8326816B2/en active Active
-
2011
- 2011-05-05 EP EP11164907.5A patent/EP2385472B1/en active Active
- 2011-05-05 CN CN201110162901.7A patent/CN102236705B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864843A (en) * | 1995-10-20 | 1999-01-26 | Ncr Corporation | Method and apparatus for extending a database management system to operate with diverse object servers |
US5937415A (en) * | 1995-12-13 | 1999-08-10 | Sybase, Inc. | Data base development system with methods facilitating copying of data from one data source to another |
CN1783018A (zh) * | 2004-11-29 | 2006-06-07 | 国际商业机器公司 | 用于在操作环境之间关联数据的方法、系统和程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN102236705A (zh) | 2011-11-09 |
US8326816B2 (en) | 2012-12-04 |
EP2385472B1 (en) | 2019-09-25 |
EP2385472A1 (en) | 2011-11-09 |
US20110276550A1 (en) | 2011-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102236705B (zh) | 数据库重放的细粒度同步 | |
US8954397B2 (en) | Creation and replay of a simulation workload using captured workloads | |
US11003689B2 (en) | Distributed database transaction protocol | |
US9805074B2 (en) | Compressed representation of a transaction token | |
CN105630863B (zh) | 用于多版本并发提交状态的事务控制块 | |
US7634512B2 (en) | Migrating temporary data of a session | |
US8438144B2 (en) | Transactionally consistent database replay in an environment with connection pooling | |
US7890457B2 (en) | Transactionally consistent database workload replay | |
CN108804306B (zh) | 用于自动测试系统的方法和系统 | |
US10599630B2 (en) | Elimination of log file synchronization delay at transaction commit time | |
JP2023546249A (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
CN108021338B (zh) | 用于实现两层提交协议的系统和方法 | |
US8832022B2 (en) | Transaction processing device, transaction processing method and transaction processing program | |
EP2380090B1 (en) | Data integrity in a database environment through background synchronization | |
EP3722973A1 (en) | Data processing method and device for distributed database, storage medium, and electronic device | |
CN109947742B (zh) | 面向二阶段锁的多版本数据库并发控制方法和系统 | |
CN110955672B (zh) | 面向乐观并发控制的多版本支持方法及系统 | |
US7072912B1 (en) | Identifying a common point in time across multiple logs | |
CN112905676A (zh) | 一种数据文件的导入方法及装置 | |
CN109358817B (zh) | 用于复制数据的方法、装置和系统 | |
US7814095B2 (en) | Optimizing the navigation of one-to-one and one-to-many relationships using query batching in named transactions | |
CN108595488B (zh) | 数据迁移方法和装置 | |
CN110168514B (zh) | 一种事务处理方法、装置及设备 | |
US20190384695A1 (en) | Happens-before-based dynamic concurrency analysis for actor-based programs | |
CN112749156A (zh) | 数据处理方法、数据库管理系统和数据处理设备 |
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 |