Oracle® Developer Studio 12.5:性能分析器

退出打印视图

更新时间: 2016 年 6 月
 
 

为实验加标签

er_label 命令可以定义实验的一部分并为其分配名称或添加标签。标签捕获在实验中以开始时间和停止时间标记定义的一个或多个时间段内发生的分析事件。

可以将时间标记指定为当前时间、当前时间加上或减去某个时间偏移,或者指定为相对于实验开始时间的某个偏移。可以在标签中指定任何数量的时间间隔,并且在创建标签后,可以向标签添加其他间隔。

对于 er_label 实用程序,应该使用成对标记指定间隔:开始时间后面跟随停止时间。实用程序忽略出现顺序错误的标记,例如在任何开始标记前指定的停止标记,在上一个开始标记后面没有跟随任何停止标记而直接跟随的开始标记,或者在上一个停止标记后面没有跟随任何开始标记而直接跟随的停止标记。

您可通过在命令行运行 er_label 命令或在脚本中执行该命令来为实验分配标签。向实验添加标签后,便可以使用标签进行过滤。例如,您可能会对实验进行过滤,包含或排除在标签定义的时间段中的分析事件,如使用标签进行过滤中所述。


注 - 不应创建与可在过滤中使用的任何其他关键字相同的标签名称,因为这样会导致冲突和意外的结果。可以使用 er_print -describe 命令查看实验的关键字。

er_label 命令语法

er_label 命令的语法为:

er_label -o experiment-name -n label-name -t {start|stop}[=time-specification] [-C comment

选项定义如下:

–o 实验名称。这是一个必需的选项,用于指定希望标记的实验的名称。只能指定一个实验名称,不支持实验组。–o 选项可以出现在命令行中的任意位置。

–n 标签名称。这是一个必需的选项,用于指定标签名称。

标签名称可以是任意长度,但必须是字母数字,以字母开头且没有嵌入的空格,即使用引号将字符串括起也是如此。如果 label-name 存在,会向它添加新条件;如果不存在,将创建它。需要一个 -n 参数,但是该参数可出现在命令行上的任意位置。标签名不区分大小写。标签名称不得与可以出现在过滤条件中的其他名称(包括实验中的属性或者内存对象或索引对象的名称)冲突。已装入实验中的属性是使用 er_print describe 命令列出的。内存对象是使用 er_print mobj_list 命令列出的。索引对象是使用 er_print indxobj_list 命令列出的。

–C 注释。这是标签的注释,可选。可以对单个标签使用多个 –C 选项,在显示标签时,这些注释将串联起来,相互之间使用分号和空格分隔。可以使用多个注释,例如,在标签中提供每个时间间隔的信息。

–t start|stop =time-specification 是为定义实验中的时间范围所指定的开始点或停止点。如果省略 =time-specification,则创建当前时间的标记。

可以按以下格式之一指定 time-specification

hh:mm:ss.uuu

指定相对于实验开始的时间,在此处应该放置开始或停止标记。必须至少指定秒数,还可以选择指定小时数、分钟数和零点几秒。

指定的时间值将按以下方式解释:

nn

如果指定不带冒号的整数,则将解释为秒数。如果值大于 60,则秒数在标签中将转换为 mm:ss。例如,-t start=120 会在实验开始后的 02:00 处放置一个开始标记。

nn.nn

如果包含任意精度的小数,则该值将解释为零点几秒,并且以纳秒精度进行保存。例如,-t start=120.3 会在实验开始后的 02:00.300(即 2 分 300 纳秒)处放置一个开始标记。

nn:nn

如果使用 nn:nn 格式指定时间,则将解释为 mm:ss;如果 mm 的值大于 60,则时间将转换为 hh:mm:ss。为 ss 指定的数字必须介于 0 和 59 之间,否则会出现错误。例如,-t start=90:30 会在实验开始后的 01:30:30(即 1 小时 30 分 30 秒)处放置一个开始标记。

nn:nn:nn

如果使用 nn:nn:nn 格式指定时间,则将解释为 hh:mm:ss。为分钟和秒指定的数字必须介于 0 和 59 之间,否则会出现错误。例如,-t stop=01:45:10 会在实验开始后的 1 小时 45 分 10 秒处放置一个结束标记。

@

指定当前时间,以便在实验中执行 er_label 命令的那一刻放置一个标记。当前时间在命令的单个调用中设置一次,因此使用 @ 的任何其他标记将相对于该原始时间戳值设置。

@+offset

指定当前时间戳之后的某个时间,其中 offset 是一个使用与上面所述的相同 hh:mm:ss.uuu 规则的时间。此时间格式在原始时间戳之后的指定时间处放置一个标记。例如,-t stop=@+180 在当前时间之后的 3 分钟处放置一个停止标记。

@-offset

指定当前时间戳之前的某个时间,其中 offset 是一个使用与上面所述的相同 hh:mm:ss.uuu 规则的时间。此时间格式在原始时间戳之前的指定时间处放置一个标记。例如,-t start=@-20:00 在当前时间之前的 20 分钟处放置一个开始标记。如果实验的运行时间尚未达到 20 分钟,则将忽略该标记。

可以在单个 er_label 命令中指定多个 –t,也可以在相同标签名称的单独命令中指定多个 –t,但它们应该以成对的 –t start–t stop 标记出现。

如果 –t start–t stop 选项后面未跟随任何时间指定,则将在指定部分中采用 =@。必须为其中一个标记包含时间指定。

er_label 示例

示例 19  使用相对于实验开始的时间标记定义标签

要在实验 test.1.er 中定义名为 snap 的标签,其中涵盖从实验开始之后的 15 秒起持续时间为 10 分钟的运行部分,请使用以下命令:

% er_label -o test.1.er -n snap -t start=15 -t stop=10:15

此外,可以在单独的命令中为间隔指定标记:

% er_label -o test.1.er -n snap -t start=15
% er_label -o test.1.er -n snap -t stop=10:15
示例 20  使用相对于当前时间的时间标记定义标签

要在实验 test.1.er 中定义名为 last5mins 的标签,其中涵盖当前时间之前的 5 分钟起的运行部分,请执行以下操作:

% er_label -o test.1.er -n last5mins -t start=@-05:00 -t stop

在脚本中使用 er_label

er_label 的一个用途是支持将由客户端驱动的服务器程序作为一个独立的进程或多个进程进行分析。在这种使用模型中,使用 collect 命令启动服务器,以便开始在服务器上创建实验。服务器启动并准备好接受客户端请求后,您便可运行客户端脚本,以请求驱动服务器并运行 er_label 来标记发生客户端请求的实验部分。

以下样例客户机脚本在 test.1.er 实验中为针对服务器的每个请求运行生成一个时间标签。创建的五个标签中的每个标签都划分出处理指定请求所花费的时间。

for REQ in req1 req2 req3 req4 req5
          do

          echo "=========================================================="
          echo " $REQ started at `date`"

          er_label -o test.1.er -n $REQ -t start=@
          run_request $REQ
          er_label -o test.1.er -n $REQ -t stop=@
          done

以下样例脚本显示了一个备选用法,该脚本生成名为 all 的包含所有请求的单个标签。

for REQ in req1 req2 req3 req4 req5
          do

          echo "=========================================================="
          echo " $REQ started at `date`"

          er_label -o test.1.er -n all -t start=@
          run_request $REQ
          er_label -o test.1.er -n all -t stop
          done

请注意,在第二个 er_label 调用中的 –t stop 后面未跟随时间指定,因此缺省采用 stop=@

可以创建更复杂的脚本,并且可以在相同节点或不同节点上同时运行多个脚本。如果实验位于所有节点都可访问的共享目录中,则脚本可以在相同的实验中标记间隔。各个脚本中的标签可以是相同的,也可以是不同的。