【问题标题】:What is the SQL used to create the Running Vusers graph in LoadRunner Analysis?在 LoadRunner Analysis 中创建正在运行的 Vuser 图表时使用的 SQL 是什么?
【发布时间】:2011-12-07 18:15:10
【问题描述】:

在 HP LoadRunner Analysis 中,有一个正在运行的 vuser 图表,它显示了在整个测试过程中运行的当前虚拟用户数。示例图如下所示。

有谁知道用于为该图创建数据的 SQL 是什么?我知道数据是直接存储在LoadRunner分析MDB数据库中的吗?即An_Session1.mdb,虽然我无法确定SQL Query。

谢谢

【问题讨论】:

    标签: sql performance ms-access performance-testing loadrunner


    【解决方案1】:

    我对查询进行了一些改进,因此我发布了一个新答案,而不是编辑之前的答案。

    这会生成包含特定操作随时间推移累积的 vuser 计数的列。请注意,输出不是线性的,它只包含发生某事时的一行(x 轴)。

    SELECT
     M.[End Time] AS RelTimeSec, 
     M.[VUser ID] AS VuserID,  
     M.[VUser Status ID] AS StatusID, 
     S.[Vuser Status Name],
     ( SELECT 
         Count( VuserEvent_Meter.[VUser Status ID] )
       FROM 
         VuserEvent_Meter 
       WHERE 
         VuserEvent_Meter.[InOut Flag]=1 AND
         VuserEvent_Meter.[End Time]<=M.[End Time] AND
         VuserEvent_Meter.[VUser ID]>0 AND
         VuserEvent_Meter.[VUser Status ID]=1
     ) AS CumulReady,
    ( SELECT 
         Count( VuserEvent_Meter.[VUser Status ID] )
       FROM 
         VuserEvent_Meter 
       WHERE 
         VuserEvent_Meter.[InOut Flag]=1 AND
         VuserEvent_Meter.[End Time]<=M.[End Time] AND
         VuserEvent_Meter.[VUser ID]>0 AND
         VuserEvent_Meter.[VUser Status ID]=2
     ) AS CumulRun,
    ( SELECT 
         Count( VuserEvent_Meter.[VUser Status ID] )
       FROM 
         VuserEvent_Meter 
       WHERE 
         VuserEvent_Meter.[InOut Flag]=1 AND
         VuserEvent_Meter.[End Time]<=M.[End Time] AND
         VuserEvent_Meter.[VUser ID]>0 AND
         VuserEvent_Meter.[VUser Status ID]=3
     ) AS CumulPause,
     ( SELECT 
         Count( VuserEvent_Meter.[VUser Status ID] )
       FROM 
         VuserEvent_Meter 
       WHERE 
         VuserEvent_Meter.[InOut Flag]=1 AND
         VuserEvent_Meter.[End Time]<=M.[End Time] AND
         VuserEvent_Meter.[VUser ID]>0 AND
         VuserEvent_Meter.[VUser Status ID]=4
     ) AS CumulQuit
    
    FROM
     VuserEvent_Meter M 
    INNER JOIN 
     VuserStatus S ON M.[VUser Status ID] = S.[Vuser Status ID]
    WHERE
      M.[InOut Flag]=1 AND M.[VUser Status ID] IN (1,2,3,4) AND M.[VUser ID]>0
    ORDER BY
     M.[End Time]
    

    输出类似:

    RelTimeSec  VuserID StatusID    Vuser Status Name   CumulReady  CumulRun    CumulPause  CumulQuit
      15    1   2   Run     1   1   0   0
      15    1   1   Ready   1   1   0   0
      30    2   2   Run     2   2   0   0
      30    2   1   Ready   2   2   0   0
      45    3   1   Ready   3   3   0   0
      45    3   2   Run     3   3   0   0
      60    4   2   Run     4   4   0   0
      60    4   1   Ready   4   4   0   0
      75    5   1   Ready   5   5   0   0
      75    5   2   Run     5   5   0   0
      90    6   2   Run     6   6   0   0
      90    6   1   Ready   6   6   0   0
    ...
    1687    88  4   Quit    82  82  0   19
    1687    86  4   Quit    82  82  0   19
    1687    85  4   Quit    82  82  0   19
    1687    87  4   Quit    82  82  0   19
    1697    113 2   Run     83  83  0   19
    1697    113 1   Ready   83  83  0   19
    1712    114 1   Ready   84  84  0   19
    1712    114 2   Run     84  84  0   19
    1727    115 1   Ready   85  85  0   19
    1727    115 2   Run     85  85  0   19
    1742    116 2   Run     86  86  0   19
    1742    116 1   Ready   86  86  0   19
    1747    89  4   Quit    86  86  0   23
    

    【讨论】:

    • 谢谢 K,这正是我需要的开始。通过从跑步中减去退出,我能够得到一个累积的跑步系列,并且通过聚合数据,我已经能够准确地在我的初始图表中重现趋势线。非常感谢您的帮助!
    【解决方案2】:

    我假设您指的是这种情况下的分析结果。

    如果您打开 .mdb 文件并查看“VuserEvent_meter”表,您将在那里找到所有需要的数据。

    它引用 VuserStatus 表来了解确切的事件。这是 SQL(用 Access 编写):

    SELECT
     [M.End Time] AS RelTimeSec, [M.VUser ID] AS VuserID,  [M.VUser Status ID] AS StatusID
    FROM
     VuserEvent_Meter M 
    WHERE
      [M.InOut Flag]=1 AND [M.VUser Status ID]>0 AND [M.VUser ID]>0
    ORDER BY
     [M.End Time]
    

    如果要包含实际事件名称,则需要根据 [M.VUser 状态 ID] = [VuserStatus.Vuser 状态 ID] 加入 [VuserStatus.Vuser 状态名称] 列。

    我希望这会为您指明正确的方向。

    【讨论】:

    • 感谢 K,但不幸的是,这个 SQL 生成了一个不断增加的折线图,而不是上图中显示的趋势。还有其他想法吗?
    • 对于 3 个输出列,第一列一直在增加,是的,因为这是事件发生的时间。
    • 实际上不仅仅是时间在不断扩大,尽管现在感谢您在下面的回答,这更有意义。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多