【编译】StreamInsight应用调优入门(二)——吞吐量
参考博客:http://blogs.msdn.com/b/domain_connect4
吞吐量
什么是吞吐量?
StreamInsight吞吐量包含两个不同的方面:输入吞吐量和输出吞吐量。前者输入吞吐量是指事件从输入适配器进入StreamInsight引擎的速度有多快;后者输出吞吐量是指查询结果的输出事件被输出适配器接收到的时间有多快。
如何监控吞吐量?
一个简单的方法是使用Visual Studio中的Server Explorer。下面是具体的步骤:
1. 导航到Servers-><machine name>->Performance Counters (注:机器上安装的中文操作系统,但是Visual Studio安装的是英文版本,故后续的截图会有点“中英参半”)
2. 右击Performance Counters,新建自定义类别,如图:
3. 下面我们添加两个计数器:输入事件速率(InputEventRate)和输出事件速率(OutputEventRate),类型均为RateOfCountsPerSecond64:
4. 创建好之后如下:
5. 下面在输入适配器和输出适配器中加入计数器代码,如下:
输入适配器中:
PerformanceCounter inputEventRateCounter = new PerformanceCounter("StreamInsightCategory", "InputEventRate", false); if(Enqueue(ref cepEvent) == EnqueueOperationResult.Success) { inputEventRateCounter.Increment(); }
类似地,在输出适配器中:
PerformanceCounter outputEventRateCounter = new PerformanceCounter("StreamInsightCategory", "OutputEventRate", false); if(Dequeue(out cepEvent) == EnqueueOperationResult.Success) { outputEventRateCounter.Increment(); }
6. 利用Windows系统自带的性能监视器(perfmon.exe)查看上述两个计数器的数值,如图:
性能影响因素
- 输入适配器的性能取决于从数据源(如SQL数据库,日志文件,网络I/O等)读取数据并将其转换为CEP事件的速度;
- 输出适配器的速度依赖于StreamInsight引擎的输出队列,因此它的性能会受到数据存储的影响,如输出数据存储到磁盘或数据库等;
- StreamInsight引擎是否高效主要取决于它对输入数据在用户查询上的效率;
- 除此之外,还有许多其他性能影响因素,如托管StreamInsight的主机环境性能等等。