Skip to main content

ADF performance results

Doing a quick set of performance tests to just confirm a few things I have experienced with ADF. (I will update this post with new info after each test). All tests done on an XE db

Test 1) Read Only VO vs Updatable vs AM query vs SQL based VO - Scrollable 1000 batches of 1000
+- 300000 results

Read only vo query results: 203,31,47,31,31,47
AM Query timing  31,31,15,15,31,31
SQL timing:78,15,16,0,15,16
VO timing:11653,11919,9812,9485,9781,9734

So definitely a case for not using updateable VO's everywhere.

Test 2) Read Only VO vs Updatable vs SQL based VO - Range Paging 1000 batches of 1000
+- 300000 results

Read only vo query results: 125,47,63,32

SQL timing: 62,32,32,31
VO timing:125, 94, 47, 32

Test 3) Read Only VO vs Updatable vs SQL based VO - Range Paging FIRST_ROWS 1000 batches of 1000
+- 300000 results

Read only vo query results: 172,94,63,31

SQL timing: 78,62,15,15
VO timing:125, 78, 47, 47


NOTE: These are small localized tests to show some performance considerations and one size does not fit all.

Comments

  1. A point to consider though is that an updateable VO based on EO will cache the results in the EO cache - so subsequent queries on the same set of data might result in faster performance. In addition the EO cache can be shared among several VOs. You should be checking this too before making a call.

    ReplyDelete
  2. Yup thanks for the input, it is more an example of variance of changing a few tuning parameters as it stands. Will be expanding this with more results and scenarios as I go along.

    ReplyDelete

Post a Comment

Popular posts from this blog

ADF sort of generic screen for tables with the same structure

We have a couple (about a hundred) of tables with the same structure (Code, Description, Create Date, Update Date). So I wanted to do something simple so that I did not have to create all these screens 1) EO   I created the EO based on one of the tables I had that had the above columns. I then Added a transient attribute called table name to my EO based on a groovy expression. (the expression needs to change as I am reading web tier stuff from the model layer but I will fix this later) I then generated a java class for my EO. And added the following overriden method to my newly created java class. protected StringBuffer buildDMLStatement(int i, AttributeDefImpl[] attributeDefImpl,   AttributeDefImpl[] attributeDefImpl2, AttributeDefImpl[] attributeDefImpl3, boolean b) {   StringBuffer statement = super.buildDMLStatement(   i, attributeDefImpl, attributeDefImpl2, attributeDefImpl3, b); return new StringBuffer(StringUtils.replace(statement.to...

OJDeploy: Documentation for the tool

Real DOCS:  http://docs.oracle.com/cd/E26098_01/user.1112/e17455/deploying_apps.htm#OJDUG645 OJDeploy Documentation if you run it from the command line - I keep looking for this so I though I would post it here so I remeber. Oracle JDeveloper Deploy 11.1.2.1.0.6081 Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. Usage:   ojdeploy -profile <name> -workspace <jws> [ -project <name> ] [ <options> ]   ojdeploy -buildfile <ojbuild.xml> [ <options> ]   ojdeploy -buildfileschema Arguments:   -profile               the name of the Profile to deploy   -workspace      full path to the JDeveloper Workspace file(.jws)   -project              name of the JDeveloper Project within the .jws where the Profile can be...

Util code

public static MethodExpression getMethodExpression( String expr, Class returnType, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); ExpressionFactory elFactory = fc.getApplication().getExpressionFactory(); return elFactory.createMethodExpression( elctx, expr, returnType, argTypes); } public static javax.faces.el.MethodBinding getMethodBinding( String expr, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); return fc.getApplication().createMethodBinding(expr, argTypes); } SetPropertyListener listener = new SetPropertyListener( ActionEvent.class.getName()); listener.setFrom(link.getRoute()); listener.setValueExpression("to", JSFUtils.getValueExpression("#{pageFlowScope.route}", String.class)); action.addActionListener(listener); AdfFacesContext.getCurrentInstance().getPageFlowScope() .put("route", lin...