Top Ten List for 1.8 Performance Improvements

Top Ten List

  1. Speed up searches (TRUNK-1750)
    1. Search for patient by ID (TRUNK-1616) *Test done*
    2. Searching for a Provider (TRUNK-1664) *Test done*
    3. Searching for the location (TRUNK-1665) *Test done *
    4. Searching for concepts (TRUNK-1663) *Test done*
  2. Speed up the Cohort Builder (RCM-21) *Test done*
  3. Speed up HTML Form Entry (HTML-58*Test done, but may need a bigger form*
  4. Speed up and improve page loading (TRUNK-1751)
    1. Patient pages occasionally loading improperly (TRUNK-1621) -- will not measure
    2. Speed up loading of pages (javascript caching) (TRUNK-28) *Fixed and tested with firebug by Ben*
    3. Speed up "Edit Encounter" page (TRUNK-1740) *Test done*
  5. Speed up the patient dashboard (TRUNK-1667) *Test has been setup just needs refining*
  6. Speed up schema design page (TRUNK-1623) *Test done*
  7. Speed up modules by caching JavaScript files (TRUNK-1613) *Fixed and tested with firebug by Ben*
  8. Speed up reporting (TRUNK-1752)
    1. Data exports (RCM-20) *Test done*
    2. BIRT Reports (BIRT-30*Test is being omitted because module can't run with newer versions of OpenMRS e.g 1.8*
    3. Reporting Module (TRUNK-1754*not yet measured* (assigned to Darius)
  9. Speed up workflows (TRUNK-1753)
    1. Adding a new program and state (TRUNK-22) -- will not measure
    2. Ending a program with a terminal state (TRUNK-24) -- will not measure
    3. Editing drug orders (TRUNK-25) -- will not measure
    4. Mother to child relationship (FORM-105) -- will not measure
  10. Enhanced caching (TRUNK-434) *No extra special test is required, we just need to run all tests before and after enhanced caching*

We will build a module for 1.8 performance testing to isolate widgets/features for testing purposes. (TRUNK-1766)

Module Versions for benchmarking

Module

1.6

1.7

1.8

Form Entry

4.5.2

4.5.2.1

4.5.8

HTML Form Entry

1.6.4

1.6.2

1.6.7

Reporting Compatibility

1.5.0.3

1.5.0.3

1.5.2.1

Serialization.xstream

0.2.2

0.2.2

head (unreleased latest reporting needs unreleased latest serialization.xstream)

HTML Widgets

1.5.5

1.5.5

1.5.6

Reporting

0.4.1.9

0.4.1.9

head

BIRT

?

?

?

Suggestions

  1. Javascript files provided by modules are not cached? (probably fixable, medium priority) - TRUNK-1613
  2. It takes a long time for the patient dashboard to load after you click on a name on the search page (fixable, high priority) - TRUNK-1667
    • TODO: Need explicit targets for performance improvement (either existing features known to be inefficient OR hints from profiling)
    • FYI – Slowness from too many infopath forms fixedin formentry module 4.5.3
  3. Using cohort builder (probably fixable, but needs investigation, medium priority)
    • Searching the list of Patients having observations MALARIA<sup>archive:1</sup> TRUNK-1618
    • Find the list of patient enrolled in a program<sup>archive:2</sup> - TRUNK-1619
    • Patients having an encounter created for them
    • Searching for Admission diagnosis in the past year
  4. Data exports (using old framework) (RCM-20, low priority)
    • TODO: get a real data export that is slow
    • TODO: Jeremy will provide a data export that is used with the anonymized data set
  5. Patient pages occasionally loading improperly - the top summary bar loads but none of the tab data shows up when the page is done loading. After refreshing a few times, the data shows up. (unsure on fixability, high priority) - TRUNK-1621
    • TODO: replicate the error
    • NOTE: This could be fixed by replacing DOJO widgets with jquery widgets (TRUNK-1652 below)
  6. BIRT Reports are slow (documentation problem) - BIRT-30
  7. HTML Forms, especially complex ones, can take several seconds to load. (have example, high priority) - HTML-58
  8. Linking mother to child on encounter forms is a slow mainly due to the number of steps involved - (Requires UI improvements rather than Performance)
    • TODO: Fixed? Jeremy?
  9. Searching for the location on an infopath form taskpane - (TRUNK-1665)
  10. Searching for a Provider - (TRUNK-1664)
  11. Searching for concepts (e.g., in concept search widget of FormEntry taskpane) - (TRUNK-1663)
  12. Improve workflow when adding a new program and state (TRUNK-22, easy, medium priority)
  13. Improve workflow when ending a program with a terminal state (TRUNK-24, easy, medium priority)
  14. Improve workflow when editing drug orders (TRUNK-25)
  15. Generating data sets in the new reporting framework
    • TODO: Need a specific example if we're going to work on this one for 1.8
  16. It takes long time to load the schema in the Schema Design page. (high priority) - TRUNK-1623
  17. Development is very slow: - TRUNK-1666
    • Reloading modules can take many minutes if there are many deployed with dependencies, even if only one class in one module changes
  18. Reduce number of requests between browser and server - (TRUNK-34)
  19. Convert the dojo widgets to jquery widgets - (TRUNK-1652)
  20. Support for multi level database caching - (TRUNK-434)

Voted off the island

The following are too ambiguous or the solution is not clear/explicit enough for targeting 1.8.

  • Loading InfoPath forms (probably unfixable)
    • TODO: Need more details about /when/ the slowdown happens. After click and before "open/save as" comes up? After clicking "open in infopath" and before the page is fully shown?

References

Searching the list of Patients having observations MALARIA

SELECT given_name, family_name,ROUND(DATEDIFF(NOW(),birthdate)/365) as age, gender
FROM `obs`, patient, person, person_name
WHERE `value_coded` = 123
AND obs.person_id=person_name.person_id
AND obs.voided=0
AND patient.voided=0
AND patient.patient_id=obs.person_id
AND person.person_id=obs.person_id
GROUP BY patient_id
LIMIT 0, 300

Find the list of patient enrolled in a program

SELECT given_name, family_name,ROUND(DATEDIFF(NOW(),birthdate) /365) as age, gender
FROM `patient_program`, patient, person, person_name
WHERE program_id=6
AND patient_program.patient_id=person_name.person_id
AND patient_program.voided=0
AND patient.voided=0
AND patient.patient_id=patient_program.patient_id
AND person.person_id=patient_program.patient_id
GROUP BY patient.patient_id
LIMIT 0, 300

Functional/Performance Test Suite for OpenMRS

Repository

http://svn.openmrs.org/openmrs-contrib/performance-benchmark/

Pre-requisites
  • Java 1.6 SDK 
  • Maven (http://maven.apache.org)
  •  Firefox
  •  A deployed version of openmrs web app (at a host that you can specify below)
Usage

Running tests on default localhost port 8080

$ ./test.sh -u <username> -p <password>

Running tests on a non-default host.

$ ./test.sh -h <hostname> -o <port> -u <username> -p <password>

Running with profiling options (currently integrates with a running version of yourkit agent at the server side)

$ ./test.sh -u <username> -p <password> -c

Running all tests (including the tests specific for modules)

$ ./test.sh -u <username> -p <password> -a

Running all tests (including the tests specific for modules)

$ ./test.sh -u <username> -p <password> -a

Running an individual test class (it must be inside org.openmrs.test package). The argument must not include the package qualifier.

$ ./test.sh -u <username> -p <password> -t <TestClassName>

The connection.properties file

You can provide a connection.properties file in the project home directory where all connection attributes (like username, password, host etc) can be mentioned. A sample file connection.properties.sample is provided. Once a connection.properties file is created you need to enter them on the command line while running test.sh

The input.properties file

Parameters for tests can be modified in the input.properties file.

Currently all the parameters have been set for use with the a test data set which is available at http://wiki.openmrs.org/pages/viewpageattachments.action?pageId=3342470&metadataLink=true

Check the input.properties for more info