【编译】StreamInsight应用调优入门(三)——是适配器慢还是引擎慢?

参考博客:http://blogs.msdn.com/b/domain_connect4


这篇文章是对前一篇博文《StreamInsight应用调优入门(二)——吞吐量》的后续介绍。本文主要会从适配器和引擎的角度来深层次探讨如何识别影响吞吐量的关键因素。本文的介绍将围绕以下三个方面展开:

  • 吞吐量较低可能是因为引擎跟不上适配器的速度,也有可能是适配器自身在访问数据源时碰到了性能瓶颈;
  • 输出适配器速度太慢会导致引擎向输入适配器回推事件并因此降低吞吐量;
  • 如何调优适配器

使用StreamInsight事件调试器

事件流调试器是一个基于事件跟踪的独立调试工具。该调试器有两种用途:

  • 事件流跟踪。调试会话可基于:

    • 从特定操作查询的实时记录生成的跟踪,这需要将调试器连接到某一处于活动状态的服务器。

    • 使用命令行实用工具在该调试器外部生成的跟踪文件,该文件随后加载到该调试器中。

  • 监视服务器。在此模式下,调试器提供一个可列出系统和应用程序对象的对象资源管理器。您可以获取其中每个实体的操作诊断信息。该对象资源管理器还可充当接口,通过它可启用和禁用查询跟踪,并且还支持启动和停止查询执行等操作。

更多关于如何使用StreamInsight事件调试器信息,请参考MSDN上这里的介绍。

下面将具体介绍如何利用StreamInsight的事件调试器来查看输入/输出适配器的诊断情况。

输入适配器

使用事件调试器查看输入适配器诊断参数的方法如下:

  1. 打开事件调试器,连接到目标服务器;
  2. 选择想要查看的“Queries(查询)”,展开进入“Operators(运算符)”,右击选择“Show Diagnostics(显示诊断信息)”,如下图所示:
  3. 持续按下“F5”键刷新此页面,会发现部分数字会发生改变,如“Total Input Events Count(输入事件总数)”可能会增加;
  4. 输入适配器和系统引擎之间的流队列可以通过展开“Streams(流)”,并选择名称形如“InputAdapter_OutputTo_OutputAdapter”的运算符,并右击“Show Diagnostics(显示诊断视图)”,如下图所示:

常见场景剖析:

  • 如果“Total Output Events Count(输出事件总数)”持续增加,而“Total Time in Suspended State(总延滞时间)”一直为0,这表明输入适配器不断地加入事件后,StreamInsight引擎能够足够快的将其处理完;
  • 如果“Times Suspended(延滞时间)”大于0,且“Total Time in Suspended State(总延滞时间)”数值较大,这表明查询处理的速度过慢或输出适配器没能尽快地处理完输出事件;
  • 如果流队列中的“Total Input Events Count(输入事件总数)”不断增加,而“Stream Events Count(流事件总数)”保持很低,表明系统运行正常,引擎能够正常速度地处理输入事件;
  • 如果流队列中的“Total Input Events Count(输入事件总数)”数值接近于200000,一般来说这表明事件输入过快,引擎没法跟得上输入的速度。

输出适配器

输出适配器的诊断视图的查看方法与上述的输入适配器非常类似:选择与输出适配器相关的运算符,右击选择“Show Diagnostics(显示诊断信息)”即可。

常见场景剖析:

  • 如果“Stream Events Count(流事件总数)”值较低,说明输出适配器正在正常地不断清空事件;
  • 如果“Stream Events Count(流事件总数)”值不断增加,例如从1000到10000再到100000等等,这往往标识着输入适配器没法快速的清空事件。发生这种情况往往是因为输出适配器写入数据库或磁盘所致;
  • 如果“Total Output Events Count(输出事件总数)”值较低,表明系统输出的事件总数较少,这通常是由于查询逻辑或引擎性能所致;
  • 输出适配器的性能良好与否会直接影响到输入适配器。如果引擎发现某个查询的输出适配器的速度跟不上,它将不会继续为其从输入适配器取事件,而是给予其他并行执行的查询更高的优先级。

查询视图

检查引擎或适配器性能良好与否的另一个方法是查看查询的诊断视图,方法很简单:选择想查看的查询,右击选择“Show Diagnostics(显示诊断信息)”,如下图所示:


在这个诊断视图中你能看到非常多的参数,可以参考MSDN上的这篇文章《监视 StreamInsight 服务器和查询》进行学习。最基本的需要了解的两个参数分别是“Total Incoming Events Count(查询传入事件总数)”和“Total Consumed Events Count(查询使用事件总数)”。如果两者的差值不断增大,表明查询处理速度正不断降低。

后续阅读

如果发现输入适配器没法再向StreamInsight引擎输送事件的话,那么是时候该对适配器进行一番调优了。而如果发现延滞状态的时间“Times Suspended”一直居高不下的话,那么就该花时间诊断下引擎的性能了。

Mark Simms写过一篇调优适配器的文章Adventures in performance tuning,感兴趣的读者可以阅读一下。

另外Visual Studio中附带的Profiler也是一个帮助调优CPU/内存/并行的利器,可以参考阅读MSDN杂志上的这篇文章《使用 Visual Studio 分析器找出应用程序瓶颈》。

posted @ 2011-11-29 16:28  StreamInsight  阅读(963)  评论(1编辑  收藏  举报