LoadRunner中响应时间与事物时间详解

合集下载

LoadRunner使用说明

LoadRunner使用说明

LoadRunner使用说明一、概述LAODRUNNER8.1 作为专业的性能测试工具,通过模拟成千上万的用户对被测应用进行操作和请求,在实验室环境中精确重现生产环境中任意可能出现的业务压力,然后通过在测试过程中获取的信息和数据来确认和查找软件的性能问题,分析性能瓶颈.LOADRUNNER提供了三个大主要模块,这三个模块既可以作为独立的工具分别完成各自的功能,又可以作为LOADRUNNER的一部分彼此衔接,与其他模块共同完成软件性能的整体测试.这三大模块主要是:Ø VITUAL USER GENERATOR--------用于录制脚本ØMERCURY LOADRUNNER CONTROLLER---------用于创建,运行和监视场景ØMERCURY LOADRUNNER ANALYSIS--------用于分析测试结果;二、LOADRUNNER8.1 安装 LAODRUNNER8.安装过程比较简单,只需按系统的提示一步一步操作就可以了,这里对安装过程中的一些要点进行简要的说明.Ø安装类型安装盘内有两个盘片,MERCURY LOADRUNNER8.1和MECURY LOADRUNNER 8.0ADD-INS.前者包括了LR安装程序及常用组件,后者全部为组件,各组件的作用在安装盘中都有详细的提示.Ø LICENSE 类型LICENSE类型说明如下:PERMANENT 永不过期的LICENSE;TIME LIMITED 限定了使用的起始时间和使用周期;TEMPORARY 从安装后开始计算,限定了使用的天数;VUD-BASED 限定了虚拟用户数量PLUGGED 需要DONGLE,也就是HARDWARE KEY,DONGLE在中国被音译为“狗”,主要是防止软件被盗用Ø RPM和WEB SERVER之间的鉴权如果在安装时选择安装REMOTE PERFORMANCE MONITOR SERVER,LOADRUNNER会弹出一个要求输入用户名和密码的对话框,REMOTE PERFORMANCE MONITOR SERVER是一个远程监视场景的服务器,为测试人员提供WEB化的场景页面,用于实现多台及其通过浏览器同时在线监视场景.这里设定用户名和口令的目的主要是为了REMOTE PERFORMANCE MONITOR(RPM)和运行了IIS的WEB SERVER之间进行鉴权.在RPM安装完毕之后,只有在LOADRUNNER CONTROLLER的RPM用户配置对话框中输入指定的用户名和口令,系统才能允许进行远程监控.Ø设定LOADRUNNER GENERATOR如何登陆到CONTROLLERLOADRUNNER提供了两种方式让LOAD GENERATOR的虚拟用户登陆到CONTROLLER,n ALLOW VIRTUALUSERS TO RUN ON THIS MACHINE WITHOUT USER LOGINn MANUAL LOG IN TO THE LOAD GENERATOR MACHINE三、使用VITUAL USER GENERATOR录制开发脚本LOADRUNNER脚本的开发过程一般需要以下几个过程Ø使用LOADRUNNER的VIRTUAL USER GENERATOR录制基本的测试脚本;Ø根据系统需求编辑测试脚本,看能否通过,Ø在单机模式下运行脚本看能否通过,1.选择协议要想正确的选择LOADRUNNER的脚本协议,首先要从LOADRNNER的工作原理上深入理解协议的作用和意义。

Loadrunner名词解释

Loadrunner名词解释

1Loadrunner名词解释响应时间:应用系统发出请求开始到收到服务器所有响应所耗费的时间;并发用户量: 同一时刻与服务器交互的所有用户数量;在线用户数:即同时在使用应用系统的用户,可能在浏览,可能在做交易。

并发用户怎么计算:●一般并发用户数取在线用户的10%-30%。

●八二原则:一般可以认为80%的用户在20%的时间内完成工作,所以峰值压力的时候,一般并发数要乘以80%/20%=4●Loadrunner里计算公式(1)计算平均的并发用户数:C = nL/T(2)并发用户数峰值:C’ ≈ C+3根号C公式(1)中,C是平均的并发用户数;n是login session的数量;L是login session 的平均长度;T指考察的时间段长度。

公式(2)则给出了并发用户数峰值的计算方式中,其中,C’指并发用户数的峰值,C就是公式(1)中得到的平均的并发用户数。

该公式的得出是假设用户的login session产生符合泊松分布而估算得到的。

事务响应时间:处理一个事物花费的时间,包含网络传输时间和服务器处理事务的时间TPS: 每秒处理事务数量资源利用率: Cpu、内存、磁盘io、网络的使用情况;思考时间: 用户进行操作时,每个请求之间的时间间隔2性能测试包含了哪些软件负载测试:通过对被测系统不断加压,直到超过预定的指标或者部分资源达到了饱和不能再加压为止,就像举重的过程中不断加杠铃的重量,知道运动员不能举起。

压力测试:给系统增加一定的压力,在一定的压力下测试的cpu、内存、磁盘、网络使用情况,也即业务能否正常使用;并发测试:通过模拟用户并发访问,测试系统是否存在死锁、系统处理速度是否下降的比较厉害等问题;可靠性测试:在一定的业务压力下,让系统运行一段较长的时间,看系统能否无故障运行;3简述使用软件测试工具Loadrunner的步骤制定性能测试计划—>开发测试脚本—>设计测试场景—>执行测试场景—>监控测试场景—>分析测试结果4什么时候可以开始执行性能测试功能测试通过;一般需要进行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模块。

在LoadRunner的脚步编写中,有三个重要的概念:事务、集合点、思考时间

在LoadRunner的脚步编写中,有三个重要的概念:事务、集合点、思考时间

在LoadRunner的脚步编写中,有三个重要的概念:事务、集合点、思考时间事务:事务又称为Transaction,在LoadRunner中的定义如下:An end-to-end(browser-to-browser) measurement of one or more user actions within action file。

中文理解如下:事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction。

事务的作用:LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。

这个事务的运行时间在LoadRunner的运行结果中会有反映。

通俗的讲LoadRunner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束表示,则计时结束,这个过程中得到的时间即为一个事务时间。

通常事务时间所反映的是一个操作过程的响应时间。

下面我们说说为什么在LoadRunner中使用事务。

为什么使用事务的原因是多种多样的,总结下来如下五点所示:1、事务是LoadRunner度量系统性能指标的唯一手段;(没有事务则没有办法衡量系统的响应时间,也许有人说LoadRunner可以通过编程来计时得到,不错如果你编程能力够强是能够实现的,但肯定不如LoadRunner中的事务用的简单而且方便)2、事务能够用于度量高风险业务流程的性能指标;3、事务能够度量在一组操作中每一步的性能指标;4、通过事务计时实现了不同压力负载下的性能指标对比;5、通过事务计时可以帮助定位性能瓶颈;从性能测试的角度出发,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同的操作对被测系统所造成的影响,那么我们如何知道不同的操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束表示,这样我们就知道了这个操作所花费的时间。

LoadRunner响应时间与用户体验时间不一致问题的深入分析

LoadRunner响应时间与用户体验时间不一致问题的深入分析

LoadRunner响应时间与用户体验时间不一致问题的深入分析在新一代一期项目非功能测试过程中,我们发现了LoadRunner测试响应时间与客户端实际用户体验时间不一致的现象。

例如员工渠道上线后,客户体验时间远远超过了LoadRunner测试响应时间。

本文针对这一现象深入研究了导致二者不一致的原因并提供了意见和建议,现与大家分享。

1、用户体验时间用户通过浏览器访问Web服务器时,体验时间可以细化。

如下图所示,体验时间包括用户感应时间、浏览器处理时间、网络传输延时和后端服务器处理时间。

2、LoadRunner单次事务响应时间度量我们通常将核心业务操作定义为事务,在LoadRunner脚本中具体为web_url()、web_submit_data()等函数调用。

下面举例计算单个事务响应时间,定义一次web_url()调用为事务,web_url函数中请求4个文件。

LoadRunner 获取每个资源都要经过反应、第一次缓冲和接收三个阶段,反应阶段包括DNS解析、建立初始连接、SSL握手、FTP认证;第一缓冲时间是显示从初始HTTP请求(通常为GET)到成功收到Web服务器返回的第一次缓冲所经过的时间;接收时间显示在服务器发出的最后一个字节到达,即下载完成之前所有的时间;客户端时间显示由于浏览器反应时间或其他客户端相关延迟而导致请求在客户机上延迟的平均时间。

LoadRunner 执行web_url()语句时,请求资源的先后顺序不依赖代码书写顺序,导致很难直接确定执行web_url()的开始时间,但可以借助LoadRunner的分析工具模块页面诊断器(Web Page Diagnostics)获取事务开始时刻和结束结束。

在Web Page Diagnostics中可以获取资源下载完成时刻(Scenario Elapsed Time)和花费时间(Page Component's Download Time),二者之差即为资源下载的开始时刻,资源开始下载的最小时刻为事务的开始时刻;在Web Page Diagnostics中资源下载完成时刻(Scenario Elapsed Time)最大值为事务的结束时刻。

LoadRunner分析实时监视图表

LoadRunner分析实时监视图表

分析实时监视图表Q1 事务响应时间是否在可接受的时间内?哪个事务用的时间最长?看Transaction Response Time 图,可以判断每个事务完成用的时间,从而可以判断出那个事务用的时间最长,那些事务用的时间超出预定的可接受时间。

下图可以看出,随着用户数的不断增加,login 事务的响应时间增长的最快!Q2 网络带宽是否足够?“Throughput”图显示在场景运行期间的每一秒钟,从Web Server 上接受到的数据量的值。

拿这个值和网络带宽比较,可以确定目前的网络带宽是否是瓶颈。

如果该图的曲线随着用户数的增加,没有随着增加,而是呈比较平的直线,说明目前的网络速度不能够满足目前的系统流量。

Q3 硬件和操作系统能否处理高负载?“Windows Resources”图实时地显示了Web Server 系统资源的使用情况。

利用该图提供的数据,可以把瓶颈定位到特定机器的某个部件。

9 利用Analysis 分析结果场景运行结束后,需要使用Analysis 组件分析结果。

Analysis 组件可以在“开始程序”菜单中启动,也可以在Controller 中启动。

由于我本人对怎样分析结果最有效没有进行比较多的实践,所以这里只能按照常规的方法进行简单介绍。

注意:这里介绍的分析方法只适用于Web 测试。

9.1 分析事务的响应时间第一步,看“Transaction Performance Summary”图,确认那个事务的响应时间比较大,超出了我们的标准。

看下图,login 事务的平均响应时间最长。

然后我们再看“Average Transaction Response Time”,观察login 在整个场景运行中每一秒的情况。

从图中可以看出,login 事务的响应时间并不是一直都比较高,只是随着用户数的增加,响应时间才明显增加的。

然后我们再看“Average Transaction Response Time”,观察login 在整个场景运行中每一秒的情况。

LoadRunner常见测试结果分析(转)

LoadRunner常见测试结果分析(转)

LoadRunner常见测试结果分析(转)
在测试过程中,可能会出现以下常见的几种测试情况:
一、当事务响应时间的曲线开始由缓慢上升,然后处于平衡,最后慢慢下降这种情形表明:
* 从事务响应时间曲线图持续上升表明系统的处理能力在下降,事务的响应时间变长;
* 持续平衡表明并发用户数达到一定数量,在多也可能接受不了,再有请求数,就等待;
* 当事务的响应时间在下降,表明并发用户的数量在慢慢减少,事务的请求数也在减少。

如果系统没有这种下降机制,响应时间越来越长,直到系统瘫痪。

从以上的结果分析可发现是由以下的原因引起:
1. 程序中用户数连接未做限制,导致请求数不断上升,响应时间不断变长;
2. 内存泄露;
二、CPU的使用率不断上升,内存的使用率也是不断上升,其他一切都很正常;
表明系统中可能产生资源争用情况;
引起原因:
开发人员注意资源调配问题。

三、所有的事务响应时间、cpu等都很正常,业务出现失败情况;
引起原因:
数据库可能被锁,就是说,你在操作一张表或一条记录,别人就不能使用,即数据存在互斥性;
当数据量大时,就会出现数据错乱情况。

LoadRunner中的90%响应时间

LoadRunner中的90%响应时间

LoadRunner中的90%响应时间!LoadRunner中的90%响应时间是什么意思?这个值在进行性能分析时有什么作用?本文争取用最简洁的文字来解答这个问题,并引申出“描述性统计”方法在性能测试结果分析中的应用。

为什么要有90%用户响应时间?因为在评估一次测试的结果时,仅仅有平均事务响应时间是不够的。

为什么这么说?你可以试着想想,是否平均事务响应时间满足了性能需求就表示系统的性能已经满足了绝大多数用户的要求?假如有两组测试结果,响应时间分别是{1,3,5,10,16} 和 {5,6,7,8,9},它们的平均值都是7,你认为哪次测试的结果更理想?假如有一次测试,总共有100个请求被响应,其中最小响应时间为0.02秒,最大响应时间为110秒,平均事务响应时间为4.7秒,你会不会想到最小和最大响应时间如此大的偏差是否会导致平均值本身并不可信?为了解答上面的疑问,我们先来看一张表:在上面这个表中包含了几个不同的列,其含义如下:CmdID测试时被请求的页面NUM响应成功的请求数量MEAN所有成功的请求的响应时间的平均值STD DEV标准差(这个值的作用将在下一篇文章中重点介绍)MIN响应时间的最小值50 th(60/70/80/90/95 th)如果把响应时间从小到大顺序排序,那么50%的请求的响应时间在这个范围之内。

后面的60/70/80/90/95 th 也是同样的含义MAX响应时间的最大值我想看完了上面的这个表和各列的解释,不用多说大家也可以明白我的意思了。

我把结论性的东西整理一下:1.90%用户响应时间在LoadRunner中是可以设置的,你可以改为80%或95%;2.对于这个表,LoadRunner中是没有直接提供的,你可以把LR中的原始数据导出到Excel中,并使用Excel中的PERCENTILE 函数很简单的算出不同百分比用户请求的响应时间分布情况;3.从上面的表中来看,对于Home Page来说,平均事务响应时间(MEAN)只同70%用户响应时间相一致。

loadrunner面试问题

loadrunner面试问题

问题1:LoadRunner响应时间是什么?答:响应时间就是客户端发送请求,服务器返回最后(或者第)一个字节的时间。

LoadRunner的事务函数功能是度量客户端和服务器之间交互时间的。

事务函数最后在分析图表里有,比如你在前边开发脚本的时候你在登陆功能中添加了事务函数,那么controller中运行1000个用户之后,在分析图表中你就会看到1000个用户登录功能所消耗的时间(平均,其中1000个用户用的最多的时间,10000个用户用的最少的时间)。

问题2:页面点击数与页面浏览数什么概念,页面点击数过高会对系统的性能产生什么影响?答:页面点击数:又名“hits”,它包括了点击了某个网页后,浏览器为了显示此网页而附带来的所有图片等支持文件的数量。

“点击数”往往被用来衡量网站服务器的工作负载,也是衡量网站服务器性能的标准之一。

文件数量的增多,会增加网络流量。

页面浏览量(页面量):又名“PageView”,它是指实际被点击的网页数量。

“页面浏览量”往往被用来衡量网站内容的受欢迎程度和被访问情况。

问题3:在LoadRunner中有个Anget,这个Anget具体起什么作用啊?在讲Robot的架构的时候好像也提到过,但是没有讲Anget具体作用,是不是LR与Robot中Anget作用一样的呢?答:Agent 的作用是提供一个宿主环境提供虚拟用户运行,在LoadRunner中叫做Load Generator。

问题4:这个章节中讲到了“响应时间”、“页面点击数”、“吞吐量”这几个概念,我想问一下,“响应时间”越快是不是就越好?“页面点击数”越少是不是就越好?“吞吐量”越大是不是就越好?答:性能是寻找执行效率与功能之间的平衡。

这些不过是性能分析所关注的。

不是越大越好。

问题5:loadrunner如何选择协议?答:首先要熟悉应用程序的架构,采用什么协议进行通讯的.因为LoadRunner主要是通过捕获客户端与服务器之间的数据通讯包,根据这些数据包来生成脚本的.所以,如果协议选择不正确的话,LoadRunner就无法捕获客户端与服务器之间的数据通讯包。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这里的响应时间不包含客户端GUI时间(例如浏览器解释页面所消耗的时间)。

前面说响应时间是用户请求发出和服务器返回之间的时间差,那么得到这个时间就够了吗?例如:现在有一场跑步比赛。

当比赛完成后,可以得到每位运动员跑完整个比赛所需要消耗的时间,现在需要分析谁的起跑好、谁的冲刺好,能分析出来吗?答案是不能,虽然得到了最重要的完成比赛的响应时间,但是这对分析和优化几乎没有作用,因为只知道了结果而不知道过程。

跑步的时间是由起跑、中途、冲刺等时间组成的,如果想要进行分析优化,必须先了解各个阶段所花费的时间和速度以及各个运动员的优缺点。

对于软件来说,通过事务得到的系统响应时间也是由非常多的部分组成的,一般来说响应时间由网络时间、服务器处理时间、网络延迟三大部分组成。

先来看看当一个客户端发出请求到服务器返回需要经历哪些路径,如图2所示。

1.网络时间客户端发出请求首先通过网络来到Web Server上(消耗时间为N1);然后Web Server 将处理后的请求发送给App Server(消耗时间为N2);App Server将操作数据指令发送给Database (消耗时间为N3);Database服务器将查询结果数据发送回App Server(消耗时间为N4);App Server将处理后的页面发给Web Server(消耗时间为N5);最后Web Server 将HTML转发到客户端(消耗时间为N6)。

这里的Nx都是网络传输上的时间开销,没有计算业务处理所需要花费的时间。

2.服务器处理时间另外一个方面还要考虑各个服务器处理所需要的时间WT、AT、DT。

3.网络延迟除了上面两种时间开销以外,还要考虑网络延迟的问题。

所以最终的响应时间组成为:响应时间= 网络延迟时间+ WT+AT+DT +(N1+N2+N3)+(N4+N5+N6)+ WT+AT+DT 也可以简单认为响应时间由网络开销(前端)和服务器开销(后端)两大部分组成,如图3所示。

那么这些消耗的时间都花在什么事情上了呢?影响网络的因素一般包括以下内容:1.前端NetworkDNS LookupTime to connectTime to first bufferNetwork TimeDownload TimeSSL handshakeFTP authenticationClient TimeError Time网络延迟2.后端服务Web ServerServlet TimeMethod Time静态动态压缩App ServerEJB Time响应时间这是事务的目的,通过事务记录业务操作所消耗的响应时间。

事务自身时间事务中哪怕没有操作,也是需要时间的,不过这个时间一般在0.01秒左右,所以可以忽略。

1.lr_start_transaction("thinktime");2.lr_end_transaction("thinktime", LR_AUTO);运行上面的脚本后,可以看到:1.Action.c(5): Notify: Transaction "thinktime" started.2.Action.c(9): Notify: Transaction "thinktime" ended with "Pass" status (Duration: 0.0121).思考时间(Think Time)Think Time是LoadRunner提供的一种模拟用户等待的方式,通过lr_think_time()函数实现。

在函数内写入对应的时间(单位是秒),当脚本在Controller中运行到该函数时就会等待相应的时间。

注意在VuGen中,回放Think Time默认关闭。

Think Time在进行性能测试的时候需要打开,只有这样每个虚拟用户才是真正按照用户的操作速度来完成请求,才能得到在真实情况下的系统数据。

如果不打开Think Time,测试获得的数据是在全负载下的一些理论峰值数据。

那么Think Time 在事务中如何影响事务时间呢?编写如下脚本:1.lr_start_transaction("thinktime");2.lr_think_time(5);3.lr_end_transaction("thinktime", LR_AUTO);在Run-time Settings中设置Think Time,启用Replay Think Time功能,运行之后可以看到以下结果:1.Action.c(5): Notify: Transaction "thinktime" started.2.Action.c(7): lr_think_time: 5.00 seconds.3.Action.c(9): Notify: Transaction "thinktime" ended with"Pass" status (Duration: 5.0254 Think Time: 4.9995).所以Think Time 会被算在事务的时间内,不过在Analysis中可以设置过滤规则将其扣除,另外我们也建议尽量不要在事务内使用lr_think_time()函数。

浪费时间(Wasted Time)在使用事务的时候,经常会看到在事务日志中有Wasted Time。

Wasted Time是指事务中应该扣除的由于其他原因导致的时间浪费。

在默认情况下LoadRunner会将自身脚本运行浪费的时间自动记入Wasted Time。

例如执行关联、检查点等函数的时间。

除了脚本自身浪费的时间,某些时候使用C语言等外部接口进行处理所消耗的时间也会影响事务的时间,而这个时间LoadRunner无法处理,在这种情况下就需要人为地计算第三方时间开销,并且将这个开销的时间记入Wasted Time中。

运行一下下面的代码:1.Action()2.{3. int i;4. int baseIter = 100;5. char dude[1000];6. merc_timer_handle_t timer;7. // Examine the total elapsed time of the action8. //Start transaction9. lr_start_transaction("Demo");10.timer=lr_start_timer();11. for (i=0;i<=baseIter*1000;i++) {12. sprintf(dude,"This is the way we waste time in a script =%d", i);13. }14. wasteTime=lr_end_timer(timer); //时间单位为毫秒15. lr_wasted_time(wasteTime*1000);//将wasteTime转换为秒并计入lr的Wasted Time,当在场景中运行的时候,事务的响应时间会自动扣除Wasted Time16. lr_end_transaction("Demo", LR_AUTO);17. return 0;18.}其中,lr_start_timer()是一个LoadRunner自带的时间计数器,它和lr_end_timer()相对应,能够返回这两个函数间的时间差。

运行脚本后,等待一段时间脚本运行结束,可以看到以下日志。

1.Action.c(18): Notify: Transaction "Demo" started.2.Action.c(27): wasted time is 85.8600003.Action.c(28): Notify: Transaction "Demo" ended with"Pass" status (Duration: 85.8772 Wasted Time: 85.8600).通过上面这个日志可以看到,在VuGen运行脚本的时候这个1000次的C语言操作所消耗的时间会被算在Transaction时间内,导致Transaction的时间变长。

当通过lr_start_timer()计时函数将这个消耗时间加入Wasted Time后,这个脚本就能正确地计算出事务的时间和该事务时间的Wasted Time了。

当在场景中运行的时候,事务的响应时间会自动扣除Wasted Time。

为了确保响应时间的正确,需要扣除在运行脚本时自身的时间消耗,事务中尽量避免出现非请求的处理内容,如果无法避免请使用lr_wasted_time()函数将多余的时间开销扣除。

例如这样的脚本:1.merc_timer_handle_t timer; //变量声明2.lr_start_transaction("Demo");3.timer=lr_start_timer();4.lr_load_dll("getkey.dll");5.lr_save_string(getrandkey(),"key");6.//通过调用dll获得密钥7.wasteTime=lr_end_timer(timer);8.lr_wasted_time(wasteTime*1000);9.lr_end_transaction("Demo", LR_AUTO);计算密钥是很消耗时间的,那么可以使用timer这个变量来记录计算的时间,并将这个时间从整个事务中扣除。

在计算Wasted Time时不要直接使用lr_wasted_time()覆盖,而忘了加上脚本中LoadRunner函数的自身时间。

通过lr_get_transaction_wasted_time()函数可以获得事务自身的Wasted Time,将这个时间累加上第三方统计的Wasted Time再通过lr_wasted_time()函数覆盖。

3.手工事务前面都是使用LR_AUTO来自动判断事务状态,现在来做一个脚本,看看LoadRunner 的事务是如何自动判断状态的。

录制一个论坛注册用户的脚本,在提交注册表单处添加事务开始及结束标志,然后回放该脚本。

事务的结果是PASS还是FAIL呢?虽然回放脚本注册用户是失败的(该用户已经存在),但是事务还是在PASS状态下完成了,而且会发现事务的持续时间很短。

相关文档
最新文档