首页> 中国专利> 一种面向应用的事务负载生成系统及事务负载生成方法

一种面向应用的事务负载生成系统及事务负载生成方法

摘要

本发明提出了一个面向应用的合成负载生成系统,可以捕捉真实在线事务处理应用的负载特征,然后生成和实际应用负载性能指标高度相似的合成负载,同时保证信息隐蔽性、工具可扩展性和负载可拓展性。本发明提出了描述联机事务处理应用负载特征的新方法:从事务逻辑和数据访问分布两个维度刻画OLTP负载特征;提出了从真实应用负载轨迹中提取事务逻辑和数据访问分布的方法,同时保证应用信息的隐蔽性;从控制事务冲突以及分布式事务比例的角度出发,提出通过控制操作参数依赖关系保证隐含事务逻辑的方法;设计并实现了刻画数据访问分布的三个角度:倾斜性,动态性和连续性;实现了第一个面向应用的OLTP负载生成器,保证生成负载在性能评测上的真实性和可扩展性。

著录项

  • 公开/公告号CN112241354B

    专利类型发明专利

  • 公开/公告日2022-07-29

    原文格式PDF

  • 申请/专利号CN201910800259.7

  • 发明设计人 张蓉;李宇明;张舒燕;舒科;

    申请日2019-08-28

  • 分类号G06F11/34(2006.01);G06F16/22(2019.01);G06F16/242(2019.01);G06F16/2455(2019.01);

  • 代理机构上海德禾翰通律师事务所 31319;

  • 代理人夏思秋

  • 地址 200062 上海市普陀区中山北路3663号

  • 入库时间 2022-09-06 00:36:09

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-29

    授权

    发明专利权授予

说明书

技术领域

本发明涉及事务负载生成技术领域,尤其涉及一种面向应用的事务负载生成系统及事务负载生成方法。

背景技术

在不同的应用领域,有许多用于数据库性能评估的基准。在OLAP应用领域,常用的基准测试有TPC-H、TPC-DS和SSB[14],它们具有预定义的标准数据库模式和测试查询。还有TPC-C[1]、TPC-E和SmallBank[10]基准,用于评估数据库系统的事务处理能力。CH-benCHmark[15]和HTAPBench[16]可以为事务。分析混合处理(HTAP)系统提供统一的评估。此外,YCSB[11]通常用于测量云服务系统的吞吐量,其负载简单,但需要很高的可扩展性。然而,这些标准测试基准的评估负载是对一类应用程序的抽象,因此它们过于笼统,无法评估针对特定应用程序的数据库性能。

为了获得与目标应用相似的负载,负载轨迹重放是一种可选方法。Microsoft SQLServer配备了两种工具,即SQL Server分析器[17]和SQLServer分布式重放[2],用于基于SQL轨迹再现生产负载。Oracle数据库重放[3]、[18]使用户能够以最小的性能影响在生产系统上记录负载轨迹,然后重放一个与实际负载具有相同并发性和负载特性的完整负载。由于数据隐私问题,负载回放在实际的数据库性能评估中很难应用,因为它需要一个真实的数据库状态和原始负载轨迹[3]。此外,负载拓展(例如拓展并发性)也是当前重放技术难以解决的问题。

因此,负载模拟是非常必要和迫切的。有负载感知的数据和查询生成器[4]、[5]、[19]、[20]用于评估OLAP应用程序的数据库性能。这些工作的输入一般包括数据库模式、基本数据特征和查询树中间结果的大小规范。输出是一个合成数据库实例和实例化的测试查询,符合指定的数据和负载特性。对于OLAP应用程序,有数据库扩展工作[6],[7],它可以扩展/缩小给定的数据库实例,支持特定于应用程序的数据库基准测试。负载分析器[8]、[9]旨在研究并更好地了解应用程序负载,但两者都无法生成合成负载。还有一些为数据库性能基准测试准备的负载生成器[12]、[13]。Jeong等人[12]提出了一种可以模拟真实硬件资源消耗状态的负载生成器。NoWog[13]介绍了一种用于生成测试NoSQL数据库合成负载的负载描述语言。这些工作都不能用于模拟真实OLTP应用程序的各种负载,以实现面向应用程序的数据库性能评估。

当评测数据库管理系统(DBMS)的查询性能时,通常在DBMS上执行合成负载,然后观察系统的吞吐量和响应时间,这使得合成负载在DBMS性能评测的过程中至关重要。如果想针对某一具体应用进行DBMS性能评测,那么合成负载和真实负载的相似性就直接决定了评估结果是否可信。但是,当前的用作性能评测的负载很难和目标应用具有相似的负载特征,这导致评估结果并不准确。为了解决这个问题,本发明设计了一个面向事务应用的合成负载生成方法,用来捕捉真实在线事务处理(OLTP)应用的负载特征,然后生成和实际应用负载性能指标高度相似的合成负载。

发明内容

本发明为了解决背景技术中的缺陷,提出了一种面向应用的事务负载生成系统,包括:数据库生成模块和负载生成模块;其中,

所述数据库生成模块用于通过获取数据库模式和数据特征,生成测试数据库;

所述负载生成模块通过分析真实应用的负载轨迹,生成与真实负载相似的合成负载;所述负载生成模块包括:

事务逻辑分析器,其通过分析短时间段内的完全负载轨迹,提取事务逻辑信息;

数据访问分布分析器,其通过分析较长时间段内的部分负载轨迹,提取数据访问分布信息和吞吐信息;

负载生成器,其利用之前被提取出的所述事务逻辑信息、所述数据访问分布信息和所述吞吐信息,将事务模板中的参数值实例化,生成合成负载。

本发明提出的面向应用的事务负载生成系统中,通过数据特征提取器来使用SQL查询自动化地获取数据特征。

本发明提出的面向应用的事务负载生成系统中,所述负载生成器可以配置测试节点数和每个节点上的测试线程数以模拟并发性;对于每个测试线程,建立一个单独的数据库连接。

本发明提出的面向应用的事务负载生成系统中,所述负载生成器在执行事务时,使用事务逻辑的结构信息来确定是否需要执行分支结构中的操作,以及循环结构中执行操作的次数;对于一个SQL操作的执行,首先将所有参数逐个实例化,然后把具有具体参数值的操作发送到测试数据库;在执行操作之后,结果集和参数被保存为中间状态,以便在同一事务实例内的后续操作中生成其它参数。

本发明提出的面向应用的事务负载生成系统中,所述负载生成器对于一个参数,如果只有依赖$1,则可以根据增量Δ和相关联的较小参数直接计算该参数的值;如果只有依赖$2,首先尝试通过根据依赖项的概率随机选择依赖项来实例化参数,当未选择中任何依赖项时,则使用数据访问分布来实例化此参数;如果同时存在依赖关系$2和$3,则相应的操作一定在循环结构中,循环第一次执行时,基于依赖$2和数据访问分布实例化参数,对于非第一次的循环执行,首先基于概率尝试使用依赖$3实例化参数,如果没有选中任何依赖项,则使用依赖$2和数据访问分布来实例化参数。

基于以上系统,本发明还提出了一种面向应用的事务负载生方法,包括以下步骤:

步骤A:通过获取数据库模式和数据特征,生成测试数据库;

步骤B:通过分析真实应用的负载轨迹,生成与真实负载相似的合成负载,包括:

步骤B1:通过分析短时间段内的完全负载轨迹,提取事务逻辑信息;

步骤B2:通过分析较长时间段内的部分负载轨迹,提取数据访问分布信息和吞吐信息;

步骤B3:利用之前被提取出的所述事务逻辑信息、所述数据访问分布信息和所述吞吐信息,将事务模板中的参数值实例化,生成合成负载。

本发明提出的面向应用的事务负载生成方法,步骤A中,所述测试数据库为满足主键、外键约束和非键值属性数据特征的多张表;具体包括以下步骤:

步骤A1:按顺序生成主键;

步骤A2:生成外键时,在其所引用主键的值域内随机生成;

步骤A3:通过包含随机索引生成器和索引数值转化器的随机属性生成器生成非键值属性的值,同时满足期望的数据特征。

本发明提出的面向应用的事务负载生成方法,在生成键值之前,首先确定值域:第一步,如果所述主键只包括单独的一个属性,那么它的值域就是[1,s],s是表的大小;第二步,所述外键属性的值域可以由它所引用的主键确定;第三步,处理复合主键中非外键属性的值域时,所述复合主键中只有一个非外键属性,那么这个属性的值域是

本发明提出的面向应用的事务负载生成方法,随机索引生成器的输出是1到n的整数,其中n是属性的基数;给定一个索引,索引数值转化器确定性地将其映射到属性值域中的值;根据属性的数据类型,采用不同的索引数值转化器:对于数值类型,使用线性函数,该函数将索引均匀地映射到属性值域;对于字符串类型,将随机生成的满足长度要求的种子字符串;首先根据输入索引选择一个种子字符串,然后将索引和选定的种子字符串连接起来作为输出值。

本发明提出的面向应用的事务负载生成方法,步骤B1中,事务逻辑提取算法包括:

步骤B11:通过遍历负载轨迹,计算事务模板内每个操作的执行次数,从而计算每个分支执行的可能性和循环操作的平均执行次数;

步骤B12:识别事务模板中所有满足BR的参数对,然后遍历负载轨迹以获得平均增量Δ;为pi,j构建依赖$1;

步骤B13:针对每个事务模板中的参数pi,j,遍历在它之前的每一个参数pm,n,计算拥有满足ER参数对的事务个数;同理,遍历之前的返回集rx,y,分别计算满足ER、IR的事务个数;

步骤B14:从K个事务实例随机选择N个事务实例组,每组两个;然后计算每组事务中参数对的LR系数(a,b);

步骤B15:使用步骤B13-B14中获得的统计信息据,为每个参数pi,j构造依赖关系$2;

步骤B16:循环结构中同一操作会多次运行,使用依赖项$3来描述其中参数的变化;通过遍历负载轨迹,计算连续执行的循环操作中参数值的更改;系数(a,b)的计算与步骤B14相同,然后根据统计信息构造依赖关系$3。

本发明提出的面向应用的事务负载生成方法,步骤B中,具体包括:

步骤B21:生成满足预期重复率的所有高频项;

步骤B22:遍历前一个时间窗口中的所有参数,并为每个区间选择重复参数,直到满足区间上的参数重复率;

步骤B23:根据该参数的值推导出该参数的索引,从而识别它在当前时间窗口中的所属区间;如果索引不在当前时间窗口的索引域中,则忽略该参数;

步骤B24:生成添加到每个区间的随机参数,以达到基数要求;基于候选参数,使用参数生成机制实例化参数;在一个确定的区间内,只需随机选择一个候选参数作为输出。

本发明公开了一个面向应用的合成负载生成系统和方法,可以捕捉真实在线事务处理(OLTP)应用的负载特征,然后生成和实际应用负载性能指标高度相似的合成负载,同时保证信息隐蔽性、工具可扩展性和负载可拓展性。创新点主要包括:

1.提出了描述联机事务处理(OLTP)应用负载特征的新方法:从事务逻辑和数据访问分布两个维度刻画OLTP负载特征。

2.提出了从真实应用负载轨迹中提取事务逻辑和数据访问分布的方法,同时保证应用信息的隐蔽性。

3.从控制事务冲突以及分布式事务比例的角度出发,提出通过控制操作参数依赖关系保证隐含事务逻辑的方法。

4.设计并实现了刻画数据访问分布的三个角度:倾斜性,动态性和连续性。

5.实现了第一个面向应用的OLTP负载生成器,保证生成负载在性能评测上的真实性和可扩展性。

参考文献

[1]TPC-C benchmark,http://www.tpc.org/tpcc/.

[2]SQL Server Distributed Replay,https://docs.microsoft.com/enus/sql/tools/distributed-replay/sql-server-distributed-replay?view=sqlserver-2017.

[3]L.Galanis,S.Buranawatanachoke,R.Colle,B.Dageville,K.Dias,J.Klein,S.Papadomanolakis,L.L.Tan,V.Venkataramani,Y.Wang,

et al.,“Oracle database replay,”in SIGMOD,2008,pp.1159–1170.

[4]E.Lo,N.Cheng,W.W.K.Lin,W.Hon,and B.Choi,“Mybenchmark:generatingdatabases for query workloads,”in VLDBJ,2014,pp.895–913.

[5]Y.Li,R.Zhang,X.Yang,Z.Zhang,and A.Zhou,“Touchstone:Generatingenormous query-aware test databases,”in USENIX ATC,2018,pp.575–586.

[6]Y.Tay,B.T.Dai,D.T.Wang,E.Y.Sun,Y.Lin,and Y.Lin,“Upsizer:Synthetically scaling an empirical relational database,”in InformationSystems,2013,pp.1168–1183.

[7]J.Zhang and Y.Tay,“Dscaler:Synthetically scaling a givenrelational database,”in PVLDB,2016,pp.1671–1682.

[8]P.S.Yu,M.-S.Chen,H.-U.Heiss,and S.Lee,“On workloadcharacterization of relational database environments,”in IEEE Transactions onSoftware Engineering,1992,pp.347–355.

[9]Q.T.Tran,K.Morfonios,and N.Polyzotis,“Oracle workloadintelligence,”in SIGMOD,2015,pp.1669–1681.

[10]M.Alomari,M.Cahill,A.Fekete,and U.Rohm,“The cost ofserializability on platforms that use snapshot isolation,”in ICDE,2008,pp.576–585.

[11]B.F.Cooper,A.Silberstein,E.Tam,R.Ramakrishnan,and R.Sears,“Benchmarking cloud serving systems with ycsb,”in SoCC,2010,pp.143–154.

[12]H.J.Jeong and S.H.Lee,“A workload generator for databasesystembenchmarks,”in iiWAS,2005,pp.813–822.

[13]P.Ameri,N.Schlitter,J.Meyer,and A.Streit,“Nowog:a workloadgenerator for database performance benchmarking,”in DASC/PiCom/DataCom/CyberSciTech,2016,pp.666–673.

[14]P.E.O’Neil,E.J.O’Neil,X.Chen,and S.Revilak,“The star schemabenchmark and augmented fact table indexing,”in TPCTC,2009,pp.237–252.

[15]R.Cole,F.Funke,L.Giakoumakis,W.Guy,A.Kemper,S.Krompass,H.Kuno,R.Nambiar,T.Neumann,M.Poess,et al.,“The mixed workload ch-benchmark,”inDBTest,2011,pp.8.

[16]F.Coelho,J.Paulo,R.Vilac,a,J.Pereira,and R.Oliveira,“Htapbench:Hybrid transactional and analytical processing benchmark,”in ICPE,2017,pp.293–304.

[17]SQL Server Profiler,https://docs.microsoft.com/en-us/sql/tools/sqlserver-profiler/sql-server-profiler?view=sql-server-2017.

[18]Y.Wang,S.Buranawatanachoke,R.Colle,K.Dias,L.Galanis,S.Papadomanolakis,and U.Shaft,“Real application testing with databasereplay,”in DBTest,2009,pp.8.

[19]C.Binnig,D.Kossmann,E.Lo,and M.T.Ozsu,“Qagen:generating¨query-aware test databases,”in SIGMOD,2007,pp.341–352.

[20]A.Arasu,R.Kaushik,and J.Li,“Data generation using declarativeconstraints,”in SIGMOD,2011,pp.685–696.

附图说明

图1是本发明基本架构图。

图2是本发明确定键值属性的值域示意图。

图3是本发明S-Dist示例。

图4是本发明参数生成示例。

图5是本发明C-Dist示例。

图6a-6d是本发明在PostgreSQL数据库上模拟TPC-C负载性能指标的偏差.

图7是本发明中对倾斜的和动态的负载中S-Dist和D-Dist的探讨。

图8是本发明中对连续性负载中C-Dist的探讨。

图9是本发明事务逻辑提取算法性能(K=N)。

图10是本发明C-Dist提取算法性能。

具体实施方式

结合以下具体实施例和附图,对发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。

面向应用的数据库性能评测有以下需求:

保真性。用来评估的负载应当和真实应用负载高度相似。由评测获得的性能指标(例如吞吐、延迟、物理资源的利用率)应当和实际应用运行的结果一致。评测负载和真实应用负载的相似性用性能指标的偏离程度衡量。偏离程度越小,相似性越高。

隐蔽性。数据隐私是商业应用的基本需求,所以真实应用的负载通常无法直接用做数据库性能评测。

工具可扩展性。目标应用可能有很大的数据规模和很高的并发/吞吐。这就需要负载生成工具能够在多个节点上进行扩展,并且支持并发的数据库和负载生成。

负载可拓展性。有时,需要拓展当前应用负载以衡量在期望合成负载规模下DBMS的性能。由于主要致力于生成事务型负载,所以关键需要关注的查询并发性和查询吞吐量。

基于这些需求,本发明将面向应用的事务负载生成问题形式化:

面向应用的事务负载生成(Application-oriented synthetic workloadgeneration):生成与目标应用高度相似的合成负载,同时保证保真性、隐蔽性、工具可扩展性和负载可拓展性。

基于上述数据生成问题的定义,本发明设计的基本架构如图1所示。为了解决数据隐私问题,本发明的方法将隔离生产环境和评测环境,从而使得数据的拥有者保护数据隐私。从功能的角度划分,本发明的实现可分为数据库生成模块(Database Generation)和负载生成模块(Workload Generation)。

数据库生成模块(Database Generation):数据库生成器的输入主要包含两部分:数据库模式和数据特征;输出是一个测试数据库(Test DB)。由于数据特征是单调冗长的并且需要从真实的数据库获取,本发明提供一个数据特征提取器(Data CharacteristicsExtractor)来帮助本发明使用简单的SQL查询自动化地获取这些信息。在设计中,本发明只关注测试数据库的一些基本数据特征(例如属性的值域),因为合成负载的负载特征才是影响DBMS性能的关键因素。

负载生成模块(Workload Generation):负载生成模块由三个部分组成:事务逻辑分析器(Transaction Logic Analyzer)、数据访问分布分析器(Data AccessDistribution Analyzer)和负载生成器(Workload Generator)。事务逻辑分析器通过分析短时间段内的完全负载轨迹(包含每个SQL操作的所有参数和返回结果集),提取事务逻辑信息。数据访问分布分析器通过分析较长时间段内的部分负载轨迹(只包含SQL操作的一些关键参数),提取数据访问分布信息和吞吐信息。负载生成器利用这些信息将事务模板中的参数值实例化,生成合成负载。

本发明中的数据库生成:

所有数据库生成所需要的数据特征和Touchstone[5]相同,例如表大小、属性的值域、属性的基数,即非重复值的个数。生成测试数据库事实上就是生成满足主/外键约束和非键值属性数据特征的多张表。

不失一般性,本发明假设主键和外键都是整数。主键是记录的标识符,通常没有物理意义,所以不用考虑它们的数据特征。生成主键时,本发明简单地按顺序生成;生成外键时,本发明在它所引用主键的值域内随机生成。这可以保证主键的唯一性和外键的引用完整性。在生成这些键值之前,需要有三个步骤来确定它们的值域。第一步,如果主键只包括单独的一个属性,那么它的值域就是[1,s],s是表的大小(如图3中的①);第二步,外键属性的值域可以由它所引用的主键确定(如图3中的②);第三步,本发明处理复合主键中非外键属性的值域问题(如图3中的③)。最常见和最合理的情况是复合主键中只有一个非外键属性,那么这个属性的值域是

包含随机索引生成器和索引数值转化器的随机属性生成器[5]用于生成非键值属性的值,同时满足期望的数据特征,特别是基数特征。随机索引生成器的输出是1到n的整数,其中n是属性的基数。给定一个索引,索引数值转化器确定性地将其映射到属性值域中的值。根据属性的数据类型,本发明采用不同的索引数值转化器。对于数值类型,例如整数,本发明简单地使用线性函数,该函数将索引均匀地映射到属性值域;对于字符串类型,例如varchar,将有一些随机生成的满足长度要求的种子字符串。本发明首先根据输入索引选择一个种子字符串(如第(i%k)个种子字符串,其中i是索引,k是所有种子字符串的数目。然后将索引和选定的种子字符串连接起来作为输出值。

总之,每个表的生成彼此独立。并且对于每个表,通过将主键生成按范围分配给每个线程,本发明可以在多个节点上实现并行数据生成。

本发明中的事务逻辑:

本文中提到的事务逻辑代表OLTP应用中潜在的业务逻辑。在数据库测试过程中,事务逻辑会对死锁可能性、分布式事务比例造成显著影响,从而影响测试数据库性能。在这一部分,本发明首先引入事务逻辑的定义,然后给出提取事务逻辑的算法。

事务模板中SQL参数与SQL参数之间的关系以及SQL参数与返回项之间的关系决定了SQL操作之间的隐藏语义。在对现有OLTP基准负载和实际应用负载进行调查之后,本发明关注四种类型的关系。首先,相等关系(ER)是最常见的关系。例如,在一定概率下,两个SQL参数是相等的。其次,包含关系(IR)也很常见。因为SQL结果返回集可能是一组元组,所以SQL参数的值可能是前一个返回结果集中的一个值。第三,线性关系(LR)是对相等关系的补充和延伸,具有更强的表达能力。第四,between关系(BR)是为形如“col between p1 andp2”和“col≥p1 and col≤p2”的谓词提出的,这里p2和p1之间有between关系。

下面正式定义事务逻辑。O

定义2事务逻辑(Transaction logic):针对一个事务模板,事务逻辑由事务结构信息和参数依赖关系信息组成,详述如下:

·事务结构信息:

#1在分支结构中每个分支执行的可能性。

#2在循环结构中操作的平均执行次数。

·参数依赖信息(针对每个参数p

$1[p

$2一个dep-item的列表,dep-item∈{[p

$3一个[p

如果一个参数p

事务逻辑是应用层业务逻辑的体现,并不经常变化,所以不需要分析较长时间段内的负载轨迹。由于每个事务模板的事务逻辑分析过程是相同且相互独立的,本发明接下的提取算法只针对一个事务模板分析。事务逻辑提取算法包括六步,输入是一个事务模板和相应负载轨迹上的K个事务。算法如下:

步骤1:提取事务结构信息。通过遍历负载轨迹,计算事务模板内每个操作的执行次数,从而计算每个分支执行的可能性和循环操作的平均执行次数。

步骤2:确定BR。首先,本发明识别事务模板中所有满足BR的参数对

步骤3:收集ER和IR信息。针对每个事务模板中的参数p

步骤4:收集LR信息。LR只涉及到数值类型的参数和返回集,并且返回集必须由通过主键过滤的操作得到。由于LR系数(a,b)的计算需要两个事务实例,所以本发明从K个事务实例随机选择N个事务实例组(每组两个)。然后计算每组事务中参数对的LR系数(a,b)。这里需要忽略具有系数(1,0)的LR,因为它是由ER表示的。

步骤5:通过权衡确定ER,IR和LR。使用步骤3-4中获得的统计信息据,本发明可以很容易地为每个参数p

步骤6:构造循环结构的LR。循环结构中同一操作会多次运行,本发明使用依赖项$3来描述其中参数的变化。通过遍历负载轨迹,计算连续执行的循环操作中参数值的更改。系数(a,b)的计算与步骤4相似。然后根据统计信息构造依赖关系$3。

如果步骤3-4遇到了在循环之中的操作,本发明只使用循环第一次执行的负载轨迹。本发明中的数据访问分布:

数据访问分布对负载事务的冲突强度、数据库系统的缓存命中率都有着不可忽视的影响,所以一直被当作应用负载的重要特征。在这一部分,本发明首先刻画基本的倾斜数据访问分布,再刻画数据访问分布的动态性和连续性,最后给出候选参数的生成算法。

合成负载的数据访问分布取决于事务模板中实例化的参数值。不失一般性,假设OLTP应用中决定数据访问分布的谓词形式都可以被表示为“col op para”。本发明使用从负载轨迹中提取的高频项集(HFI)和直方图统计信息(HS)代表每个参数的倾斜数据访问分布(S-Dist)。HFI记录出现频率最高的H个热数据项。属性的域值被均匀地划分为I个区间,然后将每个区间上的参数(除去已在HFI中出现过的)的频率和基数记为HS。图3是S-Dist的一个例子,其中H和I的值都是5,对应的属性是整型的,域值[0,2000]。再HFI中,最热的项是57,出现频率为0.17;再HS的第一个区间中,有20个唯一的参数值,总访问频率为0.08。

S-Dist中的数据项都来自在真实数据上运行的负载轨迹,但相同的数据在本发明生成的合成数据库中并不一定存在,所以首先本发明要为HFI做数据转换。假设属性生成器是“index=ranInt[1,400],value=index*5”,其中400是属性基数。第一步,使用属性生成器重新生成HFI中的数据项,如图4所示,57被替换成了195.第二步,根据高频项的频率和所有区间计算累积概率数组,即图4中的“cumu prob”。最后,生成一个0到1之间的随机数,映射到累积概率数组中的一项,从而挑选出合适的参数补充谓词。图4给出了选择参数值的两个例子。

另外,为了控制每个区间上生成参数的基数,本发明将随机索引生成器重新定义为

虽然上述示例中的参数是整数类型,但本发明的方法是通用的。对于所有非键值属性的数值型参数,S-Dist以及参数生成完全相同。对于键值属性的参数,存在小的差异。因为合成数据库中的主键顺序生成,所以合成数据库中的键值属性的域值可能与真实数据库中的主键不同。因此,当收集S-Dist统计信息时,本发明使用真实数据库中的键值属性的域值来划分区间并构造HS。但在合成负载生成过程中,本发明使用合成数据库中的键值属性的域值来支持参数生成。对于字符串类型参数,最大的区别是如何划分区间。当构建HS的时候,字符串类型参数所属区间由h%I计算,其中h是参数的哈希值。索引数值转化器与合成数据库生成所采用的一致。

动态性。如果数据访问分布动态变化,S-Dist是不准确的,甚至是完全错误的。假设有一张有100条记录的表和一个100秒的负载。在第i秒中,负载的所有数据库请求只访问表中的第i条记录。假设数据库的吞吐量在此期间是稳定的。此时,如果只使用S-Dist来表示整个数据访问过程,会发现没有热点数据,而且数据访问分布非常统一。很明显,这与事实大不相同。使用该S-Dist生成的合成负载,数据库上的事务冲突强度将会大大低于实际负载的冲突强度。所以本发明提出D-Dist,在S-Dist的基础上,增加对动态性的刻画。首先,根据日志的时间戳将同一个参数的负载轨迹划分为多个等长的时间窗口。然后,对于任何时间窗口中的参数轨迹,本发明将生成单独的S-Dist,并且将整个参数轨迹的D-Dist定义为S-Dist的列表。最后,本发明使用与生成时间相对应的S-Dist实例化符号参数。此外,对于数值型参数,在时间窗口中使用的数据范围可以比属性域值小得多。为了提高HS的精度,可以根据当前窗口的数据范围对区间进行划分。当然,在生成参数时,还必须使用每个区间的相应索引范围。

连续性。在某些应用中,数据的热度与时间密切相关,具体表现为数据可以被连续访问一段时间。本发明称之为数据访问分布的连续性。之前,D-Dist捕捉时间窗口中数据访问的偏差,而忽略了连续时间窗口之间数据访问的连续性。当使用它生成合成负载时,在连续时间窗口之间访问的数据可能完全不同,从而导致较低的缓存命中率。因此,本发明提出C-Dist,在D-Dist的基础上,增加对连续性的刻画。在收集统计数据时,本发明计算了当前时间窗口中的高频项与前一个时间窗口中高频项的重复率,以及所有区间的参数重复率。图5在图3中示例的基础上增加HFI和HS的重复频率。在这个例子中,本发明可以看到HFI的重复频率为0.6,也就是从前一个时间窗口中保持了三个高频项。五个区间的重复频率分别为0、0.33、0.5、0.46和0.56。假设cdn

为了保证C-Dist中的参数重复率,本发明需要为每个时间窗口预生成候选参数。在算法1中给出了候选参数的详细生成过程。在第1-2行中,生成满足预期重复率的所有高频项。在第3-10行中,遍历前一个时间窗口中的所有参数,并为每个区间选择重复参数,直到满足区间上的参数重复率。在第6行,根据该参数的值推导出该参数的索引,从而识别它在当前时间窗口中的所属区间。如果索引不在当前时间窗口的索引域中,则忽略该参数。对于字符串类型的参数,例如“296#dgtckuy”,“#”字符前面部分是本发明需要的索引。最后,在第11-13行中,本发明生成添加到每个区间的随机参数,以达到基数要求。基于这些候选参数,本发明使用图4的参数生成机制实例化参数。在某一个确定的区间内,本发明只需随机选择一个候选参数作为输出。另外,如果在合成负载生成过程中在线生成候选参数,则负载生成器可能成为性能瓶颈,从而影响评估结果的正确性。因此,本发明可以脱机生成所有时间窗口的候选参数,并将它们存储在磁盘上,然后在生成合成负载时根据需要读取它们。

本实施例中的生成负载:

给定每个事务模板的事务逻辑和每个参数的数据访问分布,图1中的负载生成器(Workload Generator)负责产生满足指定配置的合成负载。同时,在分布式环境中高效地生成高并发、高吞吐量的合成负载也是对本发明的负载生成器的基本要求。下面将从线程模型、事务执行和参数实例化三个级别介绍负载生成的细节。

线程模型。部署负载生成器时,用户可以配置测试节点数和每个节点上的测试线程数以模拟并发性。对于每个测试线程,本发明建立一个单独的数据库连接。实现了支持测试线程调用事务的两种不同的执行模型:无等待循环和固定吞吐量。在无等待循环设置的情况下,所有测试线程不停地发出事务,请求之间没有任何思考时间。在固定吞吐量设置中,用户可以指定固定请求吞吐量或吞吐量比例因子。如果指定了吞吐量比例因子,则将每个时间窗口中的吞吐量与吞吐量比例因子的乘积作为该窗口的目标吞吐量。测试线程通过控制事务请求之间的思考时间来达到所需的吞吐量。当所需的吞吐量超过当前测试线程所能达到的最大吞吐量时,执行模型将退化为无等待循环。不同的执行模型使本发明能够构建具有可拓展性的合成负载。

事务执行。测试线程根据从负载轨迹中提取的事务比例调用不同类型的事务。事务比例随时间窗口周期性调整。在执行事务时,将使用事务逻辑的结构信息来确定是否需要执行分支结构中的操作,以及循环结构中执行操作的次数。对于一个SQL操作的执行,本发明首先将所有参数逐个实例化,然后把具有具体参数值的操作发送到测试数据库。在执行操作之后,结果集和参数被保存为中间状态,以便在同一事务实例内的后续操作中生成其它参数。

参数实例化。在实例化参数时,首先要保证事务逻辑的一致性,然后保证合成负载的数据访问分布。对于一个参数,有以下几种情况。情况1:如果只有依赖$1,则可以根据增量Δ和相关联的较小参数直接计算该参数的值。情况2:如果只有依赖$2,本发明首先尝试通过根据依赖项的概率随机选择依赖项来实例化参数。当未选择中任何依赖项时,则使用数据访问分布来实例化此参数。情况3:如果同时存在依赖关系$2和$3,则相应的操作一定在循环结构中。循环第一次执行时,如同情况2一样,本发明仍然基于依赖$2和数据访问分布实例化参数;对于非第一次的循环执行,本发明首先基于概率尝试使用依赖$3实例化参数,如果没有选中任何依赖项,则使用依赖$2和数据访问分布来实例化参数。

总之,对于所有测试线程,事务执行和参数实例化是相互独立的,因此本发明的负载生成器可以部署在多个节点上,以有效地生成高并发、吞吐量的合成负载,同时满足所需的负载特性和配置。

实施例

实验环境

实验硬件配置:4个物理节点,每个节点2个CPU,型号为Intel Xeon Silver4110@2.1GHz;内存为120GB;存储为4TB,RAID-5,4GB RAID缓存。物理节点之间使用万兆以太网通信。

实验一:使用TPC-C负载作为模拟对象,改变扩展因子,通过比较真实负载(即TPC-C负载)与合成负载在相同数据库上的吞吐、时延、CPU利用率和磁盘利用率,检测合成负载的保真性。实验数据库为PostgreSQL。实验结果如图6a-6d。数据库请求的并发数与扩展因子相同。在图6a中,我们给出了真实负载和合成负载的事务执行吞吐量。结果表明,两种负载的吞吐量非常相似,最大偏差为6.29%。针对平均时延和95%时延的度量,如图6b所示。从这两个指标来看,合成负载与真实负载非常接近,最大偏差只有8.99%。图6c和图6d分别展示了两种负载的CPU和磁盘使用情况。结果表明,PostgreSQL数据库中执行合成负载和真实负载的资源消耗是一致的,进一步验证本发明生成的合成负载的高保真性。

实验二:本实验展示了数据访问分布(即S-Dist、D-Dist和C-Dist)描述数据访问的倾斜度、动态性和连续性的能力。由于现有基准测试负载的数据访问分布通常既不是动态的,也不是连续的,我们基于YCSB构建评估负载。本实验都是在MySQL数据库上进行的,其中包含一个来自YCSB的测试表。测试表的大小为10

图7中的评估负载只有一种事务类型。该事务由五对读写操作组成,每对操作先读取一条记录,然后更新它。扩展的YCSB负载运行90秒,分为三个阶段,每个阶段的数据请求在10

图8中的评估负载是YCSB的单行更新事务,运行100秒,时间窗口为1秒。每个时间窗口中的数据请求基于10

实验三:在事务实例数(K)和事务实例组数(N)相等的情况下,同时改变K和N,通过执行时间和内存消耗观察事务逻辑提取算法的性能。实验结果如图9。从结果可以看出,当K和N都是10

实验四:改变负载轨迹的长度,通过执行时间和内存消耗观察C-Dist提取算法性能。实验结果如图10。结果表明,C-Dist的提取时间与负载轨迹呈线性关系,而内存消耗为常数。这是因为C-Dist是一个基于窗口的数据访问分布,处理完成后可以从内存中删除每个时间窗口的负载轨迹。在图10中,当TPC-C负载轨迹时间为10

本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号