Improve performance of Servers table in Admin UI


With a non-trivial number of servers and a sizable number of jobs in the database, the endpoint for the Admin UI servers table can take in excess of 10s to return, which means that requests pile up faster than they can be answered (with 10s UI refresh time).

To fix this:

1. Only query statistics performance once

The Admin UI includes a call to serviceRegistry.getServiceStatistics() inside a loop which is iterating through registered services. This call should be above the loop, as it is not a per-server call.

2. Constrain group by fields for job stats queries

The ServiceRegistration named queries ServiceRegistration.statistics and ServiceRegistration.hostloads have GROUP BY queries that group by all the fields in mh_service_registration, which is unnecessary as the id is a primary key.

Consequently queries produced for mysql are like this:

which seems to hurt performance, compared to the simpler and equivalent

Applicable REST endpoints are /services/statistics.json and AdminUI servers and services endpoints.

Fixed and reviewed
Your pinned fields
Click on the next to a field label to start pinning.


Stephen Marquard


Stephen Marquard