Sunday, July 3, 2016

ADF Performance Analyzer - Part 1

Scenario - In  enterprise level apps there are multiple developers involved in creating different modules and an
  • Untuned select query 
Eg : Select DISTINCT(EMPLOYEE_NAME) from Employees;
Assume Employee table as over 500,000 rows.
  •  Large fetch of rows
Eg :  Table is set to scrollable  - end user scrolls to bottom of table which fetchs all rows  into memory
  •  Frequent inner queries in Groovy.
Eg : A Groovy expression  which queries multiple tables to get the data is set on a Transient attribute and refreshes frequently. 

can bring down the performance of the applications..

Note - Above mentioned scenarios are not the only cases of performance issues but most important ones.Other scenarios will be covered in next post.

So instead of figuring out the performance bottlenecks once the application is live, It is always good to capture such memory intensive spots in Testing or UAT Phases.

Solution -

Built an ADF Analyzer to monitor such events based on following architecture -

What are features available?
1) Metrics capture can be turned ON / OFF easily.
2) Configurations page to customize the definitions of the parameters used in monitors.

3) DashBoard view 

4) Long running queries -

5) Large Fetches

6) Query Frequency -

7) Migration function, which will change the extension of current view,entity and app module objects to ADFAnalyzer's extension classes.

8) Metrics capture is light weight and adds a very minimal overhead to your application's performance.

9) In next version, AppModule metrics such as slow activations/passivations, app module performance over long periods of time will be added to the analyzer.   

Note - ADFAnalyzer engine is tested with couple of enterprise level apps so far and outcome is positive. Currently am testing it under complex scenarios, once complete,
I will share the download link and instructions to set it up in your applications.

 Hope it helps :-)