This post is a continuation of previous blog  Throughput, following below steps to drill into what's the behind story of the number of input throughput and output throughput.

  1. Low throughput low is due to Engine not able to catch up adapter or adapter itself is resources bottleneck consuming from data source
  2. Is output adapter slow that leads to engine push back input adapter and drag down the throughput?
  3. Tips to tune your input adapter

Input Adapter

  • Use Event Flow Debugger http://msdn.microsoft.com/en-us/library/ff518532.aspx  attach your query, and find input adapter operator, right click, 'Show Diagnostics'
  • Keep push 'F5', look at 'Total Output Events Count' is increasing, and 'Times Suspended' equals '0', this indicates while your adapter is continious pushing events, engine is able to drain input queue quickly.
  • If the 'Times Suspend' is  greater than 0 and 'Total Time in Suspended State' is quite big, then, either the query processing is low or the output adapter is not able to drain output fast enough which will cover detail later.
  •  

 

  • The stream queue between Input Adapter and Engine, in another world, check out below left pane, right click on Streams -> <input adapter name>_outputto_<first operator in your query>, show diagnostics.
  • As you keep push button refresh, if the "Total Input Events Count" is increasing, and  "Stream Event Count" is low as below chart demonstrated, indicates that the events in the streams being consumed lively,
  • Reversly, if the "Stream Event Count" close to 200,000, which means engine is not able to catch up input speed.

Output Adapter

  • "Stream Events Count" is 0 show in below chart indicates that output adapter is actively draining events, however, below chart indicates that engine also has very few output due to either the query semantics or engine performance
  • If "Stream Events Count" is greater than 1k, 10k, 100k, that signals output adapter is not able to drain results quickly, which most likely happen when it write results to database or disk or other components.
  • The output adapter slow down will directly impact the input side, in another world, if streaming engine detects your output adapter is not fast enough, there is no reason to keep consuming input, instead,  the engine will give higher priority to other parallel queries.

 

 

 Query Level view

  • Another way to check Engine performance vs Adapter is to look at query diagnostic view.
  • The increasing delta between "Total Consumed Event Count"  and "Total Incoming Event Count"  indicates query processing is slowing down.

Finally, if your input adapter can not push hard enough for engine to consume, it's time to tune your adapter,  here are the suggestions:

1. Check out Mark's blog about his input adapter tuning adventure (http://blogs.msdn.com/b/masimms/archive/2011/01/05/adventures-in-performance-tuning.aspx)

2. Try visual studio profiler http://www.youtube.com/watch?v=FfpmLFfpSg4 do CPU/Memory/Concurrency profiling, find bottleneck in your adapter so can help improve your app performance.

3. When you see the "Times Suspended" goes high, that's time to check out how to diagnose Engine performance!

Good Luck!