Oracle ADF Architecture TV - Development - Performance & Tuning

862 views

Published on

Slides from Oracle's ADF Architecture TV series covering the Development phase of ADF projects, an in-depth look at performance and tuning of your ADF applications.

Like to know more? Check out:

- Subscribe to the YouTube channel - http://bit.ly/adftvsub
- Development Playlist - http://www.youtube.com/playlist?list=PLJz3HAsCPVaQfFop-QTJUE6LtjkyP_SOp
- Read the episode index on the ADF Architecture Square - http://bit.ly/adfarchsquare

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
862
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
64
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Oracle ADF Architecture TV - Development - Performance & Tuning

  1. 1. 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  2. 2. 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Real World ADF Design & Architecture Principles Performance & Tuning 15th Feb 2013 v1.0
  3. 3. 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Learning Objectives •  At the end of this module you should be able to: –  How to prepare for performance by design –  Setting realistic performance expectations –  What to consider beyond ADF for performance –  What to tune within the ADF stack Image: imagerymajestic/ FreeDigitalPhotos.net
  4. 4. 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. •  The requirements document specifies the application must be "performant" •  A generic requirement states all pages for all 3 applications must return a response within ½ second •  There is a specific requirement on the OStore product search page that it must be extremely fast Non Functional Requirements
  5. 5. 5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Performance is a runtime goal that at design time is met by applying programming best practices. What does this have to do with architecture? Exercise Image: imagerymajestic/ FreeDigitalPhotos.net Shall we drop this session and have coffee instead?
  6. 6. 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Program Agenda •  The quest for performance •  Performance –  General Considerations –  ADF Business Components –  Controller –  UI Layer
  7. 7. 7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Image: Ambro/ FreeDigitalPhotos.net Performance tuning shouldn't be an after thought
  8. 8. 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Security Dependencies Pick Any Two Optimize Memory Optimize CPU Optimize Network
  9. 9. 9 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Start As You Mean to Go On •  Performance goals are part of the requirements •  Establish those goals –  Concentrate on the user experience –  Think “average” rather than min/max •  Not all functions in the application need the same goals –  How often and by how many people? –  What is the user tolerance •  Inevitably there will also be “reactive” tuning –  Plan for this in the schedule
  10. 10. 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Example Goal “The application must accommodate for long periods of time 300 simultaneously active users with response time average not to exceed 2 seconds. The application must accommodate a peak load of 600 active users for short durations of time with response time average not to exceed 7 seconds” From: Techniques for Testing Performance/Scalability and Stress Testing ADF Applications March 2011
  11. 11. 11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. We're going to struggle to meet those benchmarks. Why? Exercise Image: imagerymajestic/ FreeDigitalPhotos.net
  12. 12. 12 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Preparing Your Baseline •  Performance needs to be measured objectively and realistically •  A bad testing regime can skew results vastly –  Not unusual for results to be out by a factor of 10x ++ –  So get your testing right!
  13. 13. 13 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Preparing Your Baseline •  Define a representative workload on critical areas •  Test continuously or at least at the end of each sprint –  It’s simpler to identify the cause of a performance problem at the time it is introduced –  Test for both atomic performance and performance under stress –  How confident are you that the performance after a restart and performance after 5 days running will be the same?
  14. 14. 14 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Testing Should… •  Recognize that real users are not computers –  Define think time (can be used to scale tests) –  Use a sensible iteration time •  Define a representative workload –  Length / nature of task –  Data distribution / records contention –  Numbers of users (aim high not low) •  Be based on production parameters –  e.g. Session timeout
  15. 15. 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Testing Tools •  UI unit testing ≠ functional testing ≠ performance testing –  (Although all are important) •  Various tools are available for testing but you need more than screen automation •  General recommendation suite based products –  e.g. Oracle Application Testing Suite (OATS) •  Basically you need specialized staff or something you can write once and automate for normal developers
  16. 16. 16 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. But What Can Developers Do? •  Core testing should be automated or in the hands of professionals •  But, developers have some responsibilities to prevent or flag issues –  How often is this fired? –  How much state am I holding? –  How many refreshes? •  This leads us to… Keeping an amateur eye on performance
  17. 17. 17 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” Structured Programming with go to Statements Computing Surveys, Vol 6, No 4, 1974; Donald Knuth
  18. 18. 18 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. In a Nutshell •  Never assume, never guess, measure –  Is an n-tier architecture even the correct choice? •  Make the general assumption that ADF will probably get it right (or have a way of doing to) –  Consider the greater cost of do-it-yourself (DIY) •  Look at the whole application end to end –  Observation - Most performance issues will be down to SQL • Elapsed time or over execution –  Handle corner cases for what they are Yes there is a design aspect to performance
  19. 19. 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Program Agenda •  The quest for performance •  Performance –  General Considerations –  ADF Business Components –  Controller –  UI Layer
  20. 20. 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. External Factors to Consider •  Correct O/S setup –  HugePages, file descriptors etc. •  JVM –  Server mode, generational parallel GC, optimized heaps •  Application server –  Logging switched off, correct pool sizes •  HTTP server –  Processes and threads •  LDAP This should only improve matters
  21. 21. 21 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Interacting With Web Services •  First of all… Do you need to? •  Understand the issues –  Calls are expensive –  Operations are (generally) atomic –  None of the usual semantics are standardized – transaction, array fetching, DML Performance Choice
  22. 22. 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Designing Dynamic Systems •  Not wanting to specify an upper limit –  e.g. tabsets & regions •  Insisting on a totally dynamic design –  How often do you actually need to customize? •  Sticking with existing home-grown customization infrastructure •  Confusion between customization, personalization and security configuration Common issues effecting performance
  23. 23. 23 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Program Agenda •  The quest for performance •  Performance –  General Considerations –  ADF Business Components –  Controller –  UI Layer
  24. 24. 24 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Application Modules •  Take advantage of AM Sharing for “static” shared data –  ADF Mbeans provide hit rate info – accessible via EM •  Use optimistic locking (Now the default in 11.1.2+ ) –  Better suited to browser deployed apps –  Reduce locking & rollback traffic on the DB •  Avoid dependency on a specific connection –  For example PL/SQL package state •  Use Oracle SQL rather than SQL92 •  Enable lazy loading of definitions Basic Principles
  25. 25. 25 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. AM Nesting •  Provides: –  A service façade / interface –  Functional use case –  Test point –  Transactional container / connection owner •  Not all AMs are equal –  Some are functional boundaries, some are conveniences –  Some are isolated, some are not What does the AM actually do?
  26. 26. 26 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Application Module Pooling •  Stop and read the documentation! •  Excellent coverage in Fusion Developers Guide –  Chapter 44 in 11.1.2 version “Tuning Application Module Pools and Connection Pools”
  27. 27. 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. What Happens on Passivation / Activation? •  Passivation –  Passivation XML created • Record diffs, current record pointers, bind variables, (transient attributes) , (custom user data Map) –  XML written to DB •  Activation –  XML read from DB –  User Map re-populated –  Prepare session code invoked –  Queries re-issued and result set scrolled Scalability at a cost
  28. 28. 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Application Module Pooling •  Use pooling of course (jbo.doconnectionpooling) –  Configuration based on user population • initpoolsize – take the hit at server startup • Maxavailablesize – to your projected average peak •  Aim to avoid passivation / activation costs –  Set recyclethreshold to maxavailablesize –  Bump up maxinactiveage –  Set timetolive = -1 –  Could save to up to 30% on response time Recomendations
  29. 29. 29 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. What About Database Connections? •  First of all configure your AMs to use DataSources –  Abstracts the connection out of the application •  Think in terms of AM pools rather than database connection pools –  Assuming 1 Root AM == 1 Connection (ignoring special cases) •  Sizing –  Good rule of thumb is that one AM will serve between 10 and 15 users comfortably –  Size for peak load based on this. What you need to do
  30. 30. 30 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  VOs define the queries - so this is a key area •  The preference is to not write the SQL manually –  You can loose out on optimizations –  Costly SQL is the no 1. performance problem in most systems •  Base read-only VOs on EOs to use the cache •  Let the framework optimize attribute selection (wide EOs) •  Don’t be afraid of multiple VOs and multiple instances General Principles
  31. 31. 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Object Tuning Options
  32. 32. 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  Many knobs to turn –  The defaults are probably not what you need –  Consider the use case for each VO & build additional VOs or VO instances if necessary… •  Primarily consider the batch-size based on the usage •  Transient attributes – passivate or recalculate? •  Access Mode is very dependent on the use case –  Implications of Page-Ranging - memory v’s network Tuning Options
  33. 33. 33 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  Fetch Size decides number of records read from DB in one round trip –  JDBC implementation pre-allocates memory that matches with fetch size to hold result set –  Set fetch size to range size of iterator in the page definition file + 3 –  For UI bound view objects, keep fetch size less than 30(not too high) –  The fetch size set for view object instance should be the maximum of range size configured for all iterators bounds to that instance –  To improve reusability, specify the fetch size at view object usage level or view accessor level Detailed Tuning Tips
  34. 34. 34 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  Maximum Fetch Size decides total number of records that a view object can retrieve from database –  It will silently stop retrieving rows when the amount of rows reaches the max fetch size. –  It is useful for either setting to 1 if you know you will only work with a single row at a time, or for setting to a number like 10 for a "Top Ten" query where you have included an ORDER BY in the query and want to retrieve only the top ten rows in that sort order Detailed Tuning Tips
  35. 35. 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  Range Size decides number of records read in to middle tier for a single data access –  If there are multiple UI components bound to same iterator, then range size should be set as the maximum of all rows to be read for all the bounded components. –  For range paging access mode, framework uses range size in building paginated queries –  Range size set for iterators in page dentition (non zero value) overrides range size specified for the underlying view object Detailed Tuning Tips
  36. 36. 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Tuning Tips •  Globally setting row limit for view objects in an application –  Row Fetch Limit can be set globally in adf-config.xml (e.g. 500) –  It prevents a poorly formulated query from fetching a huge number of rows –  You can override this at view object level by setting maximum fetch size or by overriding getRowLimit() in ViewOblectImpl to return the appropriate value Tuning Tips for View Objects
  37. 37. 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Tuning Tips •  Use declarative query mode whenever possible –  Declarative solution for building query for a view object –  This mode causes view object to dynamically adjust the SELECT clause to include only those columns used in the binding definition –  Not suitable for SQLs with complex WHERE clause Tuning Tips for View Objects
  38. 38. 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. View Objects •  Use view criteria to conditionally append WHERE clause to the query •  Mark at least one view criteria item as Required or Selectively Required •  Index the columns in database table corresponding to the view criteria items marked as Required or Selectively Required •  Avoid Contains and Ends With operators since DB index cannot be used on these queries. Tuning Tips for View Criteria in a View Object
  39. 39. 39 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. BC Tuning Gochyas •  Fault-ins –  Explicit extra queries needed to populate attributes not directly populated by the VO The things we forget EmpEO Validation involving Sal Fault-in Sal Comm Sal is required for the validation EmpVO EmpNo FirstName LastName Query 2nd Query (where EmpNo = :1) EmpNo FirstName LastName Sal Comm
  40. 40. 40 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Fault-Ins •  A fault-in is not expensive – it’s a key lookup –  Assuming you have indexes –  But it’s still one round trip per row (not array fetched) •  However, it could be a problem when you have 10s/100s of extra attributes or wide columns •  Consider including attributes in core VOs if this is likely to effect a lot of rows When does it matter?
  41. 41. 41 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Entity Objects •  Always set primary key(s), –  Do not use default RowId. It is not guaranteed to be unique in clustered environment •  Avoid list validator –  If the list returns more rows. It fetches all rows sequentially . •  Prefer to use get<AttributeName>() or getAttribute(int index) over getAttribute(String attributeName) –  For example empEO.getEmpName() is more performant than empEO.getAttribute(“EmpName”) Further best practice
  42. 42. 42 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Program Agenda •  The quest for performance •  Performance –  General Considerations –  ADF Business Components –  Controller –  UI Layer
  43. 43. 43 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Controller Specific •  Be aware of the implications of (not) sharing data controls •  Regions: convenience / reuse vs. cost –  Each taskflow has an overhead •  Enable HA and Customizations only if needed in adf-config.xml
  44. 44. 44 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Program Agenda •  The quest for performance •  Performance –  General Considerations –  ADF Business Components –  Controller –  UI Layer
  45. 45. 45 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Pre-Deployment Tasks •  Switch off “development mode” web.xml parameters –  Well documented in Tables 8-1 / 8-2 in the Oracle Fusion Middleware Performance and Tuning Guide e.g. set oracle.adf.view.rich.CHECK_FILE_MODIFICATION to false –  In most cases these options are OFF by default so you’ll only need to override those you have used The switches you need to flip
  46. 46. 46 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. ADF Faces Options •  View State cache – how much page state history do we remember (for the back button) –  In web.xml: –  Default value is 16 (15 old versions retained) Things you didn’t know you were remembering… <contextparam> <paramname> org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS </paramname> <paramvalue>2</paramvalue> </contextparam>
  47. 47. 47 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Cache what you can •  View Root caching –  Optimization for AJAX UI which tend to have fewer screens –  When view is changed, last component tree is discarded <contextparam> <paramname> org.apache.myfaces.trinidad.CACHE_VIEW_ROOT </paramname> <paramvalue>true</paramvalue> </contextparam>
  48. 48. 48 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. ADF Faces Options •  Compress the View State cache –  Trades memory for CPU –  Example customer application: •  Live memory reduced by 13% at a cost of 4.5% increase in CPU And Squeeze… <contextparam> <paramname> org.apache.myfaces.trinidad.COMPRESS_VIEW_STATE </paramname> <paramvalue>true</paramvalue> </contextparam>
  49. 49. 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. ADF Faces Options •  Use WebCache, ADF auto-configures it for you •  Configure JS and Images to use the resource servlet –  Sets cache header & reduces server file handle usage –  e.g. In web.xml: Enable Resource Caching <servletmapping> <servletname>resources</servletname> <urlpattern>/images/*</urlpattern> </servletmapping> <servletmapping> <servletname>resources</servletname> <urlpattern>/js/*</urlpattern> </servletmapping>
  50. 50. 50 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. ADF Faces Options Optimize JSP Servlet (11gR1 / R2 + JSPX) <initparam> <paramname>load_description_from_tlds</paramname> <paramvalue>false</paramvalue> </initparam> <initparam> <paramname>jsp_timeout</paramname> <paramvalue>600</paramvalue> </initparam> <initparam> <paramname>debug_mode</paramname> <paramvalue>false</paramvalue> </initparam> •  Again in web.xml
  51. 51. 51 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. UI Code Changes •  Don’t hold on to component references in pageflow / session scope (UIManager pattern) –  Breaks high availability, hogs memory and reflects bad coding practices •  Defer loading for popups and regions in popups where possible –  childCreation=“deferred” for popups –  Activation=“conditional” for regions – switch on popupFetch event (defined in pageDef) You Certainly Should Make…
  52. 52. 52 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Components •  Use short component IDs –  up to 10% page load time right there.. •  Only use clientComponent flag when actually needed –  The framework will automatically manage components mentioned in PPR •  Use rendered rather than visible to control visibility –  Less to send to the client –  More secure A few things to consider…
  53. 53. 53 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. PPR •  PPR needs to be designed –  Do use PPR whenever you can –  But, don’t refresh more than you need to •  Take advantage of the PPR navigation feature –  When switched on, page transitions become a partial request –  e.g. on Fusion use cases, saves ~1second on page transition time.
  54. 54. 54 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. “If you optimize everything you will always be unhappy.” Donald Knuth
  55. 55. 55 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Conclusion •  Building for performance can occur at the design phase •  You need to set realistic expectations •  Tuning absolutely everything will get you no where
  56. 56. 56 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Further Reading •  Oracle Fusion Middleware Performance and Tuning Guide 11.1.1.6.0 –  Section 8 – Oracle ADF Performance Tuning •  http://bit.ly/VXH6bz –  Techniques for Testing Performance/Scalability and Stress Testing ADF Applications •  http://bit.ly/13xOQTS
  57. 57. 57 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. •  The requirements document specifies the application must be "performant" •  A generic requirement states all pages for all 3 applications must return a response within ½ second •  There is a specific requirement on the OStore product search page that it must be extremely fast Non Functional Requirements
  58. 58. 58 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

×